From cd98dc03429510b23e3f37259408e5ac3d557de6 Mon Sep 17 00:00:00 2001 From: Pat Garrity Date: Sat, 24 Feb 2024 11:26:12 -0600 Subject: [PATCH] More tests for the Tokenizer --- .../scala/ava/parser/TokenizerTests.scala | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/modules/parser/src/test/scala/ava/parser/TokenizerTests.scala b/modules/parser/src/test/scala/ava/parser/TokenizerTests.scala index 99a7cb4..dc4f5e2 100644 --- a/modules/parser/src/test/scala/ava/parser/TokenizerTests.scala +++ b/modules/parser/src/test/scala/ava/parser/TokenizerTests.scala @@ -109,6 +109,43 @@ class TokenizerTests extends munit.FunSuite: ) } + test("should capture all supported char escapes in a string literal") { + assertTokens( + "\"\\n\\r\\b\\f\\t\\\\\\\"\\\'\"", + Right(Token.StringLiteral("\n\r\b\f\t\\\"\'", Nil)) + ) + } + + test("should capture all supported char escapes in character literals") { + assertTokens("\'\\n\'", Right(Token.CharacterLiteral('\n', Nil))) + assertTokens("\'\\r\'", Right(Token.CharacterLiteral('\r', Nil))) + assertTokens("\'\\b\'", Right(Token.CharacterLiteral('\b', Nil))) + assertTokens("\'\\f\'", Right(Token.CharacterLiteral('\f', Nil))) + assertTokens("\'\\t\'", Right(Token.CharacterLiteral('\t', Nil))) + assertTokens("\'\\\\\'", Right(Token.CharacterLiteral('\\', Nil))) + assertTokens("\'\\\"\'", Right(Token.CharacterLiteral('"', Nil))) + assertTokens("\'\\'\'", Right(Token.CharacterLiteral('\'', Nil))) + } + + test("should handle a basic string literal") { + assertTokens("\"foo\"", Right(Token.StringLiteral("foo", Nil))) + } + + test("should handle a string literal with an invalid character escape") { + // Note: The character escape is simply not emitted, but we are able to + // successfully close out the string, which allows us to recover and parse + // more content. + assertTokens( + "\"foo\\!bar\"", + Right( + Token.StringLiteral( + "foobar", + List(Tokenizer.Error.InvalidCharEscape(pos(6, 1, 6), '!')) + ) + ) + ) + } + private def assertTokens( source: String, expectedOutput: Either[Tokenizer.Error, Token]*