UNPKG

@adamsy/bhai-lang

Version:

<h1 align="center">Bhai Lang</h1> <p align="center"> <a href="https://lgtm.com/projects/g/DulLabs/bhai-lang/alerts/"><img alt="Total alerts" src="https://img.shields.io/lgtm/alerts/g/DulLabs/bhai-lang.svg?logo=lgtm&logoWidth=18"/></a> <a href="https://lgt

228 lines (207 loc) 5.55 kB
import Interpreter from "../../src/components/interpreter"; import InterpreterModule from "../../src/module/interpreterModule"; import { NegativeTestCases } from "./negativeTestsProvider"; import { NoOutputPositiveTests, WithOutputPositiveTests } from "./positiveTestsProvider"; let interpreter: Interpreter = InterpreterModule.getInterpreter(); console.log = jest.fn(); beforeEach(() => { jest.clearAllMocks(); }); NoOutputPositiveTests.forEach((testCase) => { test(testCase.name, () => { expect(() => interpreter.interpret(testCase.input)).not.toThrowError(); }); }); WithOutputPositiveTests.forEach((testCase) => { test(testCase.name, () => { expect(() => interpreter.interpret(testCase.input)).not.toThrowError(); expect(console.log).toHaveBeenCalledWith(testCase.output); }); }); NegativeTestCases.forEach((testCase) => { test(testCase.name, () => { expect(() => interpreter.interpret(testCase.input)).toThrowError( testCase.exception ); }); }); test("test redeclaring & printing variables in different scopes", () => { expect(() => interpreter.interpret(`hi bhai; bhai ye hai a = 4; { bhai ye hai a = 90; bol bhai a; } bol bhai a; bye bhai;`) ).not.toThrowError(); expect(console.log).toHaveBeenCalledWith("90"); expect(console.log).toHaveBeenCalledWith("4"); }); test("test assigning variable in parent scope", () => { expect(() => interpreter.interpret(`hi bhai; bhai ye hai a = 4; { a = 90; bol bhai a; } bol bhai a; bye bhai;`) ).not.toThrowError(); expect(console.log).toHaveBeenCalledWith("90"); expect(console.log).toHaveBeenCalledWith("90"); }); test("test accessing variable in parent scope", () => { expect(() => interpreter.interpret(`hi bhai; bhai ye hai a = 4; { bol bhai a; } bol bhai a; bye bhai;`) ).not.toThrowError(); expect(console.log).toHaveBeenCalledWith("4"); expect(console.log).toHaveBeenCalledWith("4"); }); test("whileStatement test with 2 times loop, should success", () => { expect(() => interpreter.interpret(` hi bhai; bhai ye hai a = 0; jab tak bhai (a < 2) { bol bhai "bhai"; a += 1; } bye bhai;`) ).not.toThrowError(); expect(console.log).toHaveBeenCalledWith("bhai"); expect(console.log).toHaveBeenCalledWith("bhai"); }); test("whileStatement test with nested loops - 2, should success", () => { expect(() => interpreter.interpret(` hi bhai; bhai ye hai a = 0, b = 0; jab tak bhai (a < 2) { jab tak bhai (b < 1) { bol bhai "bhai"; b += 1; } a += 1; } bye bhai; `) ).not.toThrowError(); expect(console.log).toHaveBeenCalledWith("bhai"); }); test("whileStatement test with nested loops - 3, should success", () => { expect(() => interpreter.interpret(` hi bhai; bhai ye hai a = 0; jab tak bhai (a < 2) { bhai ye hai b = 0; jab tak bhai (b < 2) { bol bhai "bhai"; b += 1; agar bhai (b == 1) bas kar bhai; } a += 1; } bye bhai; `) ).not.toThrowError(); expect(console.log).toHaveBeenCalledWith("bhai"); expect(console.log).toHaveBeenCalledWith("bhai"); }); test("whileStatement test with nested loops - 4, should success", () => { expect(() => interpreter.interpret(` hi bhai bhai ye hai a = 0; jab tak bhai (a < 10) { bol bhai a; a += 1; agar bhai (a == 6) { bas kar bhai; } } bol bhai "done"; bye bhai `) ).not.toThrowError(); expect(console.log).toHaveBeenCalledWith("0"); expect(console.log).toHaveBeenCalledWith("1"); expect(console.log).toHaveBeenCalledWith("2"); expect(console.log).toHaveBeenCalledWith("3"); expect(console.log).toHaveBeenCalledWith("4"); expect(console.log).toHaveBeenCalledWith("5"); }); test("whileStatement test with nested loops - 5, should success", () => { expect(() => interpreter.interpret(` hi bhai bhai ye hai a = 0; jab tak bhai (a < 10) { bol bhai a; a += 1; agar bhai (a == 6) bas kar bhai; } bol bhai "done"; bye bhai `) ).not.toThrowError(); expect(console.log).toHaveBeenCalledWith("0"); expect(console.log).toHaveBeenCalledWith("1"); expect(console.log).toHaveBeenCalledWith("2"); expect(console.log).toHaveBeenCalledWith("3"); expect(console.log).toHaveBeenCalledWith("4"); expect(console.log).toHaveBeenCalledWith("5"); }); test("whileStatement test with nested loops - 6, should success", () => { expect(() => interpreter.interpret(` hi bhai bhai ye hai a = 0; jab tak bhai (a < 10) { bol bhai a; a += 1; agar bhai (a == 3) { bas kar bhai; } bol bhai "2 baar hi chapunga"; } bol bhai "done"; bye bhai `) ).not.toThrowError(); expect(console.log).toHaveBeenCalledWith("0"); expect(console.log).toHaveBeenCalledWith("1"); expect(console.log).toHaveBeenCalledWith("2"); expect(console.log).toHaveBeenCalledWith("2 baar hi chapunga"); expect(console.log).toHaveBeenCalledWith("2 baar hi chapunga"); }); // test("jest", () => { // interpreter.interpret(` // hi bhai // bhai ye hai a = 0; // jab tak bhai (a < 10) { // bol bhai a; // a += 1; // agar bhai (a == 3) { // bas kar bhai; // } // bol bhai "2 baar hi chapunga"; // } // bol bhai "done"; // bye bhai // `); // });