Made structural change to lexer test definitions
This commit is contained in:
parent
54de3d1270
commit
be9a3603d2
@ -5,7 +5,11 @@ import "git.tebibyte.media/sashakoshka/arf/file"
|
||||
import "git.tebibyte.media/sashakoshka/arf/types"
|
||||
import "git.tebibyte.media/sashakoshka/arf/infoerr"
|
||||
|
||||
func checkTokenSlice (filePath string, correct []Token, test *testing.T) {
|
||||
func quickToken (kind TokenKind, value any) (token Token) {
|
||||
return Token { kind: kind, value: value }
|
||||
}
|
||||
|
||||
func checkTokenSlice (filePath string, test *testing.T, correct ...Token) {
|
||||
test.Log("checking lexer results for", filePath)
|
||||
file, err := file.Open(filePath)
|
||||
if err != nil {
|
||||
@ -108,119 +112,119 @@ func compareErr (
|
||||
}
|
||||
|
||||
func TestTokenizeAll (test *testing.T) {
|
||||
checkTokenSlice("../tests/lexer/all.arf", []Token {
|
||||
Token { kind: TokenKindSeparator },
|
||||
Token { kind: TokenKindPermission, value: types.Permission {
|
||||
checkTokenSlice("../tests/lexer/all.arf", test,
|
||||
quickToken(TokenKindSeparator, nil),
|
||||
quickToken (TokenKindPermission, types.Permission {
|
||||
Internal: types.ModeRead,
|
||||
External: types.ModeWrite,
|
||||
}},
|
||||
Token { kind: TokenKindReturnDirection },
|
||||
Token { kind: TokenKindInt, value: int64(-349820394) },
|
||||
Token { kind: TokenKindUInt, value: uint64(932748397) },
|
||||
Token { kind: TokenKindFloat, value: 239485.37520 },
|
||||
Token { kind: TokenKindString, value: "hello world!\n" },
|
||||
Token { kind: TokenKindRune, value: 'E' },
|
||||
Token { kind: TokenKindName, value: "helloWorld" },
|
||||
Token { kind: TokenKindColon },
|
||||
Token { kind: TokenKindDot },
|
||||
Token { kind: TokenKindComma },
|
||||
Token { kind: TokenKindElipsis },
|
||||
Token { kind: TokenKindLBracket },
|
||||
Token { kind: TokenKindRBracket },
|
||||
Token { kind: TokenKindLBrace },
|
||||
Token { kind: TokenKindRBrace },
|
||||
Token { kind: TokenKindNewline },
|
||||
Token { kind: TokenKindPlus },
|
||||
Token { kind: TokenKindMinus },
|
||||
Token { kind: TokenKindIncrement },
|
||||
Token { kind: TokenKindDecrement },
|
||||
Token { kind: TokenKindAsterisk },
|
||||
Token { kind: TokenKindSlash },
|
||||
Token { kind: TokenKindAt },
|
||||
Token { kind: TokenKindExclamation },
|
||||
Token { kind: TokenKindPercent },
|
||||
Token { kind: TokenKindTilde },
|
||||
Token { kind: TokenKindLessThan },
|
||||
Token { kind: TokenKindLShift },
|
||||
Token { kind: TokenKindGreaterThan },
|
||||
Token { kind: TokenKindRShift },
|
||||
Token { kind: TokenKindBinaryOr },
|
||||
Token { kind: TokenKindLogicalOr },
|
||||
Token { kind: TokenKindBinaryAnd },
|
||||
Token { kind: TokenKindLogicalAnd },
|
||||
Token { kind: TokenKindNewline },
|
||||
}, test)
|
||||
}),
|
||||
quickToken(TokenKindReturnDirection, nil),
|
||||
quickToken(TokenKindInt, int64(-349820394)),
|
||||
quickToken(TokenKindUInt, uint64(932748397)),
|
||||
quickToken(TokenKindFloat, 239485.37520),
|
||||
quickToken(TokenKindString, "hello world!\n"),
|
||||
quickToken(TokenKindRune, 'E'),
|
||||
quickToken(TokenKindName, "helloWorld"),
|
||||
quickToken(TokenKindColon, nil),
|
||||
quickToken(TokenKindDot, nil),
|
||||
quickToken(TokenKindComma, nil),
|
||||
quickToken(TokenKindElipsis, nil),
|
||||
quickToken(TokenKindLBracket, nil),
|
||||
quickToken(TokenKindRBracket, nil),
|
||||
quickToken(TokenKindLBrace, nil),
|
||||
quickToken(TokenKindRBrace, nil),
|
||||
quickToken(TokenKindNewline, nil),
|
||||
quickToken(TokenKindPlus, nil),
|
||||
quickToken(TokenKindMinus, nil),
|
||||
quickToken(TokenKindIncrement, nil),
|
||||
quickToken(TokenKindDecrement, nil),
|
||||
quickToken(TokenKindAsterisk, nil),
|
||||
quickToken(TokenKindSlash, nil),
|
||||
quickToken(TokenKindAt, nil),
|
||||
quickToken(TokenKindExclamation, nil),
|
||||
quickToken(TokenKindPercent, nil),
|
||||
quickToken(TokenKindTilde, nil),
|
||||
quickToken(TokenKindLessThan, nil),
|
||||
quickToken(TokenKindLShift, nil),
|
||||
quickToken(TokenKindGreaterThan, nil),
|
||||
quickToken(TokenKindRShift, nil),
|
||||
quickToken(TokenKindBinaryOr, nil),
|
||||
quickToken(TokenKindLogicalOr, nil),
|
||||
quickToken(TokenKindBinaryAnd, nil),
|
||||
quickToken(TokenKindLogicalAnd, nil),
|
||||
quickToken(TokenKindNewline, nil),
|
||||
)
|
||||
}
|
||||
|
||||
func TestTokenizeNumbers (test *testing.T) {
|
||||
checkTokenSlice("../tests/lexer/numbers.arf", []Token {
|
||||
Token { kind: TokenKindUInt, value: uint64(0) },
|
||||
Token { kind: TokenKindNewline },
|
||||
Token { kind: TokenKindUInt, value: uint64(8) },
|
||||
Token { kind: TokenKindNewline },
|
||||
Token { kind: TokenKindUInt, value: uint64(83628266) },
|
||||
Token { kind: TokenKindNewline },
|
||||
Token { kind: TokenKindUInt, value: uint64(83628266) },
|
||||
Token { kind: TokenKindNewline },
|
||||
Token { kind: TokenKindUInt, value: uint64(83628266) },
|
||||
Token { kind: TokenKindNewline },
|
||||
Token { kind: TokenKindUInt, value: uint64(83628266) },
|
||||
Token { kind: TokenKindNewline },
|
||||
checkTokenSlice("../tests/lexer/numbers.arf", test,
|
||||
quickToken(TokenKindUInt, uint64(0)),
|
||||
quickToken(TokenKindNewline, nil),
|
||||
quickToken(TokenKindUInt, uint64(8)),
|
||||
quickToken(TokenKindNewline, nil),
|
||||
quickToken(TokenKindUInt, uint64(83628266)),
|
||||
quickToken(TokenKindNewline, nil),
|
||||
quickToken(TokenKindUInt, uint64(83628266)),
|
||||
quickToken(TokenKindNewline, nil),
|
||||
quickToken(TokenKindUInt, uint64(83628266)),
|
||||
quickToken(TokenKindNewline, nil),
|
||||
quickToken(TokenKindUInt, uint64(83628266)),
|
||||
quickToken(TokenKindNewline, nil),
|
||||
|
||||
Token { kind: TokenKindInt, value: int64(-83628266) },
|
||||
Token { kind: TokenKindNewline },
|
||||
Token { kind: TokenKindInt, value: int64(-83628266) },
|
||||
Token { kind: TokenKindNewline },
|
||||
Token { kind: TokenKindInt, value: int64(-83628266) },
|
||||
Token { kind: TokenKindNewline },
|
||||
Token { kind: TokenKindInt, value: int64(-83628266) },
|
||||
Token { kind: TokenKindNewline },
|
||||
quickToken(TokenKindInt, int64(-83628266)),
|
||||
quickToken(TokenKindNewline, nil),
|
||||
quickToken(TokenKindInt, int64(-83628266)),
|
||||
quickToken(TokenKindNewline, nil),
|
||||
quickToken(TokenKindInt, int64(-83628266)),
|
||||
quickToken(TokenKindNewline, nil),
|
||||
quickToken(TokenKindInt, int64(-83628266)),
|
||||
quickToken(TokenKindNewline, nil),
|
||||
|
||||
Token { kind: TokenKindFloat, value: float64(0.123478) },
|
||||
Token { kind: TokenKindNewline },
|
||||
Token { kind: TokenKindFloat, value: float64(234.3095) },
|
||||
Token { kind: TokenKindNewline },
|
||||
Token { kind: TokenKindFloat, value: float64(-2.312) },
|
||||
Token { kind: TokenKindNewline },
|
||||
}, test)
|
||||
quickToken(TokenKindFloat, float64(0.123478)),
|
||||
quickToken(TokenKindNewline, nil),
|
||||
quickToken(TokenKindFloat, float64(234.3095)),
|
||||
quickToken(TokenKindNewline, nil),
|
||||
quickToken(TokenKindFloat, float64(-2.312)),
|
||||
quickToken(TokenKindNewline, nil),
|
||||
)
|
||||
}
|
||||
|
||||
func TestTokenizeText (test *testing.T) {
|
||||
checkTokenSlice("../tests/lexer/text.arf", []Token {
|
||||
Token { kind: TokenKindString, value: "hello world!\a\b\f\n\r\t\v'\"\\" },
|
||||
Token { kind: TokenKindNewline },
|
||||
Token { kind: TokenKindRune, value: '\a' },
|
||||
Token { kind: TokenKindRune, value: '\b' },
|
||||
Token { kind: TokenKindRune, value: '\f' },
|
||||
Token { kind: TokenKindRune, value: '\n' },
|
||||
Token { kind: TokenKindRune, value: '\r' },
|
||||
Token { kind: TokenKindRune, value: '\t' },
|
||||
Token { kind: TokenKindRune, value: '\v' },
|
||||
Token { kind: TokenKindRune, value: '\'' },
|
||||
Token { kind: TokenKindRune, value: '"' },
|
||||
Token { kind: TokenKindRune, value: '\\' },
|
||||
Token { kind: TokenKindNewline },
|
||||
Token { kind: TokenKindString, value: "hello world \x40\u0040\U00000040!" },
|
||||
Token { kind: TokenKindNewline },
|
||||
}, test)
|
||||
checkTokenSlice("../tests/lexer/text.arf", test,
|
||||
quickToken(TokenKindString, "hello world!\a\b\f\n\r\t\v'\"\\"),
|
||||
quickToken(TokenKindNewline, nil),
|
||||
quickToken(TokenKindRune, '\a'),
|
||||
quickToken(TokenKindRune, '\b'),
|
||||
quickToken(TokenKindRune, '\f'),
|
||||
quickToken(TokenKindRune, '\n'),
|
||||
quickToken(TokenKindRune, '\r'),
|
||||
quickToken(TokenKindRune, '\t'),
|
||||
quickToken(TokenKindRune, '\v'),
|
||||
quickToken(TokenKindRune, '\''),
|
||||
quickToken(TokenKindRune, '"' ),
|
||||
quickToken(TokenKindRune, '\\'),
|
||||
quickToken(TokenKindNewline, nil),
|
||||
quickToken(TokenKindString, "hello world \x40\u0040\U00000040!"),
|
||||
quickToken(TokenKindNewline, nil),
|
||||
)
|
||||
}
|
||||
|
||||
func TestTokenizeIndent (test *testing.T) {
|
||||
checkTokenSlice("../tests/lexer/indent.arf", []Token {
|
||||
Token { kind: TokenKindName, value: "line1" },
|
||||
Token { kind: TokenKindNewline },
|
||||
Token { kind: TokenKindIndent, value: 1 },
|
||||
Token { kind: TokenKindName, value: "line2" },
|
||||
Token { kind: TokenKindNewline },
|
||||
Token { kind: TokenKindIndent, value: 4 },
|
||||
Token { kind: TokenKindName, value: "line3" },
|
||||
Token { kind: TokenKindNewline },
|
||||
Token { kind: TokenKindName, value: "line4" },
|
||||
Token { kind: TokenKindNewline },
|
||||
Token { kind: TokenKindIndent, value: 2 },
|
||||
Token { kind: TokenKindName, value: "line5" },
|
||||
Token { kind: TokenKindNewline },
|
||||
}, test)
|
||||
checkTokenSlice("../tests/lexer/indent.arf", test,
|
||||
quickToken(TokenKindName, "line1"),
|
||||
quickToken(TokenKindNewline, nil),
|
||||
quickToken(TokenKindIndent, 1),
|
||||
quickToken(TokenKindName, "line2"),
|
||||
quickToken(TokenKindNewline, nil),
|
||||
quickToken(TokenKindIndent, 4),
|
||||
quickToken(TokenKindName, "line3"),
|
||||
quickToken(TokenKindNewline, nil),
|
||||
quickToken(TokenKindName, "line4"),
|
||||
quickToken(TokenKindNewline, nil),
|
||||
quickToken(TokenKindIndent, 2),
|
||||
quickToken(TokenKindName, "line5"),
|
||||
quickToken(TokenKindNewline, nil),
|
||||
)
|
||||
}
|
||||
|
||||
func TestTokenizeErr (test *testing.T) {
|
||||
|
Reference in New Issue
Block a user