1 /* 2 * Copyright (c) 2014 Nonki Takahashi. All rights reserved. 3 * 4 * History: 5 * 0.3 2014-01-20 Changed version number. Changed @returns to @return. 6 * 0.2 2014-01-20 Interface changed. 7 * 0.1 2014-01-17 Created. 8 */ 9 10 /** 11 * @fileOverview Unit Test Specification for EBNF Parser Generator Object 12 * @version 0.3 13 * @author Nonki Takahashi 14 */ 15 16 describe("Generator 仕様 0.3", function() { 17 var g = new EBNFParser("syntax = {line, nl}.", [], "Test", "0.3"); 18 var code = "/**\n"; 19 code += " * @fileOverview TestParser - Test Parser Object\n"; 20 code += " * @version 0.3\n"; 21 code += " * @author EBNFParser written by Nonki Takahashi\n"; 22 code += " */\n"; 23 code += "\n"; 24 code += "/**\n"; 25 code += " * Test Parser Object\n"; 26 code += " * @class Represents Test Parser Object\n"; 27 code += " * @this {TestParser}\n"; 28 code += " * @param {String} src source to parser\n"; 29 code += " * @param {Object} gapFree array of gap free id\n"; 30 code += " * @param {String} name name of the parser\n"; 31 code += " * @param {String} ver version of the parser\n"; 32 code += " * @param {Boolean} ignoreCase true if ignore case (optional)\n"; 33 code += " * @property {String} buf source buffer\n"; 34 code += " * @property {Integer} ptr source buffer pointer\n"; 35 code += " * @property {Object} gapFree array of gap free id\n"; 36 code += " * @property {String} name name of the parser\n"; 37 code += " * @property {String} ver version of the parser\n"; 38 code += " * @property {Boolean} ignoreCase true if ignore case\n"; 39 code += " * @since 0.3\n"; 40 code += " */\n"; 41 code += "TestParser = function(src, gapFree, name, ver, ignoreCase) {\n"; 42 code += "this.gapFree = gapFree;\n"; 43 code += "this.name = name;\n"; 44 code += "this.ver = ver;\n"; 45 code += "if (ignoreCase)\n"; 46 code += "this.ignoreCase = true;\n"; 47 code += "else\n"; 48 code += "this.ignoreCase = false;\n"; 49 code += "// inherit the methods of class Lex\n"; 50 code += "Lex.call(this, src);\n"; 51 code += "};\n"; 52 code += "TestParser.prototype = new Lex();\n"; 53 code += "\n"; 54 code += "/**\n"; 55 code += " * syntax = {line, nl}.\n"; 56 code += " * @return {String} code generated if matched, null if not matched\n"; 57 code += " * @since 0.3\n"; 58 code += " */\n"; 59 code += "TestParser.prototype.syntax = function() {\n"; 60 code += "var match = [];\n"; 61 code += "var save = this.ptr;\n"; 62 code += "var n = -1;\n"; 63 code += "this.sp();\n"; 64 code += "while(match[n]) {\n"; 65 code += "this.sp();\n"; 66 code += "match[++n] = this.line();\n"; 67 code += "if (match[n]) {\n"; 68 code += "this.sp();\n"; 69 code += "match[++n] = this.nl();\n"; 70 code += "}\n"; 71 code += "}\n"; 72 code += "match[++n] = true;\n"; 73 code += "if (!match[n]) {\n"; 74 code += "this.ptr = save;\n"; 75 code += "return null;\n"; 76 code += "}\n"; 77 code += "return this.run(n, match, \"syntax\");\n"; 78 code += "};\n\n"; 79 80 it("syntax() は " + code + " を返す", function() { 81 expect(g.syntax()).toEqual(code); 82 }); 83 84 }); 85