diff --git a/build.gradle.kts b/build.gradle.kts index a93eabfd..d065135f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -117,6 +117,11 @@ tasks { ?: tasksUsingDownloadedJbr.add(this) } + withType { + systemProperty("idea.test.execution.policy", "org.nixos.idea.NixTestExecutionPolicy") + systemProperty("plugin.testDataPath", rootProject.rootDir.resolve("src/test/testData").path) + } + task("metadata") { outputs.upToDateWhen { false } doLast { diff --git a/src/test/java/org/nixos/idea/NixTestExecutionPolicy.java b/src/test/java/org/nixos/idea/NixTestExecutionPolicy.java new file mode 100644 index 00000000..3770383e --- /dev/null +++ b/src/test/java/org/nixos/idea/NixTestExecutionPolicy.java @@ -0,0 +1,20 @@ +package org.nixos.idea; + +import com.intellij.testFramework.fixtures.IdeaTestExecutionPolicy; + +/** + * Test execution policy referenced by the build setup build.gradle.kts. + * Tests like {@link org.nixos.idea.lang.LexerFilesTest} use it to locate the test data directory. + */ +@SuppressWarnings("unused") +public class NixTestExecutionPolicy extends IdeaTestExecutionPolicy { + @Override + protected String getName() { + return "Nix"; + } + + @Override + public String getHomePath() { + return System.getProperty("plugin.testDataPath"); + } +} diff --git a/src/test/java/org/nixos/idea/lang/LexerFilesTest.java b/src/test/java/org/nixos/idea/lang/LexerFilesTest.java new file mode 100644 index 00000000..ce7d2514 --- /dev/null +++ b/src/test/java/org/nixos/idea/lang/LexerFilesTest.java @@ -0,0 +1,70 @@ +package org.nixos.idea.lang; + +import com.intellij.lexer.Lexer; +import com.intellij.testFramework.LexerTestCase; +import com.intellij.testFramework.fixtures.IdeaTestExecutionPolicy; +import org.jetbrains.annotations.NotNull; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.stream.Collectors; + +/** + * Parameterized lexer test for all Nix files inside src/test/testData/ParsingTest/. + */ +@RunWith(Parameterized.class) +public class LexerFilesTest extends LexerTestCase { + private static final String DIRECTORY_NAME = "ParsingTest"; + + private final String filePath; + + public LexerFilesTest(@NotNull String filePath) { + this.filePath = filePath; + } + + /** + * Collects all the files to run this test with. + * + * @return Iterable of files src/test/testData/ParsingTest/*.nix. + */ + @Parameterized.Parameters(name = "{0}") + public static Iterable filePaths() throws IOException { + var baseDir = Paths.get(IdeaTestExecutionPolicy.getHomePathWithPolicy()).resolve(DIRECTORY_NAME); + var fileStream = Files.find(baseDir, + Integer.MAX_VALUE, + (path1, attributes) -> attributes.isRegularFile() && path1.toString().endsWith(".nix")); + + try (fileStream) { + return fileStream.map(path -> baseDir.relativize(path).toString()).collect(Collectors.toList()); + } + } + + @Test + public void check() { + doFileTest("nix"); + } + + @Override + protected Lexer createLexer() { + return new NixLexer(); + } + + @Override + protected String getDirPath() { + return DIRECTORY_NAME; + } + + @Override + protected @NotNull String getTestName(boolean lowercaseFirstLetter) { + return filePath.replace(".nix", ""); + } + + @Override + protected @NotNull String getExpectedFileExtension() { + return ".lexer.txt"; + } +} diff --git a/src/test/testData/ParsingTest/Assertion.lexer.txt b/src/test/testData/ParsingTest/Assertion.lexer.txt new file mode 100644 index 00000000..4579b0a7 --- /dev/null +++ b/src/test/testData/ParsingTest/Assertion.lexer.txt @@ -0,0 +1,6 @@ +⁠assert ('assert') +WHITE_SPACE (' ') +ID ('e1') +; (';') +WHITE_SPACE (' ') +ID ('e2') diff --git a/src/test/testData/ParsingTest/Boolean.lexer.txt b/src/test/testData/ParsingTest/Boolean.lexer.txt new file mode 100644 index 00000000..2aea9cc8 --- /dev/null +++ b/src/test/testData/ParsingTest/Boolean.lexer.txt @@ -0,0 +1,7 @@ +[ ('[') +WHITE_SPACE ('\n') +ID ('true') +WHITE_SPACE ('\n') +ID ('false') +WHITE_SPACE ('\n') +] (']') diff --git a/src/test/testData/ParsingTest/Function.lexer.txt b/src/test/testData/ParsingTest/Function.lexer.txt new file mode 100644 index 00000000..f9fb3891 --- /dev/null +++ b/src/test/testData/ParsingTest/Function.lexer.txt @@ -0,0 +1,109 @@ +[ ('[') +WHITE_SPACE ('\n') +( ('(') +ID ('x') +: (':') +WHITE_SPACE (' ') +ID ('x') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('x') +: (':') +WHITE_SPACE (' ') +ID ('y') +: (':') +WHITE_SPACE (' ') +ID ('x') +WHITE_SPACE (' ') ++ ('+') +WHITE_SPACE (' ') +ID ('y') +) (')') +WHITE_SPACE ('\n') +( ('(') +{ ('{') +WHITE_SPACE (' ') +ID ('x') +, (',') +WHITE_SPACE (' ') +ID ('y') +WHITE_SPACE (' ') +} ('}') +: (':') +WHITE_SPACE (' ') +ID ('x') +WHITE_SPACE (' ') ++ ('+') +WHITE_SPACE (' ') +ID ('y') +) (')') +WHITE_SPACE ('\n') +( ('(') +{ ('{') +WHITE_SPACE (' ') +ID ('x') +, (',') +WHITE_SPACE (' ') +ID ('y') +, (',') +WHITE_SPACE (' ') +... ('...') +WHITE_SPACE (' ') +} ('}') +: (':') +WHITE_SPACE (' ') +ID ('x') +WHITE_SPACE (' ') ++ ('+') +WHITE_SPACE (' ') +ID ('y') +) (')') +WHITE_SPACE ('\n') +( ('(') +{ ('{') +WHITE_SPACE (' ') +ID ('x') +WHITE_SPACE (' ') +? ('?') +WHITE_SPACE (' ') +STRING_OPEN ('"') +STR ('default') +STRING_CLOSE ('"') +WHITE_SPACE (' ') +} ('}') +WHITE_SPACE (' ') +: (':') +WHITE_SPACE (' ') +ID ('x') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('args') +@ ('@') +{ ('{') +WHITE_SPACE (' ') +... ('...') +WHITE_SPACE (' ') +} ('}') +: (':') +WHITE_SPACE (' ') +ID ('args') +) (')') +WHITE_SPACE ('\n') +( ('(') +{ ('{') +WHITE_SPACE (' ') +... ('...') +WHITE_SPACE (' ') +} ('}') +WHITE_SPACE (' ') +@ ('@') +WHITE_SPACE (' ') +ID ('args') +: (':') +WHITE_SPACE (' ') +ID ('args') +) (')') +WHITE_SPACE ('\n') +] (']') diff --git a/src/test/testData/ParsingTest/FunctionEmptySet.lexer.txt b/src/test/testData/ParsingTest/FunctionEmptySet.lexer.txt new file mode 100644 index 00000000..f7349190 --- /dev/null +++ b/src/test/testData/ParsingTest/FunctionEmptySet.lexer.txt @@ -0,0 +1,6 @@ +{ ('{') +WHITE_SPACE (' ') +} ('}') +: (':') +WHITE_SPACE (' ') +ID ('null') diff --git a/src/test/testData/ParsingTest/FunctionTrailingComma.lexer.txt b/src/test/testData/ParsingTest/FunctionTrailingComma.lexer.txt new file mode 100644 index 00000000..f5d501ed --- /dev/null +++ b/src/test/testData/ParsingTest/FunctionTrailingComma.lexer.txt @@ -0,0 +1,46 @@ +[ ('[') +WHITE_SPACE ('\n') +( ('(') +{ ('{') +WHITE_SPACE (' ') +ID ('x') +, (',') +WHITE_SPACE (' ') +} ('}') +: (':') +WHITE_SPACE (' ') +ID ('null') +) (')') +WHITE_SPACE ('\n') +( ('(') +{ ('{') +WHITE_SPACE (' ') +ID ('x') +, (',') +WHITE_SPACE (' ') +ID ('y') +, (',') +WHITE_SPACE (' ') +} ('}') +: (':') +WHITE_SPACE (' ') +ID ('null') +) (')') +WHITE_SPACE ('\n') +( ('(') +{ ('{') +WHITE_SPACE (' ') +ID ('x') +WHITE_SPACE (' ') +? ('?') +WHITE_SPACE (' ') +ID ('null') +, (',') +WHITE_SPACE (' ') +} ('}') +: (':') +WHITE_SPACE (' ') +ID ('null') +) (')') +WHITE_SPACE ('\n') +] (']') diff --git a/src/test/testData/ParsingTest/Identifier.lexer.txt b/src/test/testData/ParsingTest/Identifier.lexer.txt new file mode 100644 index 00000000..c1a84335 --- /dev/null +++ b/src/test/testData/ParsingTest/Identifier.lexer.txt @@ -0,0 +1,9 @@ +[ ('[') +WHITE_SPACE ('\n') +ID ('_') +WHITE_SPACE ('\n') +ID ('A') +WHITE_SPACE ('\n') +ID ('a-0'') +WHITE_SPACE ('\n') +] (']') diff --git a/src/test/testData/ParsingTest/If.lexer.txt b/src/test/testData/ParsingTest/If.lexer.txt new file mode 100644 index 00000000..90c9d3b6 --- /dev/null +++ b/src/test/testData/ParsingTest/If.lexer.txt @@ -0,0 +1,11 @@ +⁠if ('if') +WHITE_SPACE (' ') +ID ('e1') +WHITE_SPACE (' ') +⁠then ('then') +WHITE_SPACE (' ') +ID ('e2') +WHITE_SPACE (' ') +⁠else ('else') +WHITE_SPACE (' ') +ID ('e3') diff --git a/src/test/testData/ParsingTest/LegacyLet.lexer.txt b/src/test/testData/ParsingTest/LegacyLet.lexer.txt new file mode 100644 index 00000000..759440ca --- /dev/null +++ b/src/test/testData/ParsingTest/LegacyLet.lexer.txt @@ -0,0 +1,19 @@ +⁠let ('let') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE (' ') +ID ('x') +WHITE_SPACE (' ') += ('=') +WHITE_SPACE (' ') +INT ('1') +; (';') +WHITE_SPACE (' ') +ID ('body') +WHITE_SPACE (' ') += ('=') +WHITE_SPACE (' ') +ID ('x') +; (';') +WHITE_SPACE (' ') +} ('}') diff --git a/src/test/testData/ParsingTest/LegacyLetInList.lexer.txt b/src/test/testData/ParsingTest/LegacyLetInList.lexer.txt new file mode 100644 index 00000000..73d8d123 --- /dev/null +++ b/src/test/testData/ParsingTest/LegacyLetInList.lexer.txt @@ -0,0 +1,23 @@ +[ ('[') +WHITE_SPACE (' ') +⁠let ('let') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE (' ') +ID ('x') +WHITE_SPACE (' ') += ('=') +WHITE_SPACE (' ') +INT ('1') +; (';') +WHITE_SPACE (' ') +ID ('body') +WHITE_SPACE (' ') += ('=') +WHITE_SPACE (' ') +ID ('x') +; (';') +WHITE_SPACE (' ') +} ('}') +WHITE_SPACE (' ') +] (']') diff --git a/src/test/testData/ParsingTest/LegacyOrAsArgument.lexer.txt b/src/test/testData/ParsingTest/LegacyOrAsArgument.lexer.txt new file mode 100644 index 00000000..708a8274 --- /dev/null +++ b/src/test/testData/ParsingTest/LegacyOrAsArgument.lexer.txt @@ -0,0 +1,3 @@ +ID ('f') +WHITE_SPACE (' ') +⁠or ('or') diff --git a/src/test/testData/ParsingTest/LegacyOrAsAttribute.lexer.txt b/src/test/testData/ParsingTest/LegacyOrAsAttribute.lexer.txt new file mode 100644 index 00000000..b56d227b --- /dev/null +++ b/src/test/testData/ParsingTest/LegacyOrAsAttribute.lexer.txt @@ -0,0 +1,21 @@ +⁠let ('let') +WHITE_SPACE (' ') +⁠or ('or') +WHITE_SPACE (' ') += ('=') +WHITE_SPACE (' ') +INT ('1') +; (';') +WHITE_SPACE (' ') +⁠in ('in') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE (' ') +⁠inherit ('inherit') +WHITE_SPACE (' ') +⁠or ('or') +; (';') +WHITE_SPACE (' ') +} ('}') +. ('.') +⁠or ('or') diff --git a/src/test/testData/ParsingTest/LegacyOrInList.lexer.txt b/src/test/testData/ParsingTest/LegacyOrInList.lexer.txt new file mode 100644 index 00000000..7c9d6970 --- /dev/null +++ b/src/test/testData/ParsingTest/LegacyOrInList.lexer.txt @@ -0,0 +1,11 @@ +[ ('[') +WHITE_SPACE (' ') +ID ('before') +WHITE_SPACE (' ') +ID ('f') +WHITE_SPACE (' ') +⁠or ('or') +WHITE_SPACE (' ') +ID ('after') +WHITE_SPACE (' ') +] (']') diff --git a/src/test/testData/ParsingTest/Let.lexer.txt b/src/test/testData/ParsingTest/Let.lexer.txt new file mode 100644 index 00000000..03147c2a --- /dev/null +++ b/src/test/testData/ParsingTest/Let.lexer.txt @@ -0,0 +1,25 @@ +⁠let ('let') +WHITE_SPACE ('\n ') +ID ('x') +WHITE_SPACE (' ') += ('=') +WHITE_SPACE (' ') +STRING_OPEN ('"') +STR ('foo') +STRING_CLOSE ('"') +; (';') +WHITE_SPACE ('\n ') +ID ('a') +. ('.') +ID ('b') +WHITE_SPACE (' ') += ('=') +WHITE_SPACE (' ') +STRING_OPEN ('"') +STR ('bar') +STRING_CLOSE ('"') +; (';') +WHITE_SPACE ('\n') +⁠in ('in') +WHITE_SPACE (' ') +ID ('x') diff --git a/src/test/testData/ParsingTest/LetEmpty.lexer.txt b/src/test/testData/ParsingTest/LetEmpty.lexer.txt new file mode 100644 index 00000000..cc0638ea --- /dev/null +++ b/src/test/testData/ParsingTest/LetEmpty.lexer.txt @@ -0,0 +1,5 @@ +⁠let ('let') +WHITE_SPACE (' ') +⁠in ('in') +WHITE_SPACE (' ') +ID ('x') diff --git a/src/test/testData/ParsingTest/List.lexer.txt b/src/test/testData/ParsingTest/List.lexer.txt new file mode 100644 index 00000000..15071197 --- /dev/null +++ b/src/test/testData/ParsingTest/List.lexer.txt @@ -0,0 +1,24 @@ +[ ('[') +WHITE_SPACE (' ') +INT ('123') +WHITE_SPACE (' ') +PATH ('./foo.nix') +WHITE_SPACE (' ') +STRING_OPEN ('"') +STR ('abc') +STRING_CLOSE ('"') +WHITE_SPACE (' ') +ID ('f') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE (' ') +ID ('x') +WHITE_SPACE (' ') += ('=') +WHITE_SPACE (' ') +ID ('y') +; (';') +WHITE_SPACE (' ') +} ('}') +WHITE_SPACE (' ') +] (']') diff --git a/src/test/testData/ParsingTest/ListWithFunction.lexer.txt b/src/test/testData/ParsingTest/ListWithFunction.lexer.txt new file mode 100644 index 00000000..740eae95 --- /dev/null +++ b/src/test/testData/ParsingTest/ListWithFunction.lexer.txt @@ -0,0 +1,26 @@ +[ ('[') +WHITE_SPACE (' ') +INT ('123') +WHITE_SPACE (' ') +PATH ('./foo.nix') +WHITE_SPACE (' ') +STRING_OPEN ('"') +STR ('abc') +STRING_CLOSE ('"') +WHITE_SPACE (' ') +( ('(') +ID ('f') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE (' ') +ID ('x') +WHITE_SPACE (' ') += ('=') +WHITE_SPACE (' ') +ID ('y') +; (';') +WHITE_SPACE (' ') +} ('}') +) (')') +WHITE_SPACE (' ') +] (']') diff --git a/src/test/testData/ParsingTest/Null.lexer.txt b/src/test/testData/ParsingTest/Null.lexer.txt new file mode 100644 index 00000000..58a421fd --- /dev/null +++ b/src/test/testData/ParsingTest/Null.lexer.txt @@ -0,0 +1 @@ +ID ('null') diff --git a/src/test/testData/ParsingTest/Number.lexer.txt b/src/test/testData/ParsingTest/Number.lexer.txt new file mode 100644 index 00000000..67aa47a4 --- /dev/null +++ b/src/test/testData/ParsingTest/Number.lexer.txt @@ -0,0 +1,9 @@ +[ ('[') +WHITE_SPACE ('\n') +INT ('123') +WHITE_SPACE ('\n') +FLOAT ('123.43') +WHITE_SPACE ('\n') +FLOAT ('.27e13') +WHITE_SPACE ('\n') +] (']') diff --git a/src/test/testData/ParsingTest/Operators.lexer.txt b/src/test/testData/ParsingTest/Operators.lexer.txt new file mode 100644 index 00000000..d1cf78cf --- /dev/null +++ b/src/test/testData/ParsingTest/Operators.lexer.txt @@ -0,0 +1,288 @@ +[ ('[') +WHITE_SPACE ('\n') +( ('(') +ID ('e') +. ('.') +ID ('attrpath') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('e') +. ('.') +ID ('attrpath') +WHITE_SPACE (' ') +⁠or ('or') +WHITE_SPACE (' ') +ID ('def') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('e1') +. ('.') +ID ('attrpath') +WHITE_SPACE (' ') +ID ('e2') +. ('.') +ID ('attrpath') +) (')') +WHITE_SPACE ('\n') +( ('(') +- ('-') +ID ('e1') +WHITE_SPACE (' ') +ID ('e2') +) (')') +WHITE_SPACE ('\n') +( ('(') +- ('-') +ID ('e') +WHITE_SPACE (' ') +? ('?') +WHITE_SPACE (' ') +ID ('attrpath') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('e1') +WHITE_SPACE (' ') +? ('?') +WHITE_SPACE (' ') +ID ('attrpath') +WHITE_SPACE (' ') +++ ('++') +WHITE_SPACE (' ') +ID ('e2') +WHITE_SPACE (' ') +? ('?') +WHITE_SPACE (' ') +ID ('attrpath') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('e11') +WHITE_SPACE (' ') +++ ('++') +WHITE_SPACE (' ') +ID ('e12') +WHITE_SPACE (' ') +* ('*') +WHITE_SPACE (' ') +ID ('e21') +WHITE_SPACE (' ') +++ ('++') +WHITE_SPACE (' ') +ID ('e22') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('e11') +WHITE_SPACE (' ') +++ ('++') +WHITE_SPACE (' ') +ID ('e12') +WHITE_SPACE (' ') +/ ('/') +WHITE_SPACE (' ') +ID ('e21') +WHITE_SPACE (' ') +++ ('++') +WHITE_SPACE (' ') +ID ('e22') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('e11') +WHITE_SPACE (' ') +* ('*') +WHITE_SPACE (' ') +ID ('e12') +WHITE_SPACE (' ') ++ ('+') +WHITE_SPACE (' ') +ID ('e21') +WHITE_SPACE (' ') +/ ('/') +WHITE_SPACE (' ') +ID ('e22') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('e11') +WHITE_SPACE (' ') +/ ('/') +WHITE_SPACE (' ') +ID ('e12') +WHITE_SPACE (' ') +- ('-') +WHITE_SPACE (' ') +ID ('e21') +WHITE_SPACE (' ') +* ('*') +WHITE_SPACE (' ') +ID ('e22') +) (')') +WHITE_SPACE ('\n') +( ('(') +! ('!') +ID ('e1') +WHITE_SPACE (' ') ++ ('+') +WHITE_SPACE (' ') +ID ('e2') +) (')') +WHITE_SPACE ('\n') +( ('(') +! ('!') +ID ('e1') +WHITE_SPACE (' ') +// ('//') +WHITE_SPACE (' ') +! ('!') +ID ('e2') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('e11') +WHITE_SPACE (' ') +// ('//') +WHITE_SPACE (' ') +ID ('e12') +WHITE_SPACE (' ') +< ('<') +WHITE_SPACE (' ') +ID ('e21') +WHITE_SPACE (' ') +// ('//') +WHITE_SPACE (' ') +ID ('e22') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('e11') +WHITE_SPACE (' ') +// ('//') +WHITE_SPACE (' ') +ID ('e12') +WHITE_SPACE (' ') +<= ('<=') +WHITE_SPACE (' ') +ID ('e21') +WHITE_SPACE (' ') +// ('//') +WHITE_SPACE (' ') +ID ('e22') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('e11') +WHITE_SPACE (' ') +// ('//') +WHITE_SPACE (' ') +ID ('e12') +WHITE_SPACE (' ') +> ('>') +WHITE_SPACE (' ') +ID ('e21') +WHITE_SPACE (' ') +// ('//') +WHITE_SPACE (' ') +ID ('e22') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('e11') +WHITE_SPACE (' ') +// ('//') +WHITE_SPACE (' ') +ID ('e12') +WHITE_SPACE (' ') +>= ('>=') +WHITE_SPACE (' ') +ID ('e21') +WHITE_SPACE (' ') +// ('//') +WHITE_SPACE (' ') +ID ('e22') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('e11') +WHITE_SPACE (' ') +< ('<') +WHITE_SPACE (' ') +ID ('e12') +WHITE_SPACE (' ') +== ('==') +WHITE_SPACE (' ') +ID ('e21') +WHITE_SPACE (' ') +<= ('<=') +WHITE_SPACE (' ') +ID ('e22') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('e11') +WHITE_SPACE (' ') +> ('>') +WHITE_SPACE (' ') +ID ('e12') +WHITE_SPACE (' ') +!= ('!=') +WHITE_SPACE (' ') +ID ('e21') +WHITE_SPACE (' ') +>= ('>=') +WHITE_SPACE (' ') +ID ('e22') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('e11') +WHITE_SPACE (' ') +== ('==') +WHITE_SPACE (' ') +ID ('e12') +WHITE_SPACE (' ') +&& ('&&') +WHITE_SPACE (' ') +ID ('e21') +WHITE_SPACE (' ') +!= ('!=') +WHITE_SPACE (' ') +ID ('e22') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('e11') +WHITE_SPACE (' ') +&& ('&&') +WHITE_SPACE (' ') +ID ('e12') +WHITE_SPACE (' ') +|| ('||') +WHITE_SPACE (' ') +ID ('e21') +WHITE_SPACE (' ') +&& ('&&') +WHITE_SPACE (' ') +ID ('e22') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('e11') +WHITE_SPACE (' ') +|| ('||') +WHITE_SPACE (' ') +ID ('e12') +WHITE_SPACE (' ') +-> ('->') +WHITE_SPACE (' ') +ID ('e21') +WHITE_SPACE (' ') +|| ('||') +WHITE_SPACE (' ') +ID ('e22') +) (')') +WHITE_SPACE ('\n') +] (']') diff --git a/src/test/testData/ParsingTest/OperatorsAssociativity.lexer.txt b/src/test/testData/ParsingTest/OperatorsAssociativity.lexer.txt new file mode 100644 index 00000000..d7df2f68 --- /dev/null +++ b/src/test/testData/ParsingTest/OperatorsAssociativity.lexer.txt @@ -0,0 +1,91 @@ +[ ('[') +WHITE_SPACE ('\n') +( ('(') +ID ('a') +WHITE_SPACE (' ') +ID ('b') +WHITE_SPACE (' ') +ID ('c') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('a') +WHITE_SPACE (' ') +++ ('++') +WHITE_SPACE (' ') +ID ('b') +WHITE_SPACE (' ') +++ ('++') +WHITE_SPACE (' ') +ID ('c') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('a') +WHITE_SPACE (' ') +* ('*') +WHITE_SPACE (' ') +ID ('b') +WHITE_SPACE (' ') +/ ('/') +WHITE_SPACE (' ') +ID ('c') +WHITE_SPACE (' ') +* ('*') +WHITE_SPACE (' ') +ID ('d') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('a') +WHITE_SPACE (' ') ++ ('+') +WHITE_SPACE (' ') +ID ('b') +WHITE_SPACE (' ') +- ('-') +WHITE_SPACE (' ') +ID ('c') +WHITE_SPACE (' ') ++ ('+') +WHITE_SPACE (' ') +ID ('d') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('a') +WHITE_SPACE (' ') +// ('//') +WHITE_SPACE (' ') +ID ('b') +WHITE_SPACE (' ') +// ('//') +WHITE_SPACE (' ') +ID ('c') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('a') +WHITE_SPACE (' ') +&& ('&&') +WHITE_SPACE (' ') +ID ('b') +WHITE_SPACE (' ') +&& ('&&') +WHITE_SPACE (' ') +ID ('c') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('a') +WHITE_SPACE (' ') +|| ('||') +WHITE_SPACE (' ') +ID ('b') +WHITE_SPACE (' ') +|| ('||') +WHITE_SPACE (' ') +ID ('c') +) (')') +WHITE_SPACE ('\n') +] (']') diff --git a/src/test/testData/ParsingTest/Path.lexer.txt b/src/test/testData/ParsingTest/Path.lexer.txt new file mode 100644 index 00000000..dd22b198 --- /dev/null +++ b/src/test/testData/ParsingTest/Path.lexer.txt @@ -0,0 +1,11 @@ +[ ('[') +WHITE_SPACE ('\n') +PATH ('/bin/sh') +WHITE_SPACE ('\n') +PATH ('./builder.sh') +WHITE_SPACE ('\n') +HPATH ('~/foo') +WHITE_SPACE ('\n') +SPATH ('') +WHITE_SPACE ('\n') +] (']') diff --git a/src/test/testData/ParsingTest/RecursiveSet.lexer.txt b/src/test/testData/ParsingTest/RecursiveSet.lexer.txt new file mode 100644 index 00000000..9d61dec5 --- /dev/null +++ b/src/test/testData/ParsingTest/RecursiveSet.lexer.txt @@ -0,0 +1,19 @@ +⁠rec ('rec') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +ID ('x') +WHITE_SPACE (' ') += ('=') +WHITE_SPACE (' ') +ID ('y') +; (';') +WHITE_SPACE ('\n ') +ID ('y') +WHITE_SPACE (' ') += ('=') +WHITE_SPACE (' ') +INT ('123') +; (';') +WHITE_SPACE ('\n') +} ('}') diff --git a/src/test/testData/ParsingTest/Set.lexer.txt b/src/test/testData/ParsingTest/Set.lexer.txt new file mode 100644 index 00000000..765942b4 --- /dev/null +++ b/src/test/testData/ParsingTest/Set.lexer.txt @@ -0,0 +1,65 @@ +{ ('{') +WHITE_SPACE ('\n ') +ID ('x') +WHITE_SPACE (' ') += ('=') +WHITE_SPACE (' ') +INT ('123') +; (';') +WHITE_SPACE ('\n ') +ID ('a') +. ('.') +ID ('b') +WHITE_SPACE (' ') += ('=') +WHITE_SPACE (' ') +INT ('123') +; (';') +WHITE_SPACE ('\n ') +STRING_OPEN ('"') +STR ('< y >') +STRING_CLOSE ('"') +WHITE_SPACE (' ') += ('=') +WHITE_SPACE (' ') +STRING_OPEN ('"') +STR ('Hello') +STRING_CLOSE ('"') +; (';') +WHITE_SPACE ('\n ') +$ ('$') +{ ('{') +ID ('key') +} ('}') +WHITE_SPACE (' ') += ('=') +WHITE_SPACE (' ') +PATH ('./.') +; (';') +WHITE_SPACE ('\n ') +⁠inherit ('inherit') +WHITE_SPACE (' ') +ID ('a') +; (';') +WHITE_SPACE ('\n ') +⁠inherit ('inherit') +WHITE_SPACE (' ') +ID ('b') +WHITE_SPACE (' ') +ID ('c') +; (';') +WHITE_SPACE ('\n ') +⁠inherit ('inherit') +WHITE_SPACE (' ') +( ('(') +ID ('src-set') +) (')') +WHITE_SPACE (' ') +ID ('d') +WHITE_SPACE (' ') +ID ('e') +WHITE_SPACE (' ') +ID ('f') +; (';') +WHITE_SPACE ('\n') +} ('}') diff --git a/src/test/testData/ParsingTest/SetAccess.lexer.txt b/src/test/testData/ParsingTest/SetAccess.lexer.txt new file mode 100644 index 00000000..4017079e --- /dev/null +++ b/src/test/testData/ParsingTest/SetAccess.lexer.txt @@ -0,0 +1,38 @@ +[ ('[') +WHITE_SPACE ('\n') +( ('(') +ID ('s') +. ('.') +ID ('x') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('s') +. ('.') +ID ('x') +WHITE_SPACE (' ') +⁠or ('or') +WHITE_SPACE (' ') +STRING_OPEN ('"') +STR ('default') +STRING_CLOSE ('"') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('s') +. ('.') +STRING_OPEN ('"') +STR ('< y >') +STRING_CLOSE ('"') +) (')') +WHITE_SPACE ('\n') +( ('(') +ID ('s') +. ('.') +$ ('$') +{ ('{') +ID ('key') +} ('}') +) (')') +WHITE_SPACE ('\n') +] (']') diff --git a/src/test/testData/ParsingTest/String.lexer.txt b/src/test/testData/ParsingTest/String.lexer.txt new file mode 100644 index 00000000..10b6ecd9 --- /dev/null +++ b/src/test/testData/ParsingTest/String.lexer.txt @@ -0,0 +1,11 @@ +[ ('[') +WHITE_SPACE ('\n') +STRING_OPEN ('"') +STR ('expected') +STRING_CLOSE ('"') +WHITE_SPACE ('\n') +IND_STRING_OPEN ('''') +IND_STR ('expected') +IND_STRING_CLOSE ('''') +WHITE_SPACE ('\n') +] (']') diff --git a/src/test/testData/ParsingTest/StringWithAntiquotation.lexer.txt b/src/test/testData/ParsingTest/StringWithAntiquotation.lexer.txt new file mode 100644 index 00000000..fd61b062 --- /dev/null +++ b/src/test/testData/ParsingTest/StringWithAntiquotation.lexer.txt @@ -0,0 +1,25 @@ +[ ('[') +WHITE_SPACE ('\n') +STRING_OPEN ('"') +STR ('a') +$ ('$') +{ ('{') +STRING_OPEN ('"') +STR ('b') +STRING_CLOSE ('"') +} ('}') +STR ('c') +STRING_CLOSE ('"') +WHITE_SPACE ('\n') +IND_STRING_OPEN ('''') +IND_STR ('a') +$ ('$') +{ ('{') +IND_STRING_OPEN ('''') +IND_STR ('b') +IND_STRING_CLOSE ('''') +} ('}') +IND_STR ('c') +IND_STRING_CLOSE ('''') +WHITE_SPACE ('\n') +] (']') diff --git a/src/test/testData/ParsingTest/StringWithEscapeSequences.lexer.txt b/src/test/testData/ParsingTest/StringWithEscapeSequences.lexer.txt new file mode 100644 index 00000000..f27a9591 --- /dev/null +++ b/src/test/testData/ParsingTest/StringWithEscapeSequences.lexer.txt @@ -0,0 +1,59 @@ +[ ('[') +WHITE_SPACE ('\n') +IND_STRING_OPEN ('''') +IND_STR_ESCAPE (''''') +IND_STRING_CLOSE ('''') +WHITE_SPACE ('\n') +STRING_OPEN ('"') +STR ('a') +STR_ESCAPE ('\$') +STR ('{b}c') +STRING_CLOSE ('"') +WHITE_SPACE ('\n') +IND_STRING_OPEN ('''') +IND_STR ('a') +IND_STR_ESCAPE ('''$') +IND_STR ('{b}c') +IND_STRING_CLOSE ('''') +WHITE_SPACE ('\n') +STRING_OPEN ('"') +STR ('a') +STR_ESCAPE ('\n') +STR_ESCAPE ('\r') +STR_ESCAPE ('\t') +STR ('c') +STRING_CLOSE ('"') +WHITE_SPACE ('\n') +IND_STRING_OPEN ('''') +IND_STR ('a') +IND_STR_ESCAPE ('''\n') +IND_STR_ESCAPE ('''\r') +IND_STR_ESCAPE ('''\t') +IND_STR ('c') +IND_STRING_CLOSE ('''') +WHITE_SPACE ('\n') +STRING_OPEN ('"') +STR ('a') +STR_ESCAPE ('\b') +STR ('c') +STRING_CLOSE ('"') +WHITE_SPACE ('\n') +IND_STRING_OPEN ('''') +IND_STR ('a') +IND_STR_ESCAPE ('''\b') +IND_STR ('c') +IND_STRING_CLOSE ('''') +WHITE_SPACE ('\n') +STRING_OPEN ('"') +STR ('a') +STR ('$$') +STR ('{b}c') +STRING_CLOSE ('"') +WHITE_SPACE ('\n') +IND_STRING_OPEN ('''') +IND_STR ('a') +IND_STR ('$$') +IND_STR ('{b}c') +IND_STRING_CLOSE ('''') +WHITE_SPACE ('\n') +] (']') diff --git a/src/test/testData/ParsingTest/StringWithMultipleLines.lexer.txt b/src/test/testData/ParsingTest/StringWithMultipleLines.lexer.txt new file mode 100644 index 00000000..010624ea --- /dev/null +++ b/src/test/testData/ParsingTest/StringWithMultipleLines.lexer.txt @@ -0,0 +1,11 @@ +[ ('[') +WHITE_SPACE ('\n') +STRING_OPEN ('"') +STR ('\n first\n second\n third\n') +STRING_CLOSE ('"') +WHITE_SPACE ('\n') +IND_STRING_OPEN ('''') +IND_STR ('\n first\n second\n third\n') +IND_STRING_CLOSE ('''') +WHITE_SPACE ('\n') +] (']') diff --git a/src/test/testData/ParsingTest/Uri.lexer.txt b/src/test/testData/ParsingTest/Uri.lexer.txt new file mode 100644 index 00000000..16f98169 --- /dev/null +++ b/src/test/testData/ParsingTest/Uri.lexer.txt @@ -0,0 +1 @@ +URI ('http://example.org/foo.tar.bz2') diff --git a/src/test/testData/ParsingTest/With.lexer.txt b/src/test/testData/ParsingTest/With.lexer.txt new file mode 100644 index 00000000..4bdf1db1 --- /dev/null +++ b/src/test/testData/ParsingTest/With.lexer.txt @@ -0,0 +1,6 @@ +⁠with ('with') +WHITE_SPACE (' ') +ID ('e1') +; (';') +WHITE_SPACE (' ') +ID ('e2')