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