www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

unicode-spec.js (3570B)


      1 /* eslint max-len:0 */
      2 /* global beforeEach: false */
      3 /* global jasmine: false */
      4 /* global expect: false */
      5 /* global it: false */
      6 /* global describe: false */
      7 const ParseError = require("../src/ParseError");
      8 const parseTree = require("../src/parseTree");
      9 const Settings = require("../src/Settings");
     10 
     11 const defaultSettings = new Settings({});
     12 
     13 const parseAndSetResult = function(expr, result, settings) {
     14     try {
     15         return parseTree(expr, settings || defaultSettings);
     16     } catch (e) {
     17         result.pass = false;
     18         if (e instanceof ParseError) {
     19             result.message = "'" + expr + "' failed " +
     20                 "parsing with error: " + e.message;
     21         } else {
     22             result.message = "'" + expr + "' failed " +
     23                 "parsing with unknown error: " + e.message;
     24         }
     25     }
     26 };
     27 
     28 describe("unicode", function() {
     29     beforeEach(function() {
     30         jasmine.addMatchers({
     31 
     32             toParse: function() {
     33                 return {
     34                     compare: function(actual, settings) {
     35                         const usedSettings = settings ? settings : defaultSettings;
     36 
     37                         const result = {
     38                             pass: true,
     39                             message: "'" + actual + "' succeeded parsing",
     40                         };
     41                         parseAndSetResult(actual, result, usedSettings);
     42                         return result;
     43                     },
     44                 };
     45             },
     46 
     47             toNotParse: function() {
     48                 return {
     49                     compare: function(actual, settings) {
     50                         const usedSettings = settings ? settings : defaultSettings;
     51 
     52                         const result = {
     53                             pass: false,
     54                             message: "Expected '" + actual + "' to fail " +
     55                                 "parsing, but it succeeded",
     56                         };
     57 
     58                         try {
     59                             parseTree(actual, usedSettings);
     60                         } catch (e) {
     61                             if (e instanceof ParseError) {
     62                                 result.pass = true;
     63                                 result.message = "'" + actual + "' correctly " +
     64                                     "didn't parse with error: " + e.message;
     65                             } else {
     66                                 result.message = "'" + actual + "' failed " +
     67                                     "parsing with unknown error: " + e.message;
     68                             }
     69                         }
     70 
     71                         return result;
     72                     },
     73                 };
     74             },
     75         });
     76     });
     77 
     78     it("should parse Latin-1 inside \\text{}", function() {
     79         expect('\\text{ÀàÇçÉéÏïÖöÛû}').toParse();
     80     });
     81 
     82     it("should not parse Latin-1 outside \\text{}", function() {
     83         expect('ÀàÇçÉéÏïÖöÛû').toNotParse();
     84     });
     85 
     86     it("should parse Cyrillic inside \\text{}", function() {
     87         expect('\\text{БГДЖЗЙЛФЦШЫЮЯ}').toParse();
     88     });
     89 
     90     it("should not parse Cyrillic outside \\text{}", function() {
     91         expect('БГДЖЗЙЛФЦШЫЮЯ').toNotParse();
     92     });
     93 
     94     it("should parse CJK inside \\text{}", function() {
     95         expect('\\text{私はバナナです}').toParse();
     96         expect('\\text{여보세요}').toParse();
     97     });
     98 
     99     it("should not parse CJK outside \\text{}", function() {
    100         expect('私はバナナです。').toNotParse();
    101         expect('여보세요').toNotParse();
    102     });
    103 });