diff --git a/LanguageServer/src/test/java/org/nittalab/dtram/languageserver/utils/SemanticAnalyzerTest.java b/LanguageServer/src/test/java/org/nittalab/dtram/languageserver/utils/SemanticAnalyzerTest.java new file mode 100644 index 0000000..3ca288e --- /dev/null +++ b/LanguageServer/src/test/java/org/nittalab/dtram/languageserver/utils/SemanticAnalyzerTest.java @@ -0,0 +1,89 @@ +package org.nittalab.dtram.languageserver.utils; + +import org.eclipse.lsp4j.SemanticTokenTypes; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.nittalab.dtram.languageserver.model.Position; +import org.nittalab.dtram.languageserver.model.SemanticToken; +import org.nittalab.dtram.languageserver.model.Token; + +import java.util.List; + +@DisplayName("Semantic Analyzer") +public class SemanticAnalyzerTest { + @Test + public void test() { + } + + @Test + public void removeSpacesTest() { + Token token0 = new Token(" ", new Position(1, 1), true); + Token token1 = new Token("spaces", token0.getEndPos().move(0, 1), false); + Token token2 = new Token(" ", token1.getEndPos().move(0, 1), true); + Token token3 = new Token("must", token2.getEndPos().move(0, 1), false); + Token token4 = new Token(" ", token3.getEndPos().move(0, 1), true); + Token token5 = new Token("be", token4.getEndPos().move(0, 1), false); + Token token6 = new Token(" ", token5.getEndPos().move(0, 1), true); + Token token7 = new Token("removed", token6.getEndPos().move(0, 1), false); + Token token8 = new Token(" ", token7.getEndPos().move(0, 1), true); + List tokens = List.of(token0, token1, token2, token3, token4, token5, token6, token7, token8); + + List expected = List.of(token1, token3, token5, token7); + List actual = SemanticAnalyzer.removeSpaces(tokens); + Assertions.assertIterableEquals(expected, actual); + } + + @Test + public void analyzeAtomicTokensTest() { + Token token0 = new Token("player", new Position(1, 1), false); + Token token1 = new Token(".", token0.getEndPos().move(0, 1), true); + Token token2 = new Token("level", token1.getEndPos().move(0, 1), false); + Token token3 = new Token("=", token2.getEndPos().move(0, 1), true); + Token token4 = new Token("oldPlayer", token3.getEndPos().move(0, 1), false); + Token token5 = new Token(".", token4.getEndPos().move(0, 1), true); + Token token6 = new Token("level", token5.getEndPos().move(0, 1), false); + Token token7 = new Token("+", token6.getEndPos().move(0, 1), true); + Token token8 = new Token("1", token7.getEndPos().move(0, 1), false); + List tokens = List.of(token0, token1, token2, token3, token4, token5, token6, token7, token8); + + List expected = List.of(token0, token1, token2, new SemanticToken(SemanticTokenTypes.Operator, token3), token4, token5, token6, new SemanticToken(SemanticTokenTypes.Operator, token7), token8); + List actual = SemanticAnalyzer.analyzeAtomicTokens(tokens); + Assertions.assertIterableEquals(expected, actual); + } + + @Test + public void analyzeStringTokensTest() { + Token token0 = new Token("player", new Position(1, 1), false); + Token token1 = new Token(".", token0.getEndPos().move(0, 1), true); + Token token2 = new Token("name", token1.getEndPos().move(0, 1), false); + Token token3 = new SemanticToken(SemanticTokenTypes.Operator, new Token("=", token2.getEndPos().move(0, 1), true)); + Token token4 = new SemanticToken(SemanticTokenTypes.String, new Token("\"", token3.getEndPos().move(0, 1), true)); + Token token5 = new Token("alice", token4.getEndPos().move(0, 1), false); + Token token6 = new SemanticToken(SemanticTokenTypes.String, new Token("\"", token5.getEndPos().move(0, 1), true)); + List tokens = List.of(token0, token1, token2, token3, token4, token5, token6); + + List expected = List.of(token0, token1, token2, token3, token4, new SemanticToken(SemanticTokenTypes.String, token5), token6); + List actual = SemanticAnalyzer.analyzeStringTokens(tokens); + Assertions.assertIterableEquals(expected, actual); + } + + @Test + public void analyzeTypeTokensTest() { + Token token0 = new Token("updateProfile", new Position(1, 1), false); + Token token1 = new Token("(", token0.getEndPos().move(0, 1), true); + Token token2 = new Token("name", token1.getEndPos().move(0, 1), false); + Token token3 = new Token(":", token2.getEndPos().move(0, 1), true); + Token token4 = new Token("Str", token3.getEndPos().move(0, 1), false); + Token token5 = new Token(",", token4.getEndPos().move(0, 1), true); + Token token6 = new Token("age", token5.getEndPos().move(0, 1), false); + Token token7 = new Token(":", token6.getEndPos().move(0, 1), true); + Token token8 = new Token("Int", token7.getEndPos().move(0, 1), false); + Token token9 = new Token(")", token8.getEndPos().move(0, 1), true); + List tokens = List.of(token0, token1, token2, token3, token4, token5, token6, token7, token8, token9); + + List expected = List.of(token0, token1, token2, token3, new SemanticToken(SemanticTokenTypes.Type, token4), token5, token6, token7, new SemanticToken(SemanticTokenTypes.Type, token8), token9); + List actual = SemanticAnalyzer.analyzeTypeTokens(tokens); + Assertions.assertIterableEquals(expected, actual); + } +}