package parser import lexer.Token import lexer.TokenPosition import lexer.TokenType import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Disabled import org.junit.jupiter.api.Test import prolog.ast.terms.Atom import prolog.ast.terms.CompoundTerm class ParseTests { @Test fun `parse atom a`() { val input = Token(TokenType.ALPHANUMERIC, "a", TokenPosition(0, 0, 1)) val result = Parser(listOf(input)).parse() assertEquals(1, result.size, "Expected 1 term") assertEquals(Atom("a"), result[0], "Expected atom 'a'") } @Test fun `parse atom foo`() { val input = Token(TokenType.ALPHANUMERIC, "foo", TokenPosition(0, 0, 3)) val result = Parser(listOf(input)).parse() assertEquals(1, result.size, "Expected 1 term") assertEquals(Atom("foo"), result[0], "Expected atom 'foo'") } @Test fun `parse atom foo1`() { val input = Token(TokenType.ALPHANUMERIC, "foo1", TokenPosition(0, 0, 4)) val result = Parser(listOf(input)).parse() assertEquals(1, result.size, "Expected 1 term") assertEquals(Atom("foo1"), result[0], "Expected atom 'foo1'") } @Test fun `parse atom fooBar`() { val name = "fooBar" val input = Token(TokenType.ALPHANUMERIC, name, TokenPosition(0, 0, 6)) val result = Parser(listOf(input)).parse() assertEquals(1, result.size, "Expected 1 term") assertEquals(Atom(name), result[0], "Expected atom 'fooBar'") } @Test fun `parse atom foo_bar`() { val name = "foo_bar" val input = Token(TokenType.ALPHANUMERIC, name, TokenPosition(0, 0, 7)) val result = Parser(listOf(input)).parse() assertEquals(1, result.size, "Expected 1 term") assertEquals(Atom(name), result[0], "Expected atom 'foo_bar'") } @Test fun `parse atom my_FooBar1`() { val name = "my_FooBar1" val input = Token(TokenType.ALPHANUMERIC, name, TokenPosition(0, 0, 11)) val result = Parser(listOf(input)).parse() assertEquals(1, result.size, "Expected 1 term") assertEquals(Atom(name), result[0], "Expected atom 'my_FooBar1'") } }