diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/cases.txt | 397 | ||||
| -rw-r--r-- | test/test.js | 17 |
2 files changed, 414 insertions, 0 deletions
diff --git a/test/cases.txt b/test/cases.txt new file mode 100644 index 0000000..c3bf5ad --- /dev/null +++ b/test/cases.txt @@ -0,0 +1,397 @@ +# Hello World + +YOU WON'T WANT TO MISS 'Hello, World!' + +PLEASE LIKE AND SUBSCRIBE + +==> + +Program( + ExprStatement(PrintStatement(StringLiteral)), + ProgramEnd +) + +# Number literals + +123 +45.67 + +PLEASE LIKE AND SUBSCRIBE + +==> + +Program( + ExprStatement(NumberLiteral), + ExprStatement(NumberLiteral), + ProgramEnd +) + +# String literals + +"hello" +'world' +"escaped \"quote\"" + +PLEASE LIKE AND SUBSCRIBE + +==> + +Program( + ExprStatement(StringLiteral), + ExprStatement(StringLiteral), + ExprStatement(StringLiteral), + ProgramEnd +) + +# Booleans + +TOTALLY RIGHT +COMPLETELY WRONG + +PLEASE LIKE AND SUBSCRIBE + +==> + +Program( + ExprStatement(BooleanLiteral), + ExprStatement(BooleanLiteral), + ProgramEnd +) + +# Identifiers + +FOO +BAR-BAZ +TEST_123 +FOO'S + +PLEASE LIKE AND SUBSCRIBE + +==> + +Program( + ExprStatement(Identifier), + ExprStatement(Identifier), + ExprStatement(Identifier), + ExprStatement(Identifier), + ProgramEnd +) + +# Assignment + +EXPERTS CLAIM X TO BE 42 +EXPERTS CLAIM NAME TO BE "John" + +PLEASE LIKE AND SUBSCRIBE + +==> + +Program( + Assignment(Identifier, NumberLiteral), + Assignment(Identifier, StringLiteral), + ProgramEnd +) + +# Binary operations - arithmetic + +EXPERTS CLAIM SUM TO BE 1 PLUS 2 +EXPERTS CLAIM DIFF TO BE 10 MINUS 5 +EXPERTS CLAIM PRODUCT TO BE 3 TIMES 4 +EXPERTS CLAIM QUOTIENT TO BE 20 DIVIDED BY 5 +EXPERTS CLAIM REMAINDER TO BE 10 MODULO 3 + +PLEASE LIKE AND SUBSCRIBE + +==> + +Program( + Assignment(Identifier, BinaryExpression(NumberLiteral, NumberLiteral)), + Assignment(Identifier, BinaryExpression(NumberLiteral, NumberLiteral)), + Assignment(Identifier, BinaryExpression(NumberLiteral, NumberLiteral)), + Assignment(Identifier, BinaryExpression(NumberLiteral, NumberLiteral)), + Assignment(Identifier, BinaryExpression(NumberLiteral, NumberLiteral)), + ProgramEnd +) + +# Binary operations - comparison + +EXPERTS CLAIM EQ TO BE 1 IS ACTUALLY 1 +EXPERTS CLAIM GT TO BE 5 BEATS 3 +EXPERTS CLAIM LT TO BE 2 SMALLER THAN 10 + +PLEASE LIKE AND SUBSCRIBE + +==> + +Program( + Assignment(Identifier, BinaryExpression(NumberLiteral, NumberLiteral)), + Assignment(Identifier, BinaryExpression(NumberLiteral, NumberLiteral)), + Assignment(Identifier, BinaryExpression(NumberLiteral, NumberLiteral)), + ProgramEnd +) + +# Binary operations - logical + +EXPERTS CLAIM BOTH TO BE TOTALLY RIGHT AND TOTALLY RIGHT +EXPERTS CLAIM EITHER TO BE TOTALLY RIGHT OR COMPLETELY WRONG + +PLEASE LIKE AND SUBSCRIBE + +==> + +Program( + Assignment(Identifier, BinaryExpression(BooleanLiteral, BooleanLiteral)), + Assignment(Identifier, BinaryExpression(BooleanLiteral, BooleanLiteral)), + ProgramEnd +) + +# Function declaration without arguments + +DISCOVER HOW TO GREET + YOU WON'T WANT TO MISS "Hello!" + +PLEASE LIKE AND SUBSCRIBE + +==> + +Program( + FunctionDecl( + Identifier, + ExprStatement(PrintStatement(StringLiteral)) + ), + ProgramEnd +) + +# Function declaration with arguments + +DISCOVER HOW TO ADD WITH A, B + SHOCKING DEVELOPMENT A PLUS B + +PLEASE LIKE AND SUBSCRIBE + +==> + +Program( + FunctionDecl( + Identifier, + ArgumentList(Identifier, Identifier), + ReturnStatement(BinaryExpression(Identifier, Identifier)) + ), + ProgramEnd +) + +# Function call + +EXPERTS CLAIM RESULT TO BE ADD OF 1, 2 + +PLEASE LIKE AND SUBSCRIBE + +==> + +Program( + Assignment( + Identifier, + FunctionCall(Identifier, ArgumentExpression(NumberLiteral), ArgumentExpression(NumberLiteral)) + ), + ProgramEnd +) + +# Block with RUMOR HAS IT + +RUMOR HAS IT + EXPERTS CLAIM X TO BE 1 + EXPERTS CLAIM Y TO BE 2 + YOU WON'T WANT TO MISS X PLUS Y +END OF STORY + +PLEASE LIKE AND SUBSCRIBE + +==> + +Program( + Block( + Assignment(Identifier, NumberLiteral), + Assignment(Identifier, NumberLiteral), + ExprStatement(PrintStatement(BinaryExpression(Identifier, Identifier))) + ), + ProgramEnd +) + +# If statement without else + +WHAT IF X BEATS 0 + YOU WON'T WANT TO MISS "positive" + +PLEASE LIKE AND SUBSCRIBE + +==> + +Program( + IfStatement( + BinaryExpression(Identifier, NumberLiteral), + ExprStatement(PrintStatement(StringLiteral)) + ), + ProgramEnd +) + +# If statement with else + +WHAT IF X IS ACTUALLY 0 + YOU WON'T WANT TO MISS "zero" +LIES! + YOU WON'T WANT TO MISS "not zero" + +PLEASE LIKE AND SUBSCRIBE + +==> + +Program( + IfStatement( + BinaryExpression(Identifier, NumberLiteral), + ExprStatement(PrintStatement(StringLiteral)), + ExprStatement(PrintStatement(StringLiteral)) + ), + ProgramEnd +) + +# Input statement + +EXPERTS CLAIM NAME TO BE LATEST NEWS ON "Enter your name" + +PLEASE LIKE AND SUBSCRIBE + +==> + +Program( + Assignment( + Identifier, + InputStatement(StringLiteral) + ), + ProgramEnd +) + +# Factorial function + +DISCOVER HOW TO FACTORIAL WITH N +RUMOR HAS IT + WHAT IF N IS ACTUALLY 0 + SHOCKING DEVELOPMENT 1 + LIES! + SHOCKING DEVELOPMENT + N TIMES FACTORIAL OF N MINUS 1 +END OF STORY + +EXPERTS CLAIM RESULT TO BE FACTORIAL OF 10 +YOU WON'T WANT TO MISS 'Result is' +YOU WON'T WANT TO MISS RESULT + +PLEASE LIKE AND SUBSCRIBE + +==> + +Program( + FunctionDecl( + Identifier, + ArgumentList(Identifier), + Block( + IfStatement( + BinaryExpression(Identifier, NumberLiteral), + ReturnStatement(NumberLiteral), + ReturnStatement( + BinaryExpression( + Identifier, + FunctionCall( + Identifier, + ArgumentExpression(BinaryExpression(Identifier, NumberLiteral)) + ) + ) + ) + ) + ) + ), + Assignment(Identifier, FunctionCall(Identifier, ArgumentExpression(NumberLiteral))), + ExprStatement(PrintStatement(StringLiteral)), + ExprStatement(PrintStatement(Identifier)), + ProgramEnd +) + +# Fibonacci function + +DISCOVER HOW TO FIBONACCI WITH A, B, N +RUMOR HAS IT + WHAT IF N SMALLER THAN 1 + SHOCKING DEVELOPMENT B + LIES! RUMOR HAS IT + YOU WON'T WANT TO MISS B + SHOCKING DEVELOPMENT + FIBONACCI OF B, A PLUS B, N MINUS 1 + END OF STORY +END OF STORY + +EXPERTS CLAIM LIMIT TO BE 10 +YOU WON'T WANT TO MISS 'First 10 Fibonacci numbers' +EXPERTS CLAIM NOTHING TO BE FIBONACCI OF 0, 1, LIMIT + +PLEASE LIKE AND SUBSCRIBE + +==> + +Program( + FunctionDecl( + Identifier, + ArgumentList(Identifier, Identifier, Identifier), + Block( + IfStatement( + BinaryExpression(Identifier, NumberLiteral), + ReturnStatement(Identifier), + Block( + ExprStatement(PrintStatement(Identifier)), + ReturnStatement( + FunctionCall( + Identifier, + ArgumentExpression(Identifier), + ArgumentExpression(BinaryExpression(Identifier, Identifier)), + ArgumentExpression(BinaryExpression(Identifier, NumberLiteral)) + ) + ) + ) + ) + ) + ), + Assignment(Identifier, NumberLiteral), + ExprStatement(PrintStatement(StringLiteral)), + Assignment( + Identifier, + FunctionCall( + Identifier, + ArgumentExpression(NumberLiteral), + ArgumentExpression(NumberLiteral), + ArgumentExpression(Identifier) + ) + ), + ProgramEnd +) + +# Parenthesized expression + +EXPERTS CLAIM X TO BE (RUMOR HAS IT + EXPERTS CLAIM A TO BE 1 + SHOCKING DEVELOPMENT A PLUS 2 +END OF STORY) + +PLEASE LIKE AND SUBSCRIBE + +==> + +Program( + Assignment( + Identifier, + ParenBlock( + Block( + Assignment(Identifier, NumberLiteral), + ReturnStatement(BinaryExpression(Identifier, NumberLiteral)) + ) + ) + ), + ProgramEnd +) diff --git a/test/test.js b/test/test.js new file mode 100644 index 0000000..34cbdf0 --- /dev/null +++ b/test/test.js @@ -0,0 +1,17 @@ +import {tabloidLanguage} from "../dist/index.js" +import {fileTests} from "@lezer/generator/dist/test" + +import * as fs from "fs" +import * as path from "path" +import { fileURLToPath } from 'url'; +let caseDir = path.dirname(fileURLToPath(import.meta.url)) + +for (let file of fs.readdirSync(caseDir)) { + if (!/\.txt$/.test(file)) continue + + let name = /^[^\.]*/.exec(file)[0] + describe(name, () => { + for (let {name, run} of fileTests(fs.readFileSync(path.join(caseDir, file), "utf8"), file)) + it(name, () => run(tabloidLanguage.parser)) + }) +} |
