1+ #if canImport(Testing)
2+ import Testing
13import Foundation
24import WasmParser
3- import XCTest
45
56@testable import WAT
67
7- class LexerTests : XCTestCase {
8+ @Suite
9+ struct LexerTests {
810 func collectToken( _ source: String ) throws -> [ TokenKind ] {
911 var lexer = Lexer ( input: source)
1012 var tokens : [ TokenKind ] = [ ]
@@ -14,94 +16,89 @@ class LexerTests: XCTestCase {
1416 return tokens
1517 }
1618
17- func testLexBasics( ) {
18- try XCTAssertEqual ( collectToken ( " " ) , [ ] )
19- try XCTAssertEqual ( collectToken ( " (module " ) , [ . leftParen, . keyword] )
20- try XCTAssertEqual ( collectToken ( " ( module " ) , [ . leftParen, . keyword] )
21- try XCTAssertEqual ( collectToken ( " ( \t module " ) , [ . leftParen, . keyword] )
22- try XCTAssertEqual ( collectToken ( " ( \n module " ) , [ . leftParen, . keyword] )
23- try XCTAssertEqual ( collectToken ( " (module) " ) , [ . leftParen, . keyword, . rightParen] )
19+ @Test
20+ func lexBasics( ) throws {
21+ #expect( try collectToken ( " " ) == [ ] )
22+ #expect( try collectToken ( " (module " ) == [ . leftParen, . keyword] )
23+ #expect( try collectToken ( " ( module " ) == [ . leftParen, . keyword] )
24+ #expect( try collectToken ( " ( \t module " ) == [ . leftParen, . keyword] )
25+ #expect( try collectToken ( " ( \n module " ) == [ . leftParen, . keyword] )
26+ #expect( try collectToken ( " (module) " ) == [ . leftParen, . keyword, . rightParen] )
2427
2528 }
2629
27- func testLexComment( ) {
28- XCTAssertEqual ( try collectToken ( " (; foo ;) " ) , [ . blockComment] )
29- try XCTAssertEqual (
30- collectToken (
30+ @Test
31+ func testLexComment( ) throws {
32+ #expect( try collectToken ( " (; foo ;) " ) == [ . blockComment] )
33+ #expect(
34+ try collectToken (
3135 """
3236 (;
3337 multi-line comment
3438 ;)
3539 """
36- ) ,
37- [ . blockComment]
40+ ) == [ . blockComment]
3841 )
39- try XCTAssertEqual ( collectToken ( " ;; foo " ) , [ . lineComment] )
40- try XCTAssertEqual ( collectToken ( " ;; foo \n (bar " ) , [ . lineComment, . leftParen, . keyword] )
42+ #expect ( try collectToken ( " ;; foo " ) == [ . lineComment] )
43+ #expect ( try collectToken ( " ;; foo \n (bar " ) == [ . lineComment, . leftParen, . keyword] )
4144
4245 }
4346
44- func testLexBrokenComment( ) {
45- XCTAssertThrowsError ( try collectToken ( " (;) " ) )
46- XCTAssertThrowsError ( try collectToken ( " (; foo ) " ) )
47- XCTAssertThrowsError ( try collectToken ( " ;) " ) )
47+ @Test
48+ func lexBrokenComment( ) throws {
49+ #expect( throws: ( any Error ) . self) { try collectToken ( " (;) " ) }
50+ #expect( throws: ( any Error ) . self) { try collectToken ( " (; foo ) " ) }
51+ #expect( throws: ( any Error ) . self) { try collectToken ( " ;) " ) }
4852 }
4953
50- func testLexIdAndString( ) throws {
51- try XCTAssertEqual ( collectToken ( " $foo " ) , [ . id] )
52- try XCTAssertEqual ( collectToken ( " \" foo \" " ) , [ . string( Array ( " foo " . utf8) ) ] )
53- try XCTAssertEqual ( collectToken ( " \" \\ t \\ n \\ r \\ \" \\ \\ \" " ) , [ . string( Array ( " \t \n \r \" \\ " . utf8) ) ] )
54- try XCTAssertEqual ( collectToken ( " \" \\ u{1F600} \" " ) , [ . string( Array ( " 😀 " . utf8) ) ] )
55- try XCTAssertEqual ( collectToken ( " $ \" foo \" " ) , [ . id] )
56- try XCTAssertEqual ( collectToken ( " 0$x " ) , [ . unknown] )
54+ @Test
55+ func lexIdAndString( ) throws {
56+ #expect( try collectToken ( " $foo " ) == [ . id] )
57+ #expect( try collectToken ( " \" foo \" " ) == [ . string( Array ( " foo " . utf8) ) ] )
58+ #expect( try collectToken ( " \" \\ t \\ n \\ r \\ \" \\ \\ \" " ) == [ . string( Array ( " \t \n \r \" \\ " . utf8) ) ] )
59+ #expect( try collectToken ( " \" \\ u{1F600} \" " ) == [ . string( Array ( " 😀 " . utf8) ) ] )
60+ #expect( try collectToken ( " $ \" foo \" " ) == [ . id] )
61+ #expect( try collectToken ( " 0$x " ) == [ . unknown] )
5762 }
5863
59- func testLexInteger( ) throws {
60- try XCTAssertEqual ( collectToken ( " inf " ) , [ . float( nil , . inf) ] )
61- try XCTAssertEqual ( collectToken ( " +inf " ) , [ . float( . plus, . inf) ] )
62- try XCTAssertEqual ( collectToken ( " -inf " ) , [ . float( . minus, . inf) ] )
63- try XCTAssertEqual ( collectToken ( " nan " ) , [ . float( nil , . nan( hexPattern: nil ) ) ] )
64- try XCTAssertEqual ( collectToken ( " +nan " ) , [ . float( . plus, . nan( hexPattern: nil ) ) ] )
65- try XCTAssertEqual ( collectToken ( " -nan " ) , [ . float( . minus, . nan( hexPattern: nil ) ) ] )
66- try XCTAssertEqual ( collectToken ( " nan:0x7f_ffff " ) , [ . float( nil , . nan( hexPattern: " 7fffff " ) ) ] )
67- try XCTAssertEqual ( collectToken ( " 3.14 " ) , [ . float( nil , . decimalPattern( " 3.14 " ) ) ] )
68- try XCTAssertEqual ( collectToken ( " 1e+07 " ) , [ . float( nil , . decimalPattern( " 1e+07 " ) ) ] )
69- try XCTAssertEqual ( collectToken ( " 1E+07 " ) , [ . float( nil , . decimalPattern( " 1E+07 " ) ) ] )
70- try XCTAssertEqual ( collectToken ( " 0xff " ) , [ . integer( nil , . hexPattern( " ff " ) ) ] )
71- try XCTAssertEqual ( collectToken ( " 8_128 " ) , [ . integer( nil , . decimalPattern( " 8128 " ) ) ] )
72- try XCTAssertEqual ( collectToken ( " 1.e10 " ) , [ . float( nil , . decimalPattern( " 1.e10 " ) ) ] )
64+ @Test
65+ func lexInteger( ) throws {
66+ #expect( try collectToken ( " inf " ) == [ . float( nil , . inf) ] )
67+ #expect( try collectToken ( " +inf " ) == [ . float( . plus, . inf) ] )
68+ #expect( try collectToken ( " -inf " ) == [ . float( . minus, . inf) ] )
69+ #expect( try collectToken ( " nan " ) == [ . float( nil , . nan( hexPattern: nil ) ) ] )
70+ #expect( try collectToken ( " +nan " ) == [ . float( . plus, . nan( hexPattern: nil ) ) ] )
71+ #expect( try collectToken ( " -nan " ) == [ . float( . minus, . nan( hexPattern: nil ) ) ] )
72+ #expect( try collectToken ( " nan:0x7f_ffff " ) == [ . float( nil , . nan( hexPattern: " 7fffff " ) ) ] )
73+ #expect( try collectToken ( " 3.14 " ) == [ . float( nil , . decimalPattern( " 3.14 " ) ) ] )
74+ #expect( try collectToken ( " 1e+07 " ) == [ . float( nil , . decimalPattern( " 1e+07 " ) ) ] )
75+ #expect( try collectToken ( " 1E+07 " ) == [ . float( nil , . decimalPattern( " 1E+07 " ) ) ] )
76+ #expect( try collectToken ( " 0xff " ) == [ . integer( nil , . hexPattern( " ff " ) ) ] )
77+ #expect( try collectToken ( " 8_128 " ) == [ . integer( nil , . decimalPattern( " 8128 " ) ) ] )
78+ #expect( try collectToken ( " 1.e10 " ) == [ . float( nil , . decimalPattern( " 1.e10 " ) ) ] )
7379 }
7480
75- func testLexFloatLiteral( ) throws {
76- try XCTAssertEqual ( collectToken ( " nan:canonical " ) , [ . keyword] )
77- try XCTAssertEqual ( collectToken ( " 0x1.921fb6p+2 " ) , [ . float( nil , . hexPattern( " 1.921fb6p+2 " ) ) ] )
81+ @Test
82+ func lexFloatLiteral( ) throws {
83+ #expect( try collectToken ( " nan:canonical " ) == [ . keyword] )
84+ #expect( try collectToken ( " 0x1.921fb6p+2 " ) == [ . float( nil , . hexPattern( " 1.921fb6p+2 " ) ) ] )
7885 }
7986
80- func testLexMemory( ) throws {
81- try XCTAssertEqual ( collectToken ( " (module (memory 1)) " ) , [ . leftParen, . keyword, . leftParen, . keyword, . integer( nil , . decimalPattern( " 1 " ) ) , . rightParen, . rightParen] )
87+ @Test
88+ func lexMemory( ) throws {
89+ #expect( try collectToken ( " (module (memory 1)) " ) == [ . leftParen, . keyword, . leftParen, . keyword, . integer( nil , . decimalPattern( " 1 " ) ) , . rightParen, . rightParen] )
8290 }
8391
84- func testLexSpectest( ) throws {
85- // NOTE: We do the same check as a part of the EncoderTests, so it's
86- // usually redundant and time-wasting to run this test every time.
87- // Keeping it here just for local unit testing purposes.
88- try XCTSkipIf (
89- ProcessInfo . processInfo. environment [ " WASMKIT_LEXER_SPECTEST " ] != " 1 "
90- )
91- var failureCount = 0
92- for filePath in Spectest . wastFiles ( ) {
93- print ( " Lexing \( filePath. path) ... " )
94- let source = try String ( contentsOf: filePath)
95- do {
96- _ = try collectToken ( source)
97- } catch {
98- failureCount += 1
99- XCTFail ( " Failed to lex \( filePath. path) : \( error) " )
100- }
101- }
102-
103- if failureCount > 0 {
104- XCTFail ( " Failed to lex \( failureCount) files " )
105- }
92+ // NOTE: We do the same check as a part of the EncoderTests, so it's
93+ // usually redundant and time-wasting to run this test every time.
94+ // Keeping it here just for local unit testing purposes.
95+ @Test (
96+ . enabled( if: ProcessInfo . processInfo. environment [ " WASMKIT_PARSER_SPECTEST " ] == " 1 " ) ,
97+ arguments: Spectest . wastFiles ( include: [ ] )
98+ )
99+ func lexSpectest( wastFile: URL ) throws {
100+ let source = try String ( contentsOf: wastFile)
101+ _ = try collectToken ( source)
106102 }
107103}
104+ #endif
0 commit comments