Concurrency
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
/// Unit tests for the Antelope lexer.
|
||||
///
|
||||
/// Tests tokenization of Makefile syntax: identifiers, operators,
|
||||
/// variable references, comments, recipe lines, and line continuations.
|
||||
module antelope.tests.parser.lexer_test;
|
||||
|
||||
import antelope.parser.lexer;
|
||||
|
||||
/// Test basic identifier and operator tokenization.
|
||||
unittest
|
||||
{
|
||||
auto lexer = Lexer("target: prereq\n");
|
||||
auto tok = lexer.nextToken();
|
||||
assert(tok.type == TokenType.identifier);
|
||||
assert(tok.value == "target");
|
||||
|
||||
tok = lexer.nextToken();
|
||||
assert(tok.type == TokenType.colon);
|
||||
|
||||
tok = lexer.nextToken();
|
||||
assert(tok.type == TokenType.identifier);
|
||||
assert(tok.value == "prereq");
|
||||
}
|
||||
|
||||
/// Test comment stripping — everything after '#' is ignored.
|
||||
unittest
|
||||
{
|
||||
auto lexer = Lexer("VAR = value # this is a comment\n");
|
||||
auto tok = lexer.nextToken();
|
||||
assert(tok.type == TokenType.identifier);
|
||||
assert(tok.value == "VAR");
|
||||
|
||||
tok = lexer.nextToken();
|
||||
assert(tok.type == TokenType.equals);
|
||||
|
||||
tok = lexer.nextToken();
|
||||
assert(tok.type == TokenType.identifier);
|
||||
assert(tok.value == "value");
|
||||
}
|
||||
|
||||
/// Test line continuation (backslash-newline).
|
||||
unittest
|
||||
{
|
||||
auto lexer = Lexer("target: prereq1 \\\n prereq2\n");
|
||||
auto tok = lexer.nextToken();
|
||||
assert(tok.type == TokenType.identifier);
|
||||
assert(tok.value == "target");
|
||||
|
||||
tok = lexer.nextToken();
|
||||
assert(tok.type == TokenType.colon);
|
||||
}
|
||||
|
||||
/// Test variable reference prefix ($).
|
||||
unittest
|
||||
{
|
||||
auto lexer = Lexer("$(VAR)\n");
|
||||
auto tok = lexer.nextToken();
|
||||
assert(tok.type == TokenType.dollar);
|
||||
}
|
||||
|
||||
/// Test recipe line detection (tab-prefixed).
|
||||
unittest
|
||||
{
|
||||
auto lexer = Lexer("\tgcc -c hello.c\n");
|
||||
auto tok = lexer.nextToken();
|
||||
assert(tok.type == TokenType.recipeLine);
|
||||
}
|
||||
Reference in New Issue
Block a user