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 });