62 lines
2.1 KiB
Kotlin
62 lines
2.1 KiB
Kotlin
package lexer
|
|
|
|
import lexer.errors.LexingError
|
|
import org.junit.jupiter.api.Test
|
|
import org.junit.jupiter.api.assertThrows
|
|
import kotlin.test.assertEquals
|
|
|
|
/**
|
|
* Tests for the Prolog lexer.
|
|
*
|
|
* These tests are based on the Prolog syntax.
|
|
*/
|
|
class ScanPrologTests {
|
|
@Test
|
|
fun scan_simple_atom() {
|
|
val tokens = Lexer("atom.").scan()
|
|
|
|
assertEquals(3, tokens.size)
|
|
|
|
assertEquals(TokenType.ALPHANUMERIC, tokens[0].type, "Expected ALPHANUMERIC token, got ${tokens[0].type}")
|
|
assertEquals(TokenType.DOT, tokens[1].type, "Expected DOT token, got ${tokens[1].type}")
|
|
assertEquals(TokenType.EOF, tokens[2].type, "Expected EOF token, got ${tokens[2].type}")
|
|
}
|
|
|
|
@Test
|
|
fun scan_variable() {
|
|
val tokens = Lexer("X.").scan()
|
|
|
|
assertEquals(3, tokens.size)
|
|
|
|
assertEquals(TokenType.ALPHANUMERIC, tokens[0].type, "Expected ALPHANUMERIC token, got ${tokens[0].type}")
|
|
assertEquals(TokenType.DOT, tokens[1].type, "Expected DOT token, got ${tokens[1].type}")
|
|
assertEquals(TokenType.EOF, tokens[2].type, "Expected EOF token, got ${tokens[2].type}")
|
|
}
|
|
|
|
@Test
|
|
fun scan_variable_with_number() {
|
|
val tokens = Lexer("X1.").scan()
|
|
|
|
assertEquals(3, tokens.size)
|
|
|
|
assertEquals(TokenType.ALPHANUMERIC, tokens[0].type, "Expected ALPHANUMERIC token, got ${tokens[0].type}")
|
|
assertEquals(TokenType.DOT, tokens[1].type, "Expected DOT token, got ${tokens[1].type}")
|
|
assertEquals(TokenType.EOF, tokens[2].type, "Expected EOF token, got ${tokens[2].type}")
|
|
}
|
|
|
|
@Test
|
|
fun scan_variable_with_underscore() {
|
|
val tokens = Lexer("X_1.").scan()
|
|
|
|
assertEquals(3, tokens.size)
|
|
|
|
assertEquals(TokenType.ALPHANUMERIC, tokens[0].type, "Expected ALPHANUMERIC token, got ${tokens[0].type}")
|
|
assertEquals(TokenType.DOT, tokens[1].type, "Expected DOT token, got ${tokens[1].type}")
|
|
assertEquals(TokenType.EOF, tokens[2].type, "Expected EOF token, got ${tokens[2].type}")
|
|
}
|
|
|
|
@Test
|
|
fun scan_variable_that_starts_with_a_number() {
|
|
assertThrows<LexingError> { Lexer("1X.").scan() }
|
|
}
|
|
}
|