@@ -31,58 +31,66 @@ func entryPoint(passing args: __CommandLineArguments_v0?, eventHandler: Event.Ha
3131 let exitCode = Locked ( rawValue: EXIT_SUCCESS)
3232
3333 do {
34- let args = try args ?? parseCommandLineArguments ( from: CommandLine . arguments)
35- if args. listTests ?? false {
36- for testID in await listTestsForEntryPoint ( Test . all) {
37- #if SWT_TARGET_OS_APPLE && !SWT_NO_FILE_IO
38- try ? FileHandle . stdout. write ( " \( testID) \n " )
39- #else
40- print ( testID)
41- #endif
42- }
43- } else {
4434#if !SWT_NO_EXIT_TESTS
4535 // If an exit test was specified, run it. `exitTest` returns `Never`.
4636 if let exitTest = ExitTest . findInEnvironmentForEntryPoint ( ) {
4737 await exitTest ( )
4838 }
4939#endif
5040
51- // Configure the test runner.
52- var configuration = try configurationForEntryPoint ( from: args)
41+ let args = try args ?? parseCommandLineArguments ( from: CommandLine . arguments)
42+ // Configure the test runner.
43+ var configuration = try configurationForEntryPoint ( from: args)
5344
54- // Set up the event handler.
55- configuration. eventHandler = { [ oldEventHandler = configuration. eventHandler] event, context in
56- if case let . issueRecorded( issue) = event. kind, !issue. isKnown {
57- exitCode. withLock { exitCode in
58- exitCode = EXIT_FAILURE
59- }
45+ // Set up the event handler.
46+ configuration. eventHandler = { [ oldEventHandler = configuration. eventHandler] event, context in
47+ if case let . issueRecorded( issue) = event. kind, !issue. isKnown {
48+ exitCode. withLock { exitCode in
49+ exitCode = EXIT_FAILURE
6050 }
61- oldEventHandler ( event, context)
6251 }
52+ oldEventHandler ( event, context)
53+ }
6354
6455#if !SWT_NO_FILE_IO
65- // Configure the event recorder to write events to stderr.
66- var options = Event . ConsoleOutputRecorder. Options ( )
67- options = . for( . stderr)
68- options. verbosity = args. verbosity
69- let eventRecorder = Event . ConsoleOutputRecorder ( options: options) { string in
70- try ? FileHandle . stderr. write ( string)
71- }
56+ // Configure the event recorder to write events to stderr.
57+ var options = Event . ConsoleOutputRecorder. Options ( )
58+ options = . for( . stderr)
59+ options. verbosity = args. verbosity
60+ let eventRecorder = Event . ConsoleOutputRecorder ( options: options) { string in
61+ try ? FileHandle . stderr. write ( string)
62+ }
63+ configuration. eventHandler = { [ oldEventHandler = configuration. eventHandler] event, context in
64+ eventRecorder. record ( event, in: context)
65+ oldEventHandler ( event, context)
66+ }
67+ #endif
68+
69+ // If the caller specified an alternate event handler, hook it up too.
70+ if let eventHandler {
7271 configuration. eventHandler = { [ oldEventHandler = configuration. eventHandler] event, context in
73- eventRecorder . record ( event, in : context)
72+ eventHandler ( event, context)
7473 oldEventHandler ( event, context)
7574 }
76- #endif
75+ }
7776
78- // If the caller specified an alternate event handler, hook it up too.
79- if let eventHandler {
80- configuration. eventHandler = { [ oldEventHandler = configuration. eventHandler] event, context in
81- eventHandler ( event, context)
82- oldEventHandler ( event, context)
83- }
77+ if args. listTests ?? false {
78+ let tests = await Test . all
79+ for testID in listTestsForEntryPoint ( tests) {
80+ // Print the test ID to stdout (classical CLI behavior.)
81+ #if SWT_TARGET_OS_APPLE && !SWT_NO_FILE_IO
82+ try ? FileHandle . stdout. write ( " \( testID) \n " )
83+ #else
84+ print ( testID)
85+ #endif
8486 }
8587
88+ // Post an event for every discovered test. These events are turned into
89+ // JSON objects if JSON output is enabled.
90+ for test in tests {
91+ Event . post ( . testDiscovered, for: test, testCase: nil , configuration: configuration)
92+ }
93+ } else {
8694 // Run the tests.
8795 let runner = await Runner ( configuration: configuration)
8896 await runner. run ( )
0 commit comments