Best Python code snippet using hypothesis
math_semantic_tree_test.js
Source:math_semantic_tree_test.js  
1// Copyright 2013 Google Inc.2//3// Licensed under the Apache License, Version 2.0 (the "License");4// you may not use this file except in compliance with the License.5// You may obtain a copy of the License at6//7//      http://www.apache.org/licenses/LICENSE-2.08//9// Unless required by applicable law or agreed to in writing, software10// distributed under the License is distributed on an "AS IS" BASIS,11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.12// See the License for the specific language governing permissions and13// limitations under the License.14/**15 * @fileoverview Testcases for the semantic tree.16 * @author sorge@google.com (Volker Sorge)17 */18goog.provide('cvox.SemanticTreeTest');19goog.require('cvox.AbstractTestCase');20goog.require('cvox.ChromeVoxTester');21goog.require('cvox.SemanticAttr');22goog.require('cvox.SemanticTree');23goog.require('cvox.SemanticUtil');24goog.require('cvox.XpathUtil');25/**26 * @constructor27 * @extends {cvox.AbstractTestCase}28 */29cvox.SemanticTreeTest = function() {30  goog.base(this);31};32goog.inherits(cvox.SemanticTreeTest, cvox.AbstractTestCase);33/**34 * @override35 */36cvox.SemanticTreeTest.prototype.setUpTest = function() {37  this.nodeCounter = 0;38  this.xpathBlacklist = [];39  this.brief = true;40  cvox.SemanticTreeTest.setupAttributes();41};42/**43 * Adds some unicode characters via hex code to the right category.44 *45 * This method is necessary as the test framework can not handle code containing46 * utf-8 encoded characters.47 */48cvox.SemanticTreeTest.setupAttributes = function() {49  var attr = cvox.SemanticAttr.getInstance();50  attr.neutralFences.unshift(cvox.SemanticUtil.numberToUnicode(0x00A6));51  attr.dashes.unshift(cvox.SemanticUtil.numberToUnicode(0x2015));52  attr.neutralFences.unshift(cvox.SemanticUtil.numberToUnicode(0x2016));53  attr.arrows.unshift(cvox.SemanticUtil.numberToUnicode(0x2192));54  attr.sumOps.unshift(cvox.SemanticUtil.numberToUnicode(0x2211));55  attr.additions.unshift(cvox.SemanticUtil.numberToUnicode(0x2213));56  attr.multiplications.unshift(cvox.SemanticUtil.numberToUnicode(0x2218));57  attr.intOps.unshift(cvox.SemanticUtil.numberToUnicode(0x222B));58  attr.inequalities.unshift(cvox.SemanticUtil.numberToUnicode(0x2264));59  attr.additions.unshift(cvox.SemanticUtil.numberToUnicode(0x2295));60  var open = cvox.SemanticUtil.numberToUnicode(0x3008);61  var close = cvox.SemanticUtil.numberToUnicode(0x3009);62  attr.openClosePairs[open] = close;63  attr.leftFences.unshift(open);64  attr.rightFences.unshift(close);65};66/**67 * Removes XML nodes according to the XPath elements in the blacklist.68 * @param {Node} xml Xml representation of the semantic node.69 */70cvox.SemanticTreeTest.prototype.customizeXml = function(xml) {71  this.xpathBlacklist.forEach(72      function(xpath) {73        var removes = cvox.XpathUtil.evalXPath(xpath, xml);74        removes.forEach(75            function(node) {76              node.parentNode.removeChild(node);77            });78      });79};80/**81 * Tests if for a given mathml snippet results in a particular semantic tree.82 * @param {string} mml MathML expression.83 * @param {string} sml XML snippet for the semantic tree.84 */85cvox.SemanticTreeTest.prototype.executeTreeTest = function(mml, sml) {86  var mathMl = '<math id=' + this.nodeCounter + '>' + mml + '';87  this.appendHtml(mathMl);88  var node = document.getElementById((this.nodeCounter++).toString());89  var stree = new cvox.SemanticTree(/** @type {!Element} */(node));90  var sxml = stree.xml(this.brief);91  this.customizeXml(sxml);92  var dp = new DOMParser();93  var xml = dp.parseFromString('<stree>' + sml + '</stree>', 'text/xml');94  var xmls = new XMLSerializer();95  this.assertEquals(xmls.serializeToString(xml), xmls.serializeToString(sxml));96};97// Relations.98/**99 * Test relation trees.100 */101cvox.SemanticTreeTest.prototype.testStreeRelations = function() {102  this.brief = true;103  this.executeTreeTest(104      '<mo>=</mo>',105      '<relation>=</relation>');106  this.executeTreeTest(107      '<mi>a</mi><mo>=</mo><mi>b</mi>',108      '<relseq>=' +109          '<content><relation>=</relation></content>' +110          '<children>' +111          '<identifier>a</identifier>' +112          '<identifier>b</identifier>' +113          '</children>' +114          '</relseq>');115  this.executeTreeTest(116      '<mi>a</mi><mo>=</mo><mi>b</mi><mo>=</mo><mi>c</mi>',117      '<relseq>=' +118          '<content><relation>=</relation><relation>=</relation></content>' +119          '<children>' +120          '<identifier>a</identifier>' +121          '<identifier>b</identifier>' +122          '<identifier>c</identifier>' +123          '</children>' +124          '</relseq>');125  this.executeTreeTest(126      '<mi>a</mi><mo>=</mo><mi>b</mi><mo>=</mo><mi>c</mi>' +127          '<mo>\u2264</mo><mi>d</mi>',128      '<multirel>' +129          '<content><relation>=</relation><relation>=</relation>' +130          '<relation>\u2264</relation></content>' +131          '<children>' +132          '<identifier>a</identifier>' +133          '<identifier>b</identifier>' +134          '<identifier>c</identifier>' +135          '<identifier>d</identifier>' +136          '</children>' +137          '</multirel>');138};139// Operators.140/**141 * Test operator trees with pre- and postfixes.142 */143cvox.SemanticTreeTest.prototype.testStreePrePostfixOperators = function() {144  this.brief = true;145  // Pathological operator only case.146  this.executeTreeTest(147      '<mo>+</mo><mo>-</mo><mo>+</mo>',148      '<prefixop>+' +149          '<content><operator>+</operator></content>' +150          '<children>' +151          '<prefixop>-' +152          '<content><operator>-</operator></content>' +153          '<children>' +154          '<operator>+</operator>' +155          '</children>' +156          '</prefixop>' +157          '</children>' +158          '</prefixop>');159  // Single identifier with prefixes.160  this.executeTreeTest(161      '<mo>+</mo><mo>+</mo><mi>a</mi>',162      '<prefixop>+ +' +163          '<content><operator>+</operator><operator>+</operator></content>' +164          '<children>' +165          '<identifier>a</identifier>' +166          '</children>' +167          '</prefixop>');168  // Single identifier with prefix and negative.169  this.executeTreeTest(170      '<mo>+</mo><mo>-</mo><mi>a</mi>',171      '<prefixop>+' +172          '<content><operator>+</operator></content>' +173          '<children>' +174          '<prefixop>-' +175          '<content><operator>-</operator></content>' +176          '<children>' +177          '<identifier>a</identifier>' +178          '</children>' +179          '</prefixop>' +180          '</children>' +181          '</prefixop>');182  // Single identifier with postfixes.183  this.executeTreeTest(184      '<mi>a</mi><mo>+</mo><mo>-</mo>',185      '<postfixop>+ -' +186          '<content><operator>+</operator><operator>-</operator></content>' +187          '<children>' +188          '<identifier>a</identifier>' +189          '</children>' +190          '</postfixop>');191  // Single identifier with pre- and postfixes.192  this.executeTreeTest(193      '<mo>+</mo><mo>+</mo><mi>a</mi><mo>+</mo><mo>+</mo>',194      '<postfixop>+ +' +195          '<content><operator>+</operator><operator>+</operator></content>' +196          '<children>' +197          '<prefixop>+ +' +198          '<content><operator>+</operator><operator>+</operator></content>' +199          '<children>' +200          '<identifier>a</identifier>' +201          '</children>' +202          '</prefixop>' +203          '</children>' +204          '</postfixop>');205  // Single identifier with mixed pre- and postfixes.206  this.executeTreeTest(207      '<mo>\u2213</mo><mo>+</mo><mi>a</mi><mo>\u2213</mo><mo>+</mo>',208      '<postfixop>\u2213 +' +209          '<content>' +210          '<operator>\u2213</operator><operator>+</operator>' +211          '</content>' +212          '<children>' +213          '<prefixop>\u2213 +' +214          '<content>' +215          '<operator>\u2213</operator><operator>+</operator>' +216          '</content>' +217          '<children>' +218          '<identifier>a</identifier>' +219          '</children>' +220          '</prefixop>' +221          '</children>' +222          '</postfixop>');223  // Two identifiers with pre- and postfixes.224  this.executeTreeTest(225      '<mo>+</mo><mo>+</mo><mi>a</mi><mo>\u2213</mo><mo>+</mo>' +226          '<mi>b</mi><mo>+</mo>',227      '<infixop>\u2213' +228          '<content><operator>\u2213</operator></content>' +229          '<children>' +230          '<prefixop>+ +' +231          '<content><operator>+</operator><operator>+</operator></content>' +232          '<children>' +233          '<identifier>a</identifier>' +234          '</children>' +235          '</prefixop>' +236          '<postfixop>+' +237          '<content><operator>+</operator></content>' +238          '<children>' +239          '<prefixop>+' +240          '<content><operator>+</operator></content>' +241          '<children>' +242          '<identifier>b</identifier>' +243          '</children>' +244          '</prefixop>' +245          '</children>' +246          '</postfixop>' +247          '</children>' +248          '</infixop>');249  // Three identifiers with pre- and postfixes.250  this.executeTreeTest(251      '<mo>+</mo><mo>+</mo><mi>a</mi><mo>\u2213</mo><mo>+</mo>' +252          '<mi>b</mi><mo>+</mo><mo>\u2213</mo><mi>c</mi><mo>+</mo>',253      '<infixop>+' +254          '<content><operator>+</operator></content>' +255          '<children>' +256          '<infixop>\u2213' +257          '<content><operator>\u2213</operator></content>' +258          '<children>' +259          '<prefixop>+ +' +260          '<content><operator>+</operator><operator>+</operator></content>' +261          '<children>' +262          '<identifier>a</identifier>' +263          '</children>' +264          '</prefixop>' +265          '<prefixop>+' +266          '<content><operator>+</operator></content>' +267          '<children>' +268          '<identifier>b</identifier>' +269          '</children>' +270          '</prefixop>' +271          '</children>' +272          '</infixop>' +273          '<postfixop>+' +274          '<content><operator>+</operator></content>' +275          '<children>' +276          '<prefixop>\u2213' +277          '<content><operator>\u2213</operator></content>' +278          '<children>' +279          '<identifier>c</identifier>' +280          '</children>' +281          '</prefixop>' +282          '</children>' +283          '</postfixop>' +284          '</children>' +285          '</infixop>');286};287/**288 * Test operator trees with single operator.289 */290cvox.SemanticTreeTest.prototype.testStreeSingleOperators = function() {291  this.brief = true;292  // Single identifier.293  this.executeTreeTest(294      '<mi>a</mi>',295      '<identifier>a</identifier>');296  // Single implicit node.297  this.executeTreeTest(298      '<mi>a</mi><mi>b</mi>',299      '<infixop>\u2062' +300          '<content><operator>\u2062</operator></content>' +301          '<children>' +302          '<identifier>a</identifier>' +303          '<identifier>b</identifier>' +304          '</children>' +305          '</infixop>');306  // Implicit multi node.307  this.executeTreeTest(308      '<mi>a</mi><mi>b</mi><mi>c</mi>',309      '<infixop>\u2062' +310          '<content><operator>\u2062</operator></content>' +311          '<children>' +312          '<identifier>a</identifier>' +313          '<identifier>b</identifier>' +314          '<identifier>c</identifier>' +315          '</children>' +316          '</infixop>');317  // Single addition.318  this.executeTreeTest(319      '<mi>a</mi><mo>+</mo><mi>b</mi>',320      '<infixop>+' +321          '<content><operator>+</operator></content>' +322          '<children>' +323          '<identifier>a</identifier>' +324          '<identifier>b</identifier>' +325          '</children>' +326          '</infixop>');327  // Multi addition.328  this.executeTreeTest(329      '<mi>a</mi><mo>+</mo><mi>b</mi><mo>+</mo><mi>c</mi>',330      '<infixop>+' +331          '<content><operator>+</operator><operator>+</operator></content>' +332          '<children>' +333          '<identifier>a</identifier>' +334          '<identifier>b</identifier>' +335          '<identifier>c</identifier>' +336          '</children>' +337          '</infixop>');338  // Multi addition with implicit node.339  this.executeTreeTest(340      '<mi>a</mi><mo>+</mo><mi>b</mi><mi>c</mi><mo>+</mo><mi>d</mi>',341      '<infixop>+' +342          '<content><operator>+</operator><operator>+</operator></content>' +343          '<children>' +344          '<identifier>a</identifier>' +345          '<infixop>\u2062' +346          '<content><operator>\u2062</operator></content>' +347          '<children>' +348          '<identifier>b</identifier>' +349          '<identifier>c</identifier>' +350          '</children>' +351          '</infixop>' +352          '<identifier>d</identifier>' +353          '</children>' +354          '</infixop>');355};356/**357 * Test operator trees with multiple operators.358 */359cvox.SemanticTreeTest.prototype.testStreeMultipleOperators = function() {360  this.brief = true;361  // Addition and subtraction.362  this.executeTreeTest(363      '<mi>a</mi><mo>+</mo><mi>b</mi><mo>-</mo><mi>c</mi><mo>+</mo><mi>d</mi>',364      '<infixop>+' +365          '<content><operator>+</operator></content>' +366          '<children>' +367          '<infixop>-' +368          '<content><operator>-</operator></content>' +369          '<children>' +370          '<infixop>+' +371          '<content><operator>+</operator></content>' +372          '<children>' +373          '<identifier>a</identifier>' +374          '<identifier>b</identifier>' +375          '</children>' +376          '</infixop>' +377          '<identifier>c</identifier>' +378          '</children>' +379          '</infixop>' +380          '<identifier>d</identifier>' +381          '</children>' +382          '</infixop>');383  // Addition and subtraction.384  this.executeTreeTest(385      '<mi>a</mi><mo>+</mo><mi>b</mi><mo>+</mo><mi>c</mi><mo>-</mo>' +386          '<mi>d</mi><mo>-</mo><mi>e</mi>',387      '<infixop>-' +388          '<content><operator>-</operator><operator>-</operator></content>' +389          '<children>' +390          '<infixop>+' +391          '<content><operator>+</operator><operator>+</operator></content>' +392          '<children>' +393          '<identifier>a</identifier>' +394          '<identifier>b</identifier>' +395          '<identifier>c</identifier>' +396          '</children>' +397          '</infixop>' +398          '<identifier>d</identifier>' +399          '<identifier>e</identifier>' +400          '</children>' +401          '</infixop>');402  // Addition and explicit multiplication.403  this.executeTreeTest(404      '<mi>a</mi><mo>+</mo><mi>b</mi><mo>\u2218</mo><mi>c</mi><mo>+</mo><mi>d</mi>',405      '<infixop>+' +406          '<content><operator>+</operator><operator>+</operator></content>' +407          '<children>' +408          '<identifier>a</identifier>' +409          '<infixop>\u2218' +410          '<content><operator>\u2218</operator></content>' +411          '<children>' +412          '<identifier>b</identifier>' +413          '<identifier>c</identifier>' +414          '</children>' +415          '</infixop>' +416          '<identifier>d</identifier>' +417          '</children>' +418          '</infixop>');419  // Addition with explicit and implicit multiplication.420  this.executeTreeTest(421      '<mi>a</mi><mo>+</mo><mi>b</mi><mo>\u2218</mo><mi>c</mi><mi>d</mi>' +422      '<mo>+</mo><mi>e</mi><mo>\u2218</mo><mi>f</mi>',423      '<infixop>+' +424          '<content><operator>+</operator><operator>+</operator></content>' +425          '<children>' +426          '<identifier>a</identifier>' +427          '<infixop>\u2218' +428          '<content><operator>\u2218</operator></content>' +429          '<children>' +430          '<identifier>b</identifier>' +431          '<infixop>\u2062' +432          '<content><operator>\u2062</operator></content>' +433          '<children>' +434          '<identifier>c</identifier>' +435          '<identifier>d</identifier>' +436          '</children>' +437          '</infixop>' +438          '</children>' +439          '</infixop>' +440          '<infixop>\u2218' +441          '<content><operator>\u2218</operator></content>' +442          '<children>' +443          '<identifier>e</identifier>' +444          '<identifier>f</identifier>' +445          '</children>' +446          '</infixop>' +447          '</children>' +448          '</infixop>');449  // Two Additions, subtraction plus explicit and implicit multiplication,450  // one prefix and one postfix.451  this.executeTreeTest(452      '<mi>a</mi><mo>+</mo><mi>b</mi><mo>+</mo><mi>c</mi><mi>d</mi>' +453          '<mo>+</mo><mi>e</mi><mo>\u2218</mo><mi>f</mi><mo>-</mo><mi>g</mi>' +454          '<mo>+</mo><mo>+</mo><mi>h</mi><mo>\u2295</mo><mi>i</mi>' +455          '<mo>\u2295</mo><mi>j</mi><mo>+</mo><mo>+</mo>',456      '<infixop>\u2295' +457          '<content><operator>\u2295</operator>' +458          '<operator>\u2295</operator></content>' +459          '<children>' +460          '<infixop>+' +461          '<content><operator>+</operator></content>' +462          '<children>' +463          '<infixop>-' +464          '<content><operator>-</operator></content>' +465          '<children>' +466          '<infixop>+' +467          '<content><operator>+</operator>' +468          '<operator>+</operator><operator>+</operator></content>' +469          '<children>' +470          '<identifier>a</identifier>' +471          '<identifier>b</identifier>' +472          '<infixop>\u2062' +473          '<content><operator>\u2062</operator></content>' +474          '<children>' +475          '<identifier>c</identifier>' +476          '<identifier>d</identifier>' +477          '</children>' +478          '</infixop>' +479          '<infixop>\u2218' +480          '<content><operator>\u2218</operator></content>' +481          '<children>' +482          '<identifier>e</identifier>' +483          '<identifier>f</identifier>' +484          '</children>' +485          '</infixop>' +486          '</children>' +487          '</infixop>' +488          '<identifier>g</identifier>' +489          '</children>' +490          '</infixop>' +491          '<prefixop>+' +492          '<content><operator>+</operator></content>' +493          '<children>' +494          '<identifier>h</identifier>' +495          '</children>' +496          '</prefixop>' +497          '</children>' +498          '</infixop>' +499          '<identifier>i</identifier>' +500          '<postfixop>+ +' +501          '<content><operator>+</operator><operator>+</operator></content>' +502          '<children>' +503          '<identifier>j</identifier>' +504          '</children>' +505          '</postfixop>' +506          '</children>' +507          '</infixop>');508};509// Fences.510/**511 * Test regular directed fences.512 */513cvox.SemanticTreeTest.prototype.testStreeRegularFences = function() {514  this.brief = true;515  // No fence.516  this.executeTreeTest(517      '<mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow>',518      '<infixop>+' +519      '<content>' +520      '<operator>+</operator>' +521      '</content>' +522      '<children>' +523      '<identifier>a</identifier>' +524      '<identifier>b</identifier>' +525      '</children>' +526      '</infixop>');527  // Empty parentheses.528  this.executeTreeTest(529      '<mrow><mo>(</mo><mo>)</mo></mrow>',530      '<fenced>' +531      '<content>' +532      '<fence>(</fence>' +533      '<fence>)</fence>' +534      '</content>' +535      '<children>' +536      '<empty/>' +537      '</children>' +538      '</fenced>');539  // Single Fenced Expression.540  this.executeTreeTest(541      '<mrow><mo>(</mo><mi>a</mi><mo>+</mo><mi>b</mi><mo>)</mo></mrow>',542      '<fenced>' +543      '<content>' +544      '<fence>(</fence>' +545      '<fence>)</fence>' +546      '</content>' +547      '<children>' +548      '<infixop>+' +549      '<content>' +550      '<operator>+</operator>' +551      '</content>' +552      '<children>' +553      '<identifier>a</identifier>' +554      '<identifier>b</identifier>' +555      '</children>' +556      '</infixop>' +557      '</children>' +558      '</fenced>');559  // Single Fenced Expression and operators.560  this.executeTreeTest(561      '<mrow><mi>a</mi><mo>+</mo><mo>(</mo><mi>b</mi><mo>+</mo><mi>c</mi>' +562      '<mo>)</mo><mo>+</mo><mi>d</mi></mrow>',563      '<infixop>+' +564      '<content>' +565      '<operator>+</operator>' +566      '<operator>+</operator>' +567      '</content>' +568      '<children>' +569      '<identifier>a</identifier>' +570      '<fenced>' +571      '<content>' +572      '<fence>(</fence>' +573      '<fence>)</fence>' +574      '</content>' +575      '<children>' +576      '<infixop>+' +577      '<content>' +578      '<operator>+</operator>' +579      '</content>' +580      '<children>' +581      '<identifier>b</identifier>' +582      '<identifier>c</identifier>' +583      '</children>' +584      '</infixop>' +585      '</children>' +586      '</fenced>' +587      '<identifier>d</identifier>' +588      '</children>' +589      '</infixop>');590  // Parallel Parenthesis.591  this.executeTreeTest(592      '<mrow><mo>(</mo><mi>a</mi><mo>+</mo><mi>b</mi><mo>)</mo><mo>(</mo>' +593      '<mi>c</mi><mo>+</mo><mi>d</mi><mo>)</mo></mrow>',594      '<infixop>\u2062' +595      '<content>' +596      '<operator>\u2062</operator>' +597      '</content>' +598      '<children>' +599      '<fenced>' +600      '<content>' +601      '<fence>(</fence>' +602      '<fence>)</fence>' +603      '</content>' +604      '<children>' +605      '<infixop>+' +606      '<content>' +607      '<operator>+</operator>' +608      '</content>' +609      '<children>' +610      '<identifier>a</identifier>' +611      '<identifier>b</identifier>' +612      '</children>' +613      '</infixop>' +614      '</children>' +615      '</fenced>' +616      '<fenced>' +617      '<content>' +618      '<fence>(</fence>' +619      '<fence>)</fence>' +620      '</content>' +621      '<children>' +622      '<infixop>+' +623      '<content>' +624      '<operator>+</operator>' +625      '</content>' +626      '<children>' +627      '<identifier>c</identifier>' +628      '<identifier>d</identifier>' +629      '</children>' +630      '</infixop>' +631      '</children>' +632      '</fenced>' +633      '</children>' +634      '</infixop>');635  // Nested Parenthesis.636  this.executeTreeTest(637      '<mrow><mo>(</mo><mo>(</mo><mi>a</mi><mo>+</mo><mi>b</mi><mo>)</mo>' +638      '<mo>(</mo><mi>c</mi><mo>+</mo><mi>d</mi><mo>)</mo><mo>)</mo></mrow>',639      '<fenced>' +640      '<content>' +641      '<fence>(</fence>' +642      '<fence>)</fence>' +643      '</content>' +644      '<children>' +645      '<infixop>\u2062' +646      '<content>' +647      '<operator>\u2062</operator>' +648      '</content>' +649      '<children>' +650      '<fenced>' +651      '<content>' +652      '<fence>(</fence>' +653      '<fence>)</fence>' +654      '</content>' +655      '<children>' +656      '<infixop>+' +657      '<content>' +658      '<operator>+</operator>' +659      '</content>' +660      '<children>' +661      '<identifier>a</identifier>' +662      '<identifier>b</identifier>' +663      '</children>' +664      '</infixop>' +665      '</children>' +666      '</fenced>' +667      '<fenced>' +668      '<content>' +669      '<fence>(</fence>' +670      '<fence>)</fence>' +671      '</content>' +672      '<children>' +673      '<infixop>+' +674      '<content>' +675      '<operator>+</operator>' +676      '</content>' +677      '<children>' +678      '<identifier>c</identifier>' +679      '<identifier>d</identifier>' +680      '</children>' +681      '</infixop>' +682      '</children>' +683      '</fenced>' +684      '</children>' +685      '</infixop>' +686      '</children>' +687      '</fenced>');688  // Nested parenthesis and brackets.689  this.executeTreeTest(690      '<mrow><mo>(</mo><mo>[</mo><mi>a</mi><mo>+</mo><mi>b</mi><mo>+</mo>' +691      '<mi>c</mi><mo>]</mo><mo>+</mo><mi>d</mi><mo>)</mo></mrow>',692      '<fenced>' +693      '<content>' +694      '<fence>(</fence>' +695      '<fence>)</fence>' +696      '</content>' +697      '<children>' +698      '<infixop>+' +699      '<content>' +700      '<operator>+</operator>' +701      '</content>' +702      '<children>' +703      '<fenced>' +704      '<content>' +705      '<fence>[</fence>' +706      '<fence>]</fence>' +707      '</content>' +708      '<children>' +709      '<infixop>+' +710      '<content>' +711      '<operator>+</operator>' +712      '<operator>+</operator>' +713      '</content>' +714      '<children>' +715      '<identifier>a</identifier>' +716      '<identifier>b</identifier>' +717      '<identifier>c</identifier>' +718      '</children>' +719      '</infixop>' +720      '</children>' +721      '</fenced>' +722      '<identifier>d</identifier>' +723      '</children>' +724      '</infixop>' +725      '</children>' +726      '</fenced>');727  // Nested parenthesis, brackets, braces and superscript operator.728  this.executeTreeTest(729      '<mrow><mo>(</mo><msup><mi>a</mi><mrow><mn>2</mn><mo>[</mo><mi>i</mi>' +730      '<mo>+</mo><mi>n</mi><mo>]</mo></mrow></msup><mo>+</mo><mi>b</mi>' +731      '<mo>)</mo><mo>+</mo><mo>{</mo><mi>c</mi><mi>d</mi><mo>-</mo><mo>[</mo>' +732      '<mi>e</mi><mo>+</mo><mi>f</mi><mo>]</mo><mo>}</mo></mrow>',733      '<infixop>+' +734      '<content>' +735      '<operator>+</operator>' +736      '</content>' +737      '<children>' +738      '<fenced>' +739      '<content>' +740      '<fence>(</fence>' +741      '<fence>)</fence>' +742      '</content>' +743      '<children>' +744      '<infixop>+' +745      '<content>' +746      '<operator>+</operator>' +747      '</content>' +748      '<children>' +749      '<superscript>' +750      '<children>' +751      '<identifier>a</identifier>' +752      '<infixop>\u2062' +753      '<content>' +754      '<operator>\u2062</operator>' +755      '</content>' +756      '<children>' +757      '<number>2</number>' +758      '<fenced>' +759      '<content>' +760      '<fence>[</fence>' +761      '<fence>]</fence>' +762      '</content>' +763      '<children>' +764      '<infixop>+' +765      '<content>' +766      '<operator>+</operator>' +767      '</content>' +768      '<children>' +769      '<identifier>i</identifier>' +770      '<identifier>n</identifier>' +771      '</children>' +772      '</infixop>' +773      '</children>' +774      '</fenced>' +775      '</children>' +776      '</infixop>' +777      '</children>' +778      '</superscript>' +779      '<identifier>b</identifier>' +780      '</children>' +781      '</infixop>' +782      '</children>' +783      '</fenced>' +784      '<fenced>' +785      '<content>' +786      '<fence>{</fence>' +787      '<fence>}</fence>' +788      '</content>' +789      '<children>' +790      '<infixop>-' +791      '<content>' +792      '<operator>-</operator>' +793      '</content>' +794      '<children>' +795      '<infixop>\u2062' +796      '<content>' +797      '<operator>\u2062</operator>' +798      '</content>' +799      '<children>' +800      '<identifier>c</identifier>' +801      '<identifier>d</identifier>' +802      '</children>' +803      '</infixop>' +804      '<fenced>' +805      '<content>' +806      '<fence>[</fence>' +807      '<fence>]</fence>' +808      '</content>' +809      '<children>' +810      '<infixop>+' +811      '<content>' +812      '<operator>+</operator>' +813      '</content>' +814      '<children>' +815      '<identifier>e</identifier>' +816      '<identifier>f</identifier>' +817      '</children>' +818      '</infixop>' +819      '</children>' +820      '</fenced>' +821      '</children>' +822      '</infixop>' +823      '</children>' +824      '</fenced>' +825      '</children>' +826      '</infixop>');827};828/**829 * Test neutral fences.830 */831cvox.SemanticTreeTest.prototype.testStreeNeutralFences = function() {832  this.brief = true;833  // Empty bars.834  this.executeTreeTest(835      '<mrow><mo>|</mo><mo>|</mo></mrow>',836      '<fenced>' +837      '<content>' +838      '<fence>|</fence>' +839      '<fence>|</fence>' +840      '</content>' +841      '<children>' +842      '<empty/>' +843      '</children>' +844      '</fenced>');845  // Simple bar fence.846  this.executeTreeTest(847      '<mrow><mo>|</mo><mi>a</mi><mo>|</mo></mrow>',848      '<fenced>' +849      '<content>' +850      '<fence>|</fence>' +851      '<fence>|</fence>' +852      '</content>' +853      '<children>' +854      '<identifier>a</identifier>' +855      '</children>' +856      '</fenced>');857  // Parallel bar fences.858  this.executeTreeTest(859      '<mrow><mo>|</mo><mi>a</mi><mo>|</mo><mi>b</mi><mo>+</mo>' +860      '<mo>\u00A6</mo><mi>c</mi><mo>\u00A6</mo></mrow>',861      '<infixop>+' +862      '<content>' +863      '<operator>+</operator>' +864      '</content>' +865      '<children>' +866      '<infixop>\u2062' +867      '<content>' +868      '<operator>\u2062</operator>' +869      '</content>' +870      '<children>' +871      '<fenced>' +872      '<content>' +873      '<fence>|</fence>' +874      '<fence>|</fence>' +875      '</content>' +876      '<children>' +877      '<identifier>a</identifier>' +878      '</children>' +879      '</fenced>' +880      '<identifier>b</identifier>' +881      '</children>' +882      '</infixop>' +883      '<fenced>' +884      '<content>' +885      '<fence>\u00A6</fence>' +886      '<fence>\u00A6</fence>' +887      '</content>' +888      '<children>' +889      '<identifier>c</identifier>' +890      '</children>' +891      '</fenced>' +892      '</children>' +893      '</infixop>');894  // Nested bar fences.895  this.executeTreeTest(896      '<mrow><mo>\u00A6</mo><mo>|</mo><mi>a</mi><mo>|</mo><mi>b</mi>' +897      '<mo>+</mo><mi>c</mi><mo>\u00A6</mo></mrow>',898      '<fenced>' +899      '<content>' +900      '<fence>\u00A6</fence>' +901      '<fence>\u00A6</fence>' +902      '</content>' +903      '<children>' +904      '<infixop>+' +905      '<content>' +906      '<operator>+</operator>' +907      '</content>' +908      '<children>' +909      '<infixop>\u2062' +910      '<content>' +911      '<operator>\u2062</operator>' +912      '</content>' +913      '<children>' +914      '<fenced>' +915      '<content>' +916      '<fence>|</fence>' +917      '<fence>|</fence>' +918      '</content>' +919      '<children>' +920      '<identifier>a</identifier>' +921      '</children>' +922      '</fenced>' +923      '<identifier>b</identifier>' +924      '</children>' +925      '</infixop>' +926      '<identifier>c</identifier>' +927      '</children>' +928      '</infixop>' +929      '</children>' +930      '</fenced>');931};932/**933 * Mixed neutral and regular fences.934 */935cvox.SemanticTreeTest.prototype.testStreeMixedFences = function() {936  this.brief = true;937  // Empty parenthsis inside bars.938  this.executeTreeTest(939      '<mrow><mo>|</mo><mo>(</mo><mo>)</mo><mo>|</mo></mrow>',940      '<fenced>' +941      '<content>' +942      '<fence>|</fence>' +943      '<fence>|</fence>' +944      '</content>' +945      '<children>' +946      '<fenced>' +947      '<content>' +948      '<fence>(</fence>' +949      '<fence>)</fence>' +950      '</content>' +951      '<children>' +952      '<empty/>' +953      '</children>' +954      '</fenced>' +955      '</children>' +956      '</fenced>');957  // Bars inside parentheses.958  this.executeTreeTest(959      '<mrow><mo>(</mo><mo>|</mo><mi>a</mi><mo>|</mo><mi>b</mi>' +960        '<mo>¦</mo><mi>c</mi><mo>¦</mo><mi>d</mi>' +961        '<mo>)</mo></mrow>',962        '<fenced>' +963        '<content>' +964        '<fence>(</fence>' +965        '<fence>)</fence>' +966        '</content>' +967        '<children>' +968        '<infixop>\u2062' +969        '<content>' +970        '<operator>\u2062</operator>' +971        '</content>' +972        '<children>' +973        '<fenced>' +974        '<content>' +975        '<fence>|</fence>' +976        '<fence>|</fence>' +977        '</content>' +978        '<children>' +979        '<identifier>a</identifier>' +980        '</children>' +981        '</fenced>' +982        '<identifier>b</identifier>' +983        '<fenced>' +984        '<content>' +985        '<fence>\u00A6</fence>' +986        '<fence>\u00A6</fence>' +987        '</content>' +988        '<children>' +989        '<identifier>c</identifier>' +990        '</children>' +991        '</fenced>' +992        '<identifier>d</identifier>' +993        '</children>' +994        '</infixop>' +995        '</children>' +996        '</fenced>');997  // Parentheses inside bards.998  this.executeTreeTest(999      '<mrow><mo>|</mo><mo>(</mo><mi>a</mi><mo>+</mo><mi>b</mi><mo>)</mo>' +1000      '<mo>¦</mo><mi>c</mi><mo>¦</mo><mi>d</mi><mo>|</mo></mrow>',1001      '<fenced>' +1002      '<content>' +1003      '<fence>|</fence>' +1004      '<fence>|</fence>' +1005      '</content>' +1006      '<children>' +1007      '<infixop>\u2062' +1008      '<content>' +1009      '<operator>\u2062</operator>' +1010      '</content>' +1011      '<children>' +1012      '<fenced>' +1013      '<content>' +1014      '<fence>(</fence>' +1015      '<fence>)</fence>' +1016      '</content>' +1017      '<children>' +1018      '<infixop>+' +1019      '<content>' +1020      '<operator>+</operator>' +1021      '</content>' +1022      '<children>' +1023      '<identifier>a</identifier>' +1024      '<identifier>b</identifier>' +1025      '</children>' +1026      '</infixop>' +1027      '</children>' +1028      '</fenced>' +1029      '<fenced>' +1030      '<content>' +1031      '<fence>\u00A6</fence>' +1032      '<fence>\u00A6</fence>' +1033      '</content>' +1034      '<children>' +1035      '<identifier>c</identifier>' +1036      '</children>' +1037      '</fenced>' +1038      '<identifier>d</identifier>' +1039      '</children>' +1040      '</infixop>' +1041      '</children>' +1042      '</fenced>');1043  // Parentheses inside bards.1044  this.executeTreeTest(1045      '<mrow><mo>[</mo><mo>|</mo><mi>a</mi><mo>+</mo><mi>b</mi><mo>|</mo>' +1046      '<mo>+</mo><mi>c</mi><mo>]</mo><mo>+</mo><mo>\u00A6</mo><mi>d</mi>' +1047      '<mo>+</mo><mo>(</mo><mi>e</mi><mo>+</mo><mi>f</mi><mo>)</mo>' +1048      '<mo>\u00A6</mo></mrow>',1049      '<infixop>+' +1050      '<content>' +1051      '<operator>+</operator>' +1052      '</content>' +1053      '<children>' +1054      '<fenced>' +1055      '<content>' +1056      '<fence>[</fence>' +1057      '<fence>]</fence>' +1058      '</content>' +1059      '<children>' +1060      '<infixop>+' +1061      '<content>' +1062      '<operator>+</operator>' +1063      '</content>' +1064      '<children>' +1065      '<fenced>' +1066      '<content>' +1067      '<fence>|</fence>' +1068      '<fence>|</fence>' +1069      '</content>' +1070      '<children>' +1071      '<infixop>+' +1072      '<content>' +1073      '<operator>+</operator>' +1074      '</content>' +1075      '<children>' +1076      '<identifier>a</identifier>' +1077      '<identifier>b</identifier>' +1078      '</children>' +1079      '</infixop>' +1080      '</children>' +1081      '</fenced>' +1082      '<identifier>c</identifier>' +1083      '</children>' +1084      '</infixop>' +1085      '</children>' +1086      '</fenced>' +1087      '<fenced>' +1088      '<content>' +1089      '<fence>\u00A6</fence>' +1090      '<fence>\u00A6</fence>' +1091      '</content>' +1092      '<children>' +1093      '<infixop>+' +1094      '<content>' +1095      '<operator>+</operator>' +1096      '</content>' +1097      '<children>' +1098      '<identifier>d</identifier>' +1099      '<fenced>' +1100      '<content>' +1101      '<fence>(</fence>' +1102      '<fence>)</fence>' +1103      '</content>' +1104      '<children>' +1105      '<infixop>+' +1106      '<content>' +1107      '<operator>+</operator>' +1108      '</content>' +1109      '<children>' +1110      '<identifier>e</identifier>' +1111      '<identifier>f</identifier>' +1112      '</children>' +1113      '</infixop>' +1114      '</children>' +1115      '</fenced>' +1116      '</children>' +1117      '</infixop>' +1118      '</children>' +1119      '</fenced>' +1120      '</children>' +1121      '</infixop>');1122};1123/**1124 * Mixed with isolated bars.1125 */1126cvox.SemanticTreeTest.prototype.testStreeMixedFencesWithBars = function() {1127  this.brief = true;1128  this.xpathBlacklist = ['descendant::punctuated/content'];1129  // Set notation.1130  this.executeTreeTest(1131      '<mrow><mo>{</mo><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>,</mo>' +1132      '<mi>z</mi><mo>)</mo><mo>|</mo><mi>x</mi><mi>y</mi><mo>=</mo>' +1133      '<mo>z</mo><mo>}</mo></mrow>',1134      '<fenced>' +1135      '<content>' +1136      '<fence>{</fence>' +1137      '<fence>}</fence>' +1138      '</content>' +1139      '<children>' +1140      '<punctuated>' +1141      '<children>' +1142      '<fenced>' +1143      '<content>' +1144      '<fence>(</fence>' +1145      '<fence>)</fence>' +1146      '</content>' +1147      '<children>' +1148      '<punctuated>' +1149      '<children>' +1150      '<identifier>x</identifier>' +1151      '<punctuation>,</punctuation>' +1152      '<identifier>y</identifier>' +1153      '<punctuation>,</punctuation>' +1154      '<identifier>z</identifier>' +1155      '</children>' +1156      '</punctuated>' +1157      '</children>' +1158      '</fenced>' +1159      '<punctuation>|</punctuation>' +1160      '<relseq>=' +1161      '<content>' +1162      '<relation>=</relation>' +1163      '</content>' +1164      '<children>' +1165      '<infixop>\u2062' +1166      '<content>' +1167      '<operator>\u2062</operator>' +1168      '</content>' +1169      '<children>' +1170      '<identifier>x</identifier>' +1171      '<identifier>y</identifier>' +1172      '</children>' +1173      '</infixop>' +1174      '<identifier>z</identifier>' +1175      '</children>' +1176      '</relseq>' +1177      '</children>' +1178      '</punctuated>' +1179      '</children>' +1180      '</fenced>');1181  // Disjunction of bracketed parallel statements.1182  this.executeTreeTest(1183      '<mrow><mo>[</mo><mi>a</mi><mo>‖</mo><mi>b</mi><mo>]</mo>' +1184      '<mo>|</mo><mo>[</mo><mi>x</mi><mo>‖</mo><mi>y</mi><mo>]</mo>' +1185      '</mrow>',1186      '<punctuated>' +1187      '<children>' +1188      '<fenced>' +1189      '<content>' +1190      '<fence>[</fence>' +1191      '<fence>]</fence>' +1192      '</content>' +1193      '<children>' +1194      '<punctuated>' +1195      '<children>' +1196      '<identifier>a</identifier>' +1197      '<punctuation>\u2016</punctuation>' +1198      '<identifier>b</identifier>' +1199      '</children>' +1200      '</punctuated>' +1201      '</children>' +1202      '</fenced>' +1203      '<punctuation>|</punctuation>' +1204      '<fenced>' +1205      '<content>' +1206      '<fence>[</fence>' +1207      '<fence>]</fence>' +1208      '</content>' +1209      '<children>' +1210      '<punctuated>' +1211      '<children>' +1212      '<identifier>x</identifier>' +1213      '<punctuation>\u2016</punctuation>' +1214      '<identifier>y</identifier>' +1215      '</children>' +1216      '</punctuated>' +1217      '</children>' +1218      '</fenced>' +1219      '</children>' +1220      '</punctuated>'1221  );1222  // Metric over the above.1223  this.executeTreeTest(1224      '<mrow><mo>‖</mo><mo>[</mo><mi>a</mi><mo>‖</mo>' +1225      '<mi>b</mi><mo>]</mo><mo>|</mo><mo>[</mo><mi>x</mi><mo>‖</mo>' +1226      '<mi>y</mi><mo>]</mo><mo>‖</mo></mrow>',1227      '<fenced>' +1228      '<content>' +1229      '<fence>\u2016</fence>' +1230      '<fence>\u2016</fence>' +1231      '</content>' +1232      '<children>' +1233      '<punctuated>' +1234      '<children>' +1235      '<fenced>' +1236      '<content>' +1237      '<fence>[</fence>' +1238      '<fence>]</fence>' +1239      '</content>' +1240      '<children>' +1241      '<punctuated>' +1242      '<children>' +1243      '<identifier>a</identifier>' +1244      '<punctuation>\u2016</punctuation>' +1245      '<identifier>b</identifier>' +1246      '</children>' +1247      '</punctuated>' +1248      '</children>' +1249      '</fenced>' +1250      '<punctuation>|</punctuation>' +1251      '<fenced>' +1252      '<content>' +1253      '<fence>[</fence>' +1254      '<fence>]</fence>' +1255      '</content>' +1256      '<children>' +1257      '<punctuated>' +1258      '<children>' +1259      '<identifier>x</identifier>' +1260      '<punctuation>\u2016</punctuation>' +1261      '<identifier>y</identifier>' +1262      '</children>' +1263      '</punctuated>' +1264      '</children>' +1265      '</fenced>' +1266      '</children>' +1267      '</punctuated>' +1268      '</children>' +1269      '</fenced>');1270  // Mix of metrics and bracketed expression and single bars.1271  this.executeTreeTest(1272      '<mrow><mo>‖</mo><mo>[</mo><mi>a</mi><mo>‖</mo><mi>b</mi>' +1273      '<mo>]</mo><mo>|</mo><mo>[</mo><mi>c</mi><mo>‖</mo>' +1274      '<mo>¦</mo><mi>d</mi><mo>]</mo><mo>‖</mo><mo>[</mo>' +1275      '<mi>u</mi><mo>‖</mo><mi>v</mi><mo>]</mo><mo>|</mo><mi>x</mi>' +1276      '<mo>‖</mo><mi>y</mi><mo>¦</mo><mi>z</mi></mrow>',1277      '<punctuated>' +1278      '<children>' +1279      '<infixop>\u2062' +1280      '<content>' +1281      '<operator>\u2062</operator>' +1282      '</content>' +1283      '<children>' +1284      '<fenced>' +1285      '<content>' +1286      '<fence>\u2016</fence>' +1287      '<fence>\u2016</fence>' +1288      '</content>' +1289      '<children>' +1290      '<punctuated>' +1291      '<children>' +1292      '<fenced>' +1293      '<content>' +1294      '<fence>[</fence>' +1295      '<fence>]</fence>' +1296      '</content>' +1297      '<children>' +1298      '<punctuated>' +1299      '<children>' +1300      '<identifier>a</identifier>' +1301      '<punctuation>\u2016</punctuation>' +1302      '<identifier>b</identifier>' +1303      '</children>' +1304      '</punctuated>' +1305      '</children>' +1306      '</fenced>' +1307      '<punctuation>|</punctuation>' +1308      '<fenced>' +1309      '<content>' +1310      '<fence>[</fence>' +1311      '<fence>]</fence>' +1312      '</content>' +1313      '<children>' +1314      '<punctuated>' +1315      '<children>' +1316      '<identifier>c</identifier>' +1317      '<punctuation>\u2016</punctuation>' +1318      '<punctuation>\u00A6</punctuation>' +1319      '<identifier>d</identifier>' +1320      '</children>' +1321      '</punctuated>' +1322      '</children>' +1323      '</fenced>' +1324      '</children>' +1325      '</punctuated>' +1326      '</children>' +1327      '</fenced>' +1328      '<fenced>' +1329      '<content>' +1330      '<fence>[</fence>' +1331      '<fence>]</fence>' +1332      '</content>' +1333      '<children>' +1334      '<punctuated>' +1335      '<children>' +1336      '<identifier>u</identifier>' +1337      '<punctuation>\u2016</punctuation>' +1338      '<identifier>v</identifier>' +1339      '</children>' +1340      '</punctuated>' +1341      '</children>' +1342      '</fenced>' +1343      '</children>' +1344      '</infixop>' +1345      '<punctuation>|</punctuation>' +1346      '<identifier>x</identifier>' +1347      '<punctuation>\u2016</punctuation>' +1348      '<identifier>y</identifier>' +1349      '<punctuation>\u00A6</punctuation>' +1350      '<identifier>z</identifier>' +1351      '</children>' +1352      '</punctuated>');1353  this.xpathBlacklist = [];1354};1355/**1356 * Pathological cases with only opening fences.1357 */1358cvox.SemanticTreeTest.prototype.testStreeOpeningFencesOnly = function() {1359  this.brief = true;1360  this.xpathBlacklist = ['descendant::punctuated/content'];1361  // Single.1362  this.executeTreeTest(1363      '<mrow><mo>[</mo></mrow>',1364      '<fence>[</fence>');1365  // Single right.1366  this.executeTreeTest(1367      '<mrow><mi>a</mi><mo>[</mo></mrow>',1368      '<punctuated>' +1369      '<children>' +1370      '<identifier>a</identifier>' +1371      '<punctuation>[</punctuation>' +1372      '</children>' +1373      '</punctuated>');1374  // Single middle.1375  this.executeTreeTest(1376      '<mrow><mi>a</mi><mo>[</mo><mi>b</mi></mrow>',1377      '<punctuated>' +1378      '<children>' +1379      '<identifier>a</identifier>' +1380      '<punctuation>[</punctuation>' +1381      '<identifier>b</identifier>' +1382      '</children>' +1383      '</punctuated>');1384  // Single left.1385  this.executeTreeTest(1386   '<mrow><mo>[</mo><mi>b</mi></mrow>',1387   '<punctuated>' +1388   '<children>' +1389   '<punctuation>[</punctuation>' +1390   '<identifier>b</identifier>' +1391   '</children>' +1392   '</punctuated>');1393  // Multiple.1394  this.executeTreeTest(1395      '<mrow><mi>a</mi><mo>[</mo><mi>b</mi><mi>c</mi><mo>(</mo><mi>d</mi>' +1396      '<mo>{</mo><mi>e</mi><mo>〈</mo><mi>f</mi></mrow>',1397      '<punctuated>' +1398      '<children>' +1399      '<identifier>a</identifier>' +1400      '<punctuation>[</punctuation>' +1401      '<infixop>\u2062' +1402      '<content>' +1403      '<operator>\u2062</operator>' +1404      '</content>' +1405      '<children>' +1406      '<identifier>b</identifier>' +1407      '<identifier>c</identifier>' +1408      '</children>' +1409      '</infixop>' +1410      '<punctuation>(</punctuation>' +1411      '<identifier>d</identifier>' +1412      '<punctuation>{</punctuation>' +1413      '<identifier>e</identifier>' +1414      '<punctuation>\u3008</punctuation>' +1415      '<identifier>f</identifier>' +1416      '</children>' +1417      '</punctuated>');1418  // Multiple plus inner fenced.1419  this.executeTreeTest(1420      '<mrow><mi>a</mi><mo>[</mo><mi>b</mi><mo>[</mo><mo>(</mo><mo>(</mo>' +1421      '<mi>c</mi><mo>)</mo><mi>d</mi><mo>{</mo><mi>e</mi><mo>〈</mo>' +1422      '<mi>f</mi></mrow>',1423      '<punctuated>' +1424      '<children>' +1425      '<identifier>a</identifier>' +1426      '<punctuation>[</punctuation>' +1427      '<identifier>b</identifier>' +1428      '<punctuation>[</punctuation>' +1429      '<punctuation>(</punctuation>' +1430      '<infixop>\u2062' +1431      '<content>' +1432      '<operator>\u2062</operator>' +1433      '</content>' +1434      '<children>' +1435      '<fenced>' +1436      '<content>' +1437      '<fence>(</fence>' +1438      '<fence>)</fence>' +1439      '</content>' +1440      '<children>' +1441      '<identifier>c</identifier>' +1442      '</children>' +1443      '</fenced>' +1444      '<identifier>d</identifier>' +1445      '</children>' +1446      '</infixop>' +1447      '<punctuation>{</punctuation>' +1448      '<identifier>e</identifier>' +1449      '<punctuation>\u3008</punctuation>' +1450      '<identifier>f</identifier>' +1451      '</children>' +1452      '</punctuated>');1453  this.xpathBlacklist = [];1454};1455/**1456 * Pathological cases with only closing fences.1457 */1458cvox.SemanticTreeTest.prototype.testStreeClosingFencesOnly = function() {1459  this.brief = true;1460  this.xpathBlacklist = ['descendant::punctuated/content'];1461  // Single.1462  this.executeTreeTest(1463      '<mrow><mo>]</mo></mrow>',1464      '<fence>]</fence>');1465  // Single right.1466  this.executeTreeTest(1467      '<mrow><mi>a</mi><mo>]</mo></mrow>',1468      '<punctuated>' +1469      '<children>' +1470      '<identifier>a</identifier>' +1471      '<punctuation>]</punctuation>' +1472      '</children>' +1473      '</punctuated>');1474  // Single middle.1475  this.executeTreeTest(1476      '<mrow><mi>a</mi><mo>]</mo><mi>b</mi></mrow>',1477      '<punctuated>' +1478      '<children>' +1479      '<identifier>a</identifier>' +1480      '<punctuation>]</punctuation>' +1481      '<identifier>b</identifier>' +1482      '</children>' +1483      '</punctuated>');1484  // Single left.1485  this.executeTreeTest(1486      '<mrow><mo>]</mo><mi>b</mi></mrow>',1487      '<punctuated>' +1488      '<children>' +1489      '<punctuation>]</punctuation>' +1490      '<identifier>b</identifier>' +1491      '</children>' +1492      '</punctuated>');1493  // Multiple.1494  this.executeTreeTest(1495      '<mrow><mi>a</mi><mo>]</mo><mi>b</mi><mi>c</mi><mo>)</mo><mi>d</mi>' +1496      '<mo>}</mo><mi>e</mi><mo>〉</mo><mi>f</mi></mrow>',1497      '<punctuated>' +1498      '<children>' +1499      '<identifier>a</identifier>' +1500      '<punctuation>]</punctuation>' +1501      '<infixop>\u2062' +1502      '<content>' +1503      '<operator>\u2062</operator>' +1504      '</content>' +1505      '<children>' +1506      '<identifier>b</identifier>' +1507      '<identifier>c</identifier>' +1508      '</children>' +1509      '</infixop>' +1510      '<punctuation>)</punctuation>' +1511      '<identifier>d</identifier>' +1512      '<punctuation>}</punctuation>' +1513      '<identifier>e</identifier>' +1514      '<punctuation>\u3009</punctuation>' +1515      '<identifier>f</identifier>' +1516      '</children>' +1517      '</punctuated>');1518  // Multiple plus inner fenced.1519  this.executeTreeTest(1520      '<mrow><mi>a</mi><mo>]</mo><mi>b</mi><mo>]</mo><mo>(</mo><mi>c</mi>' +1521      '<mo>)</mo><mo>)</mo><mi>d</mi><mo>}</mo><mi>e</mi><mo>〉</mo>' +1522      '<mi>f</mi></mrow>',1523      '<punctuated>' +1524      '<children>' +1525      '<identifier>a</identifier>' +1526      '<punctuation>]</punctuation>' +1527      '<identifier>b</identifier>' +1528      '<punctuation>]</punctuation>' +1529      '<fenced>' +1530      '<content>' +1531      '<fence>(</fence>' +1532      '<fence>)</fence>' +1533      '</content>' +1534      '<children>' +1535      '<identifier>c</identifier>' +1536      '</children>' +1537      '</fenced>' +1538      '<punctuation>)</punctuation>' +1539      '<identifier>d</identifier>' +1540      '<punctuation>}</punctuation>' +1541      '<identifier>e</identifier>' +1542      '<punctuation>\u3009</punctuation>' +1543      '<identifier>f</identifier>' +1544      '</children>' +1545      '</punctuated>');1546  this.xpathBlacklist = [];1547};1548/**1549 * Pathological cases with only neutral fences.1550 */1551cvox.SemanticTreeTest.prototype.testStreeNeutralFencesOnly = function() {1552  this.brief = true;1553  this.xpathBlacklist = ['descendant::punctuated/content'];1554  // Single.1555  this.executeTreeTest(1556      '<mrow><mo>|</mo></mrow>',1557      '<fence>|</fence>');1558  // Single right.1559  this.executeTreeTest(1560      '<mrow><mi>a</mi><mo>|</mo></mrow>',1561      '<punctuated>' +1562      '<children>' +1563      '<identifier>a</identifier>' +1564      '<punctuation>|</punctuation>' +1565      '</children>' +1566      '</punctuated>');1567  // Single middle.1568  this.executeTreeTest(1569      '<mrow><mi>a</mi><mo>|</mo><mi>b</mi></mrow>',1570      '<punctuated>' +1571      '<children>' +1572      '<identifier>a</identifier>' +1573      '<punctuation>|</punctuation>' +1574      '<identifier>b</identifier>' +1575      '</children>' +1576      '</punctuated>');1577  // Single left.1578  this.executeTreeTest(1579      '<mrow><mo>|</mo><mi>b</mi></mrow>',1580      '<punctuated>' +1581      '<children>' +1582      '<punctuation>|</punctuation>' +1583      '<identifier>b</identifier>' +1584      '</children>' +1585      '</punctuated>');1586  // Two different bars.1587  this.executeTreeTest(1588      '<mrow><mi>a</mi><mo>|</mo><mi>b</mi><mo>¦</mo><mi>c</mi></mrow>',1589      '<punctuated>' +1590      '<children>' +1591      '<identifier>a</identifier>' +1592      '<punctuation>|</punctuation>' +1593      '<identifier>b</identifier>' +1594      '<punctuation>\u00A6</punctuation>' +1595      '<identifier>c</identifier>' +1596      '</children>' +1597      '</punctuated>');1598  // Three different bars.1599  this.executeTreeTest(1600      '<mrow><mi>a</mi><mo>‖</mo><mi>b</mi><mo>|</mo><mi>c</mi>' +1601      '<mo>¦</mo><mi>d</mi></mrow>',1602      '<punctuated>' +1603      '<children>' +1604      '<identifier>a</identifier>' +1605      '<punctuation>\u2016</punctuation>' +1606      '<identifier>b</identifier>' +1607      '<punctuation>|</punctuation>' +1608      '<identifier>c</identifier>' +1609      '<punctuation>\u00A6</punctuation>' +1610      '<identifier>d</identifier>' +1611      '</children>' +1612      '</punctuated>');1613  // Multiple plus inner fenced.1614  this.executeTreeTest(1615      '<mrow><mo>‖</mo><mo>[</mo><mi>a</mi><mo>‖</mo><mi>b</mi>' +1616      '<mo>]</mo><mo>‖</mo><mo>|</mo><mi>x</mi><mo>‖</mo>' +1617      '<mi>y</mi><mo>¦</mo><mi>z</mi></mrow>',1618      '<punctuated>' +1619      '<children>' +1620      '<fenced>' +1621      '<content>' +1622      '<fence>\u2016</fence>' +1623      '<fence>\u2016</fence>' +1624      '</content>' +1625      '<children>' +1626      '<fenced>' +1627      '<content>' +1628      '<fence>[</fence>' +1629      '<fence>]</fence>' +1630      '</content>' +1631      '<children>' +1632      '<punctuated>' +1633      '<children>' +1634      '<identifier>a</identifier>' +1635      '<punctuation>\u2016</punctuation>' +1636      '<identifier>b</identifier>' +1637      '</children>' +1638      '</punctuated>' +1639      '</children>' +1640      '</fenced>' +1641      '</children>' +1642      '</fenced>' +1643      '<punctuation>|</punctuation>' +1644      '<identifier>x</identifier>' +1645      '<punctuation>\u2016</punctuation>' +1646      '<identifier>y</identifier>' +1647      '<punctuation>\u00A6</punctuation>' +1648      '<identifier>z</identifier>' +1649      '</children>' +1650      '</punctuated>');1651  this.xpathBlacklist = [];1652};1653/**1654 * Pathological cases with mixed fences.1655 */1656cvox.SemanticTreeTest.prototype.testStreeMixedUnmatchedFences = function() {1657  this.brief = true;1658  this.xpathBlacklist = ['descendant::punctuated/content'];1659  // Close, neutral, open.1660  this.executeTreeTest(1661      '<mrow><mo>]</mo><mo>‖</mo><mi>b</mi><mo>|</mo><mi>c</mi>' +1662      '<mo>(</mo></mrow>',1663      '<punctuated>' +1664      '<children>' +1665      '<punctuation>]</punctuation>' +1666      '<punctuation>\u2016</punctuation>' +1667      '<identifier>b</identifier>' +1668      '<punctuation>|</punctuation>' +1669      '<identifier>c</identifier>' +1670      '<punctuation>(</punctuation>' +1671      '</children>' +1672      '</punctuated>');1673  // Neutrals and close.1674  this.executeTreeTest(1675      '<mrow><mi>a</mi><mo>‖</mo><mi>b</mi><mo>|</mo><mi>c</mi>' +1676      '<mo>¦</mo><mi>d</mi><mo>]</mo><mi>e</mi></mrow>',1677      '<punctuated>' +1678      '<children>' +1679      '<identifier>a</identifier>' +1680      '<punctuation>\u2016</punctuation>' +1681      '<identifier>b</identifier>' +1682      '<punctuation>|</punctuation>' +1683      '<identifier>c</identifier>' +1684      '<punctuation>\u00A6</punctuation>' +1685      '<identifier>d</identifier>' +1686      '<punctuation>]</punctuation>' +1687      '<identifier>e</identifier>' +1688      '</children>' +1689      '</punctuated>');1690  // Neutrals and open.1691  this.executeTreeTest(1692      '<mrow><mo>[</mo><mi>a</mi><mo>‖</mo><mi>b</mi><mo>|</mo>' +1693      '<mi>c</mi><mo>¦</mo><mi>d</mi></mrow>',1694      '<punctuated>' +1695      '<children>' +1696      '<punctuation>[</punctuation>' +1697      '<identifier>a</identifier>' +1698      '<punctuation>\u2016</punctuation>' +1699      '<identifier>b</identifier>' +1700      '<punctuation>|</punctuation>' +1701      '<identifier>c</identifier>' +1702      '<punctuation>\u00A6</punctuation>' +1703      '<identifier>d</identifier>' +1704      '</children>' +1705      '</punctuated>');1706  // Multiple fences, fenced and operations1707  this.executeTreeTest(1708      '<mrow><mo>‖</mo><mo>[</mo><mi>a</mi><mo>‖</mo><mi>b</mi>' +1709      '<mo>]</mo><mo>|</mo><mo>[</mo><mi>c</mi><mo>‖</mo>' +1710      '<mo>¦</mo><mi>d</mi><mo>]</mo><mo>‖</mo><mo>|</mo>' +1711      '<mi>x</mi><mo>‖</mo><mi>y</mi><mo>¦</mo><mi>z</mi>' +1712      '<mo>]</mo></mrow>',1713      '<punctuated>' +1714      '<children>' +1715      '<fenced>' +1716      '<content>' +1717      '<fence>\u2016</fence>' +1718      '<fence>\u2016</fence>' +1719      '</content>' +1720      '<children>' +1721      '<punctuated>' +1722      '<children>' +1723      '<fenced>' +1724      '<content>' +1725      '<fence>[</fence>' +1726      '<fence>]</fence>' +1727      '</content>' +1728      '<children>' +1729      '<punctuated>' +1730      '<children>' +1731      '<identifier>a</identifier>' +1732      '<punctuation>\u2016</punctuation>' +1733      '<identifier>b</identifier>' +1734      '</children>' +1735      '</punctuated>' +1736      '</children>' +1737      '</fenced>' +1738      '<punctuation>|</punctuation>' +1739      '<fenced>' +1740      '<content>' +1741      '<fence>[</fence>' +1742      '<fence>]</fence>' +1743      '</content>' +1744      '<children>' +1745      '<punctuated>' +1746      '<children>' +1747      '<identifier>c</identifier>' +1748      '<punctuation>\u2016</punctuation>' +1749      '<punctuation>\u00A6</punctuation>' +1750      '<identifier>d</identifier>' +1751      '</children>' +1752      '</punctuated>' +1753      '</children>' +1754      '</fenced>' +1755      '</children>' +1756      '</punctuated>' +1757      '</children>' +1758      '</fenced>' +1759      '<punctuation>|</punctuation>' +1760      '<identifier>x</identifier>' +1761      '<punctuation>\u2016</punctuation>' +1762      '<identifier>y</identifier>' +1763      '<punctuation>\u00A6</punctuation>' +1764      '<identifier>z</identifier>' +1765      '<punctuation>]</punctuation>' +1766      '</children>' +1767      '</punctuated>');1768  // Multiple fences, fenced and operations1769  this.executeTreeTest(1770      '<mrow><mo>‖</mo><mo>]</mo><mo>¦</mo><mo>‖</mo>' +1771      '<mo>[</mo><mo>|</mo><mo>[</mo><mi>a</mi><mo>‖</mo><mi>b</mi>' +1772      '<mo>]</mo><mo>‖</mo><mo>|</mo><mi>[</mi><mo>‖</mo>' +1773      '<mi>y</mi><mo>¦</mo><mi>z</mi></mrow>',1774      '<punctuated>' +1775      '<children>' +1776      '<fenced>' +1777      '<content>' +1778      '<fence>\u2016</fence>' +1779      '<fence>\u2016</fence>' +1780      '</content>' +1781      '<children>' +1782      '<punctuated>' +1783      '<children>' +1784      '<punctuation>]</punctuation>' +1785      '<punctuation>\u00A6</punctuation>' +1786      '</children>' +1787      '</punctuated>' +1788      '</children>' +1789      '</fenced>' +1790      '<punctuation>[</punctuation>' +1791      '<fenced>' +1792      '<content>' +1793      '<fence>|</fence>' +1794      '<fence>|</fence>' +1795      '</content>' +1796      '<children>' +1797      '<punctuated>' +1798      '<children>' +1799      '<fenced>' +1800      '<content>' +1801      '<fence>[</fence>' +1802      '<fence>]</fence>' +1803      '</content>' +1804      '<children>' +1805      '<punctuated>' +1806      '<children>' +1807      '<identifier>a</identifier>' +1808      '<punctuation>\u2016</punctuation>' +1809      '<identifier>b</identifier>' +1810      '</children>' +1811      '</punctuated>' +1812      '</children>' +1813      '</fenced>' +1814      '<punctuation>\u2016</punctuation>' +1815      '</children>' +1816      '</punctuated>' +1817      '</children>' +1818      '</fenced>' +1819      '<punctuation>[</punctuation>' +1820      '<punctuation>\u2016</punctuation>' +1821      '<identifier>y</identifier>' +1822      '<punctuation>\u00A6</punctuation>' +1823      '<identifier>z</identifier>' +1824      '</children>' +1825      '</punctuated>');1826  // Multiple fences, fenced and operations1827  this.executeTreeTest(1828      '<mrow><mo>‖</mo><mo>[</mo><mi>a</mi><mo>¦</mo>' +1829      '<mo>‖</mo><mo>[</mo><mo>+</mo><mo>[</mo><mi>b</mi>' +1830      '<mo>‖</mo><mi>c</mi><mo>]</mo><mo>+</mo><mo>‖</mo>' +1831      '<mo>|</mo><mi>d</mi><mo>+</mo><mi>e</mi><mi>[</mi><mo>‖</mo>' +1832      '<mi>y</mi><mo>¦</mo><mo>+</mo><mi>z</mi></mrow>',1833      '<punctuated>' +1834      '<children>' +1835      '<punctuation>\u2016</punctuation>' +1836      '<punctuation>[</punctuation>' +1837      '<identifier>a</identifier>' +1838      '<punctuation>\u00A6</punctuation>' +1839      '<punctuation>\u2016</punctuation>' +1840      '<punctuation>[</punctuation>' +1841      '<postfixop>+' +1842      '<content>' +1843      '<operator>+</operator>' +1844      '</content>' +1845      '<children>' +1846      '<prefixop>+' +1847      '<content>' +1848      '<operator>+</operator>' +1849      '</content>' +1850      '<children>' +1851      '<fenced>' +1852      '<content>' +1853      '<fence>[</fence>' +1854      '<fence>]</fence>' +1855      '</content>' +1856      '<children>' +1857      '<punctuated>' +1858      '<children>' +1859      '<identifier>b</identifier>' +1860      '<punctuation>\u2016</punctuation>' +1861      '<identifier>c</identifier>' +1862      '</children>' +1863      '</punctuated>' +1864      '</children>' +1865      '</fenced>' +1866      '</children>' +1867      '</prefixop>' +1868      '</children>' +1869      '</postfixop>' +1870      '<punctuation>\u2016</punctuation>' +1871      '<punctuation>|</punctuation>' +1872      '<infixop>+' +1873      '<content>' +1874      '<operator>+</operator>' +1875      '</content>' +1876      '<children>' +1877      '<identifier>d</identifier>' +1878      '<identifier>e</identifier>' +1879      '</children>' +1880      '</infixop>' +1881      '<punctuation>[</punctuation>' +1882      '<punctuation>\u2016</punctuation>' +1883      '<identifier>y</identifier>' +1884      '<punctuation>\u00A6</punctuation>' +1885      '<prefixop>+' +1886      '<content>' +1887      '<operator>+</operator>' +1888      '</content>' +1889      '<children>' +1890      '<identifier>z</identifier>' +1891      '</children>' +1892      '</prefixop>' +1893      '</children>' +1894      '</punctuated>');1895  this.xpathBlacklist = [];1896};1897/**1898 * Simple function applications1899 */1900cvox.SemanticTreeTest.prototype.testStreeSimpleFuncsSingle = function() {1901  this.brief = true;1902  this.executeTreeTest(1903      '<mrow><mi>f</mi></mrow>',1904      '<identifier>f</identifier>');1905  this.executeTreeTest(1906      '<mrow><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow>',1907      '<appl>' +1908      '<content>' +1909      '<punctuation>\u2061</punctuation>' +1910      '</content>' +1911      '<children>' +1912      '<identifier>f</identifier>' +1913      '<fenced>' +1914      '<content>' +1915      '<fence>(</fence>' +1916      '<fence>)</fence>' +1917      '</content>' +1918      '<children>' +1919      '<identifier>x</identifier>' +1920      '</children>' +1921      '</fenced>' +1922      '</children>' +1923      '</appl>');1924  this.executeTreeTest(1925      '<mrow><mi>f</mi><mo>(</mo><mi>x</mi><mi>y</mi><mo>)</mo></mrow>',1926      '<appl>' +1927      '<content>' +1928      '<punctuation>\u2061</punctuation>' +1929      '</content>' +1930      '<children>' +1931      '<identifier>f</identifier>' +1932      '<fenced>' +1933      '<content>' +1934      '<fence>(</fence>' +1935      '<fence>)</fence>' +1936      '</content>' +1937      '<children>' +1938      '<infixop>\u2062' +1939      '<content>' +1940      '<operator>\u2062</operator>' +1941      '</content>' +1942      '<children>' +1943      '<identifier>x</identifier>' +1944      '<identifier>y</identifier>' +1945      '</children>' +1946      '</infixop>' +1947      '</children>' +1948      '</fenced>' +1949      '</children>' +1950      '</appl>');1951  this.executeTreeTest(1952      '<mrow><mi>f</mi><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi>' +1953      '<mo>,</mo><mi>z</mi><mo>)</mo></mrow>',1954      '<appl>' +1955      '<content>' +1956      '<punctuation>\u2061</punctuation>' +1957      '</content>' +1958      '<children>' +1959      '<identifier>f</identifier>' +1960      '<fenced>' +1961      '<content>' +1962      '<fence>(</fence>' +1963      '<fence>)</fence>' +1964      '</content>' +1965      '<children>' +1966      '<punctuated>' +1967      '<content>' +1968      '<punctuation>,</punctuation>' +1969      '<punctuation>,</punctuation>' +1970      '</content>' +1971      '<children>' +1972      '<identifier>x</identifier>' +1973      '<punctuation>,</punctuation>' +1974      '<identifier>y</identifier>' +1975      '<punctuation>,</punctuation>' +1976      '<identifier>z</identifier>' +1977      '</children>' +1978      '</punctuated>' +1979      '</children>' +1980      '</fenced>' +1981      '</children>' +1982      '</appl>');1983  this.executeTreeTest(1984      '<mrow><mi>f</mi><mo>(</mo><msup><mi>x</mi><mn>2</mn></msup>' +1985      '<mo>)</mo></mrow>',1986      '<appl>' +1987      '<content>' +1988      '<punctuation>\u2061</punctuation>' +1989      '</content>' +1990      '<children>' +1991      '<identifier>f</identifier>' +1992      '<fenced>' +1993      '<content>' +1994      '<fence>(</fence>' +1995      '<fence>)</fence>' +1996      '</content>' +1997      '<children>' +1998      '<superscript>' +1999      '<children>' +2000      '<identifier>x</identifier>' +2001      '<number>2</number>' +2002      '</children>' +2003      '</superscript>' +2004      '</children>' +2005      '</fenced>' +2006      '</children>' +2007      '</appl>');2008  this.executeTreeTest(2009      '<mrow><mi>f</mi><mo>(</mo><msub><mi>x</mi><mn>2</mn></msub>' +2010      '<mo>)</mo></mrow>',2011      '<appl>' +2012      '<content>' +2013      '<punctuation>\u2061</punctuation>' +2014      '</content>' +2015      '<children>' +2016      '<identifier>f</identifier>' +2017      '<fenced>' +2018      '<content>' +2019      '<fence>(</fence>' +2020      '<fence>)</fence>' +2021      '</content>' +2022      '<children>' +2023      '<subscript>' +2024      '<children>' +2025      '<identifier>x</identifier>' +2026      '<number>2</number>' +2027      '</children>' +2028      '</subscript>' +2029      '</children>' +2030      '</fenced>' +2031      '</children>' +2032      '</appl>');2033  this.executeTreeTest(2034      '<mrow><mi>f</mi><mo>(</mo><msubsup><mi>x</mi><mn>2</mn>' +2035      '<mn>1</mn></msubsup><mo>)</mo></mrow>',2036      '<appl>' +2037      '<content>' +2038      '<punctuation>\u2061</punctuation>' +2039      '</content>' +2040      '<children>' +2041      '<identifier>f</identifier>' +2042      '<fenced>' +2043      '<content>' +2044      '<fence>(</fence>' +2045      '<fence>)</fence>' +2046      '</content>' +2047      '<children>' +2048      '<superscript>' +2049      '<children>' +2050      '<subscript>' +2051      '<children>' +2052      '<identifier>x</identifier>' +2053      '<number>2</number>' +2054      '</children>' +2055      '</subscript>' +2056      '<number>1</number>' +2057      '</children>' +2058      '</superscript>' +2059      '</children>' +2060      '</fenced>' +2061      '</children>' +2062      '</appl>');2063  this.executeTreeTest(2064      '<mrow><mi>f</mi><mo>(</mo><mover><mi>x</mi><mn>2</mn></mover>' +2065      '<mo>)</mo></mrow>',2066      '<appl>' +2067      '<content>' +2068      '<punctuation>\u2061</punctuation>' +2069      '</content>' +2070      '<children>' +2071      '<identifier>f</identifier>' +2072      '<fenced>' +2073      '<content>' +2074      '<fence>(</fence>' +2075      '<fence>)</fence>' +2076      '</content>' +2077      '<children>' +2078      '<overscore>' +2079      '<children>' +2080      '<identifier>x</identifier>' +2081      '<number>2</number>' +2082      '</children>' +2083      '</overscore>' +2084      '</children>' +2085      '</fenced>' +2086      '</children>' +2087      '</appl>');2088  this.executeTreeTest(2089      '<mrow><mi>f</mi><mo>(</mo><munder><mi>x</mi><mn>2</mn></munder>' +2090      '<mo>)</mo></mrow>',2091      '<appl>' +2092      '<content>' +2093      '<punctuation>\u2061</punctuation>' +2094      '</content>' +2095      '<children>' +2096      '<identifier>f</identifier>' +2097      '<fenced>' +2098      '<content>' +2099      '<fence>(</fence>' +2100      '<fence>)</fence>' +2101      '</content>' +2102      '<children>' +2103      '<underscore>' +2104      '<children>' +2105      '<identifier>x</identifier>' +2106      '<number>2</number>' +2107      '</children>' +2108      '</underscore>' +2109      '</children>' +2110      '</fenced>' +2111      '</children>' +2112      '</appl>');2113  this.executeTreeTest(2114      '<mrow><mi>f</mi><mo>(</mo><munderover><mi>x</mi><mn>2</mn>' +2115      '<mn>1</mn></munderover><mo>)</mo></mrow>',2116      '<appl>' +2117      '<content>' +2118      '<punctuation>\u2061</punctuation>' +2119      '</content>' +2120      '<children>' +2121      '<identifier>f</identifier>' +2122      '<fenced>' +2123      '<content>' +2124      '<fence>(</fence>' +2125      '<fence>)</fence>' +2126      '</content>' +2127      '<children>' +2128      '<overscore>' +2129      '<children>' +2130      '<underscore>' +2131      '<children>' +2132      '<identifier>x</identifier>' +2133      '<number>2</number>' +2134      '</children>' +2135      '</underscore>' +2136      '<number>1</number>' +2137      '</children>' +2138      '</overscore>' +2139      '</children>' +2140      '</fenced>' +2141      '</children>' +2142      '</appl>');2143  this.executeTreeTest(2144      '<mrow><mi>f</mi><mo>(</mo><mfrac><mn>1</mn><mn>2</mn></mfrac>' +2145      '<mo>)</mo></mrow>',2146      '<appl>' +2147      '<content>' +2148      '<punctuation>\u2061</punctuation>' +2149      '</content>' +2150      '<children>' +2151      '<identifier>f</identifier>' +2152      '<fenced>' +2153      '<content>' +2154      '<fence>(</fence>' +2155      '<fence>)</fence>' +2156      '</content>' +2157      '<children>' +2158      '<fraction>' +2159      '<children>' +2160      '<number>1</number>' +2161      '<number>2</number>' +2162      '</children>' +2163      '</fraction>' +2164      '</children>' +2165      '</fenced>' +2166      '</children>' +2167      '</appl>');2168  this.executeTreeTest(2169      '<mrow><mi>f</mi><mo>(</mo><mi>x</mi><mo>+</mo><mi>y</mi>' +2170      '<mo>)</mo></mrow>',2171      '<infixop>\u2062' +2172      '<content>' +2173      '<operator>\u2062</operator>' +2174      '</content>' +2175      '<children>' +2176      '<identifier>f</identifier>' +2177      '<fenced>' +2178      '<content>' +2179      '<fence>(</fence>' +2180      '<fence>)</fence>' +2181      '</content>' +2182      '<children>' +2183      '<infixop>+' +2184      '<content>' +2185      '<operator>+</operator>' +2186      '</content>' +2187      '<children>' +2188      '<identifier>x</identifier>' +2189      '<identifier>y</identifier>' +2190      '</children>' +2191      '</infixop>' +2192      '</children>' +2193      '</fenced>' +2194      '</children>' +2195      '</infixop>');2196};2197/**2198 * Simple functions with surrounding operators.2199 */2200cvox.SemanticTreeTest.prototype.testStreeSimpleFuncsWithOps = function() {2201  this.brief = true;2202  this.executeTreeTest(2203      '<mrow><mn>1</mn><mo>+</mo><mi>f</mi><mo>(</mo><mi>x</mi>' +2204      '<mo>)</mo></mrow>',2205      '<infixop>+' +2206      '<content>' +2207      '<operator>+</operator>' +2208      '</content>' +2209      '<children>' +2210      '<number>1</number>' +2211      '<appl>' +2212      '<content>' +2213      '<punctuation>\u2061</punctuation>' +2214      '</content>' +2215      '<children>' +2216      '<identifier>f</identifier>' +2217      '<fenced>' +2218      '<content>' +2219      '<fence>(</fence>' +2220      '<fence>)</fence>' +2221      '</content>' +2222      '<children>' +2223      '<identifier>x</identifier>' +2224      '</children>' +2225      '</fenced>' +2226      '</children>' +2227      '</appl>' +2228      '</children>' +2229      '</infixop>');2230  this.executeTreeTest(2231      '<mrow><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo><mo>+</mo>' +2232      '<mn>2</mn></mrow>',2233      '<infixop>+' +2234      '<content>' +2235      '<operator>+</operator>' +2236      '</content>' +2237      '<children>' +2238      '<appl>' +2239      '<content>' +2240      '<punctuation>\u2061</punctuation>' +2241      '</content>' +2242      '<children>' +2243      '<identifier>f</identifier>' +2244      '<fenced>' +2245      '<content>' +2246      '<fence>(</fence>' +2247      '<fence>)</fence>' +2248      '</content>' +2249      '<children>' +2250      '<identifier>x</identifier>' +2251      '</children>' +2252      '</fenced>' +2253      '</children>' +2254      '</appl>' +2255      '<number>2</number>' +2256      '</children>' +2257      '</infixop>');2258  this.executeTreeTest(2259      '<mrow><mn>1</mn><mo>+</mo><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo>' +2260      '<mo>+</mo><mn>2</mn></mrow>',2261      '<infixop>+' +2262      '<content>' +2263      '<operator>+</operator>' +2264      '<operator>+</operator>' +2265      '</content>' +2266      '<children>' +2267      '<number>1</number>' +2268      '<appl>' +2269      '<content>' +2270      '<punctuation>\u2061</punctuation>' +2271      '</content>' +2272      '<children>' +2273      '<identifier>f</identifier>' +2274      '<fenced>' +2275      '<content>' +2276      '<fence>(</fence>' +2277      '<fence>)</fence>' +2278      '</content>' +2279      '<children>' +2280      '<identifier>x</identifier>' +2281      '</children>' +2282      '</fenced>' +2283      '</children>' +2284      '</appl>' +2285      '<number>2</number>' +2286      '</children>' +2287      '</infixop>');2288  this.executeTreeTest(2289      '<mrow><mo>a</mo><mo>+</mo><mi>f</mi><mo>(</mo><mi>x</mi>' +2290      '<mo>)</mo></mrow>',2291      '<infixop>+' +2292      '<content>' +2293      '<operator>+</operator>' +2294      '</content>' +2295      '<children>' +2296      '<identifier>a</identifier>' +2297      '<appl>' +2298      '<content>' +2299      '<punctuation>\u2061</punctuation>' +2300      '</content>' +2301      '<children>' +2302      '<identifier>f</identifier>' +2303      '<fenced>' +2304      '<content>' +2305      '<fence>(</fence>' +2306      '<fence>)</fence>' +2307      '</content>' +2308      '<children>' +2309      '<identifier>x</identifier>' +2310      '</children>' +2311      '</fenced>' +2312      '</children>' +2313      '</appl>' +2314      '</children>' +2315      '</infixop>');2316  this.executeTreeTest(2317      '<mrow><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo><mo>+</mo>' +2318      '<mo>b</mo></mrow>',2319      '<infixop>+' +2320      '<content>' +2321      '<operator>+</operator>' +2322      '</content>' +2323      '<children>' +2324      '<appl>' +2325      '<content>' +2326      '<punctuation>\u2061</punctuation>' +2327      '</content>' +2328      '<children>' +2329      '<identifier>f</identifier>' +2330      '<fenced>' +2331      '<content>' +2332      '<fence>(</fence>' +2333      '<fence>)</fence>' +2334      '</content>' +2335      '<children>' +2336      '<identifier>x</identifier>' +2337      '</children>' +2338      '</fenced>' +2339      '</children>' +2340      '</appl>' +2341      '<identifier>b</identifier>' +2342      '</children>' +2343      '</infixop>');2344  this.executeTreeTest(2345      '<mrow><mo>a</mo><mo>+</mo><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo>' +2346      '<mo>+</mo><mo>b</mo></mrow>',2347      '<infixop>+' +2348      '<content>' +2349      '<operator>+</operator>' +2350      '<operator>+</operator>' +2351      '</content>' +2352      '<children>' +2353      '<identifier>a</identifier>' +2354      '<appl>' +2355      '<content>' +2356      '<punctuation>\u2061</punctuation>' +2357      '</content>' +2358      '<children>' +2359      '<identifier>f</identifier>' +2360      '<fenced>' +2361      '<content>' +2362      '<fence>(</fence>' +2363      '<fence>)</fence>' +2364      '</content>' +2365      '<children>' +2366      '<identifier>x</identifier>' +2367      '</children>' +2368      '</fenced>' +2369      '</children>' +2370      '</appl>' +2371      '<identifier>b</identifier>' +2372      '</children>' +2373      '</infixop>');2374  this.executeTreeTest(2375      '<mrow><mo>a</mo><mo>=</mo><mi>f</mi><mo>(</mo><mi>x</mi>' +2376      '<mo>)</mo></mrow>',2377      '<relseq>=' +2378      '<content>' +2379      '<relation>=</relation>' +2380      '</content>' +2381      '<children>' +2382      '<identifier>a</identifier>' +2383      '<appl>' +2384      '<content>' +2385      '<punctuation>\u2061</punctuation>' +2386      '</content>' +2387      '<children>' +2388      '<identifier>f</identifier>' +2389      '<fenced>' +2390      '<content>' +2391      '<fence>(</fence>' +2392      '<fence>)</fence>' +2393      '</content>' +2394      '<children>' +2395      '<identifier>x</identifier>' +2396      '</children>' +2397      '</fenced>' +2398      '</children>' +2399      '</appl>' +2400      '</children>' +2401      '</relseq>');2402  this.executeTreeTest(2403      '<mrow><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo><mo>=</mo>' +2404      '<mo>b</mo></mrow>',2405      '<relseq>=' +2406      '<content>' +2407      '<relation>=</relation>' +2408      '</content>' +2409      '<children>' +2410      '<appl>' +2411      '<content>' +2412      '<punctuation>\u2061</punctuation>' +2413      '</content>' +2414      '<children>' +2415      '<identifier>f</identifier>' +2416      '<fenced>' +2417      '<content>' +2418      '<fence>(</fence>' +2419      '<fence>)</fence>' +2420      '</content>' +2421      '<children>' +2422      '<identifier>x</identifier>' +2423      '</children>' +2424      '</fenced>' +2425      '</children>' +2426      '</appl>' +2427      '<identifier>b</identifier>' +2428      '</children>' +2429      '</relseq>');2430  this.executeTreeTest(2431      '<mrow><mo>a</mo><mo>=</mo><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo>' +2432      '<mo>=</mo><mo>b</mo></mrow>',2433      '<relseq>=' +2434      '<content>' +2435      '<relation>=</relation>' +2436      '<relation>=</relation>' +2437      '</content>' +2438      '<children>' +2439      '<identifier>a</identifier>' +2440      '<appl>' +2441      '<content>' +2442      '<punctuation>\u2061</punctuation>' +2443      '</content>' +2444      '<children>' +2445      '<identifier>f</identifier>' +2446      '<fenced>' +2447      '<content>' +2448      '<fence>(</fence>' +2449      '<fence>)</fence>' +2450      '</content>' +2451      '<children>' +2452      '<identifier>x</identifier>' +2453      '</children>' +2454      '</fenced>' +2455      '</children>' +2456      '</appl>' +2457      '<identifier>b</identifier>' +2458      '</children>' +2459      '</relseq>');2460};2461/**2462 * Multiple simple functions.2463 */2464cvox.SemanticTreeTest.prototype.testStreeSimpleFuncsMulti = function() {2465  this.brief = true;2466  this.executeTreeTest(2467      '<mrow><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo><mo>+</mo><mi>g</mi>' +2468      '<mo>(</mo><mi>x</mi><mo>)</mo></mrow>',2469      '<infixop>+' +2470      '<content>' +2471      '<operator>+</operator>' +2472      '</content>' +2473      '<children>' +2474      '<appl>' +2475      '<content>' +2476      '<punctuation>\u2061</punctuation>' +2477      '</content>' +2478      '<children>' +2479      '<identifier>f</identifier>' +2480      '<fenced>' +2481      '<content>' +2482      '<fence>(</fence>' +2483      '<fence>)</fence>' +2484      '</content>' +2485      '<children>' +2486      '<identifier>x</identifier>' +2487      '</children>' +2488      '</fenced>' +2489      '</children>' +2490      '</appl>' +2491      '<appl>' +2492      '<content>' +2493      '<punctuation>\u2061</punctuation>' +2494      '</content>' +2495      '<children>' +2496      '<identifier>g</identifier>' +2497      '<fenced>' +2498      '<content>' +2499      '<fence>(</fence>' +2500      '<fence>)</fence>' +2501      '</content>' +2502      '<children>' +2503      '<identifier>x</identifier>' +2504      '</children>' +2505      '</fenced>' +2506      '</children>' +2507      '</appl>' +2508      '</children>' +2509      '</infixop>');2510  this.executeTreeTest(2511      '<mrow><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo><mo>+</mo><mi>g</mi>' +2512      '<mo>(</mo><mi>x</mi><mo>)</mo><mo>=</mo><mi>h</mi><mo>(</mo>' +2513      '<mi>x</mi><mo>)</mo></mrow>',2514      '<relseq>=' +2515      '<content>' +2516      '<relation>=</relation>' +2517      '</content>' +2518      '<children>' +2519      '<infixop>+' +2520      '<content>' +2521      '<operator>+</operator>' +2522      '</content>' +2523      '<children>' +2524      '<appl>' +2525      '<content>' +2526      '<punctuation>\u2061</punctuation>' +2527      '</content>' +2528      '<children>' +2529      '<identifier>f</identifier>' +2530      '<fenced>' +2531      '<content>' +2532      '<fence>(</fence>' +2533      '<fence>)</fence>' +2534      '</content>' +2535      '<children>' +2536      '<identifier>x</identifier>' +2537      '</children>' +2538      '</fenced>' +2539      '</children>' +2540      '</appl>' +2541      '<appl>' +2542      '<content>' +2543      '<punctuation>\u2061</punctuation>' +2544      '</content>' +2545      '<children>' +2546      '<identifier>g</identifier>' +2547      '<fenced>' +2548      '<content>' +2549      '<fence>(</fence>' +2550      '<fence>)</fence>' +2551      '</content>' +2552      '<children>' +2553      '<identifier>x</identifier>' +2554      '</children>' +2555      '</fenced>' +2556      '</children>' +2557      '</appl>' +2558      '</children>' +2559      '</infixop>' +2560      '<appl>' +2561      '<content>' +2562      '<punctuation>\u2061</punctuation>' +2563      '</content>' +2564      '<children>' +2565      '<identifier>h</identifier>' +2566      '<fenced>' +2567      '<content>' +2568      '<fence>(</fence>' +2569      '<fence>)</fence>' +2570      '</content>' +2571      '<children>' +2572      '<identifier>x</identifier>' +2573      '</children>' +2574      '</fenced>' +2575      '</children>' +2576      '</appl>' +2577      '</children>' +2578      '</relseq>');2579  this.executeTreeTest(2580      '<mrow><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo><mo>+</mo><mi>g</mi>' +2581      '<mo>(</mo><mi>y</mi><mo>)</mo><mo>=</mo><mi>h</mi><mo>(</mo>' +2582      '<mi>x</mi><mi>y</mi><mo>)</mo></mrow>',2583      '<relseq>=' +2584      '<content>' +2585      '<relation>=</relation>' +2586      '</content>' +2587      '<children>' +2588      '<infixop>+' +2589      '<content>' +2590      '<operator>+</operator>' +2591      '</content>' +2592      '<children>' +2593      '<appl>' +2594      '<content>' +2595      '<punctuation>\u2061</punctuation>' +2596      '</content>' +2597      '<children>' +2598      '<identifier>f</identifier>' +2599      '<fenced>' +2600      '<content>' +2601      '<fence>(</fence>' +2602      '<fence>)</fence>' +2603      '</content>' +2604      '<children>' +2605      '<identifier>x</identifier>' +2606      '</children>' +2607      '</fenced>' +2608      '</children>' +2609      '</appl>' +2610      '<appl>' +2611      '<content>' +2612      '<punctuation>\u2061</punctuation>' +2613      '</content>' +2614      '<children>' +2615      '<identifier>g</identifier>' +2616      '<fenced>' +2617      '<content>' +2618      '<fence>(</fence>' +2619      '<fence>)</fence>' +2620      '</content>' +2621      '<children>' +2622      '<identifier>y</identifier>' +2623      '</children>' +2624      '</fenced>' +2625      '</children>' +2626      '</appl>' +2627      '</children>' +2628      '</infixop>' +2629      '<appl>' +2630      '<content>' +2631      '<punctuation>\u2061</punctuation>' +2632      '</content>' +2633      '<children>' +2634      '<identifier>h</identifier>' +2635      '<fenced>' +2636      '<content>' +2637      '<fence>(</fence>' +2638      '<fence>)</fence>' +2639      '</content>' +2640      '<children>' +2641      '<infixop>\u2062' +2642      '<content>' +2643      '<operator>\u2062</operator>' +2644      '</content>' +2645      '<children>' +2646      '<identifier>x</identifier>' +2647      '<identifier>y</identifier>' +2648      '</children>' +2649      '</infixop>' +2650      '</children>' +2651      '</fenced>' +2652      '</children>' +2653      '</appl>' +2654      '</children>' +2655      '</relseq>');2656};2657/**2658 * Nested simple functions.2659 */2660cvox.SemanticTreeTest.prototype.testStreeSimpleFuncsNested = function() {2661  this.brief = true;2662  this.executeTreeTest(2663      '<mrow><mi>g</mi><mo>(</mo><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo>' +2664      '<mo>)</mo></mrow>',2665      '<appl>' +2666      '<content>' +2667      '<punctuation>\u2061</punctuation>' +2668      '</content>' +2669      '<children>' +2670      '<identifier>g</identifier>' +2671      '<fenced>' +2672      '<content>' +2673      '<fence>(</fence>' +2674      '<fence>)</fence>' +2675      '</content>' +2676      '<children>' +2677      '<appl>' +2678      '<content>' +2679      '<punctuation>\u2061</punctuation>' +2680      '</content>' +2681      '<children>' +2682      '<identifier>f</identifier>' +2683      '<fenced>' +2684      '<content>' +2685      '<fence>(</fence>' +2686      '<fence>)</fence>' +2687      '</content>' +2688      '<children>' +2689      '<identifier>x</identifier>' +2690      '</children>' +2691      '</fenced>' +2692      '</children>' +2693      '</appl>' +2694      '</children>' +2695      '</fenced>' +2696      '</children>' +2697      '</appl>');2698  this.executeTreeTest(2699      '<mrow><mi>h</mi><mo>(</mo><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo>' +2700      '<mi>g</mi><mo>(</mo><mi>y</mi><mo>)</mo><mo>)</mo></mrow>',2701      '<appl>' +2702      '<content>' +2703      '<punctuation>\u2061</punctuation>' +2704      '</content>' +2705      '<children>' +2706      '<identifier>h</identifier>' +2707      '<fenced>' +2708      '<content>' +2709      '<fence>(</fence>' +2710      '<fence>)</fence>' +2711      '</content>' +2712      '<children>' +2713      '<infixop>\u2062' +2714      '<content>' +2715      '<operator>\u2062</operator>' +2716      '</content>' +2717      '<children>' +2718      '<appl>' +2719      '<content>' +2720      '<punctuation>\u2061</punctuation>' +2721      '</content>' +2722      '<children>' +2723      '<identifier>f</identifier>' +2724      '<fenced>' +2725      '<content>' +2726      '<fence>(</fence>' +2727      '<fence>)</fence>' +2728      '</content>' +2729      '<children>' +2730      '<identifier>x</identifier>' +2731      '</children>' +2732      '</fenced>' +2733      '</children>' +2734      '</appl>' +2735      '<appl>' +2736      '<content>' +2737      '<punctuation>\u2061</punctuation>' +2738      '</content>' +2739      '<children>' +2740      '<identifier>g</identifier>' +2741      '<fenced>' +2742      '<content>' +2743      '<fence>(</fence>' +2744      '<fence>)</fence>' +2745      '</content>' +2746      '<children>' +2747      '<identifier>y</identifier>' +2748      '</children>' +2749      '</fenced>' +2750      '</children>' +2751      '</appl>' +2752      '</children>' +2753      '</infixop>' +2754      '</children>' +2755      '</fenced>' +2756      '</children>' +2757      '</appl>');2758  this.executeTreeTest(2759      '<mrow><mi>h</mi><mo>(</mo><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo>' +2760      '<mo>+</mo><mi>g</mi><mo>(</mo><mi>y</mi><mo>)</mo><mo>)</mo></mrow>',2761      '<infixop>\u2062' +2762      '<content>' +2763      '<operator>\u2062</operator>' +2764      '</content>' +2765      '<children>' +2766      '<identifier>h</identifier>' +2767      '<fenced>' +2768      '<content>' +2769      '<fence>(</fence>' +2770      '<fence>)</fence>' +2771      '</content>' +2772      '<children>' +2773      '<infixop>+' +2774      '<content>' +2775      '<operator>+</operator>' +2776      '</content>' +2777      '<children>' +2778      '<appl>' +2779      '<content>' +2780      '<punctuation>\u2061</punctuation>' +2781      '</content>' +2782      '<children>' +2783      '<identifier>f</identifier>' +2784      '<fenced>' +2785      '<content>' +2786      '<fence>(</fence>' +2787      '<fence>)</fence>' +2788      '</content>' +2789      '<children>' +2790      '<identifier>x</identifier>' +2791      '</children>' +2792      '</fenced>' +2793      '</children>' +2794      '</appl>' +2795      '<appl>' +2796      '<content>' +2797      '<punctuation>\u2061</punctuation>' +2798      '</content>' +2799      '<children>' +2800      '<identifier>g</identifier>' +2801      '<fenced>' +2802      '<content>' +2803      '<fence>(</fence>' +2804      '<fence>)</fence>' +2805      '</content>' +2806      '<children>' +2807      '<identifier>y</identifier>' +2808      '</children>' +2809      '</fenced>' +2810      '</children>' +2811      '</appl>' +2812      '</children>' +2813      '</infixop>' +2814      '</children>' +2815      '</fenced>' +2816      '</children>' +2817      '</infixop>');2818  this.executeTreeTest(2819      '<mi>P</mi><mo>[</mo><mi>x</mi><mo>=</mo><mn>2</mn><mo>]</mo>',2820      '<appl>' +2821      '<content>' +2822      '<punctuation>\u2061</punctuation>' +2823      '</content>' +2824      '<children>' +2825      '<identifier>P</identifier>' +2826      '<fenced>' +2827      '<content>' +2828      '<fence>[</fence>' +2829      '<fence>]</fence>' +2830      '</content>' +2831      '<children>' +2832      '<relseq>=' +2833      '<content>' +2834      '<relation>=</relation>' +2835      '</content>' +2836      '<children>' +2837      '<identifier>x</identifier>' +2838      '<number>2</number>' +2839      '</children>' +2840      '</relseq>' +2841      '</children>' +2842      '</fenced>' +2843      '</children>' +2844      '</appl>');2845};2846/**2847 * Simple functions with explicit function application.2848 */2849cvox.SemanticTreeTest.prototype.testStreeSimpleFuncsExplicitApp = function() {2850  this.brief = true;2851  this.executeTreeTest(2852      '<mi>f</mi><mo>\u2061</mo><mo>(</mo><mi>x</mi><mo>+</mo><mi>y</mi>' +2853      '<mo>)</mo>',2854      '<appl>' +2855      '<content>' +2856      '<punctuation>\u2061</punctuation>' +2857      '</content>' +2858      '<children>' +2859      '<identifier>f</identifier>' +2860      '<fenced>' +2861      '<content>' +2862      '<fence>(</fence>' +2863      '<fence>)</fence>' +2864      '</content>' +2865      '<children>' +2866      '<infixop>+' +2867      '<content>' +2868      '<operator>+</operator>' +2869      '</content>' +2870      '<children>' +2871      '<identifier>x</identifier>' +2872      '<identifier>y</identifier>' +2873      '</children>' +2874      '</infixop>' +2875      '</children>' +2876      '</fenced>' +2877      '</children>' +2878      '</appl>');2879  this.executeTreeTest(2880      '<mi>f</mi><mo>\u2061</mo><mo>(</mo><mi>x</mi><mo>+</mo><mi>y</mi>' +2881      '<mo>)</mo><mo>+</mo><mi>f</mi><mo>(</mo><mi>x</mi><mo>+</mo>' +2882      '<mi>y</mi><mo>)</mo>',2883      '<infixop>+' +2884      '<content>' +2885      '<operator>+</operator>' +2886      '</content>' +2887      '<children>' +2888      '<appl>' +2889      '<content>' +2890      '<punctuation>\u2061</punctuation>' +2891      '</content>' +2892      '<children>' +2893      '<identifier>f</identifier>' +2894      '<fenced>' +2895      '<content>' +2896      '<fence>(</fence>' +2897      '<fence>)</fence>' +2898      '</content>' +2899      '<children>' +2900      '<infixop>+' +2901      '<content>' +2902      '<operator>+</operator>' +2903      '</content>' +2904      '<children>' +2905      '<identifier>x</identifier>' +2906      '<identifier>y</identifier>' +2907      '</children>' +2908      '</infixop>' +2909      '</children>' +2910      '</fenced>' +2911      '</children>' +2912      '</appl>' +2913      '<infixop>\u2062' +2914      '<content>' +2915      '<operator>\u2062</operator>' +2916      '</content>' +2917      '<children>' +2918      '<identifier>f</identifier>' +2919      '<fenced>' +2920      '<content>' +2921      '<fence>(</fence>' +2922      '<fence>)</fence>' +2923      '</content>' +2924      '<children>' +2925      '<infixop>+' +2926      '<content>' +2927      '<operator>+</operator>' +2928      '</content>' +2929      '<children>' +2930      '<identifier>x</identifier>' +2931      '<identifier>y</identifier>' +2932      '</children>' +2933      '</infixop>' +2934      '</children>' +2935      '</fenced>' +2936      '</children>' +2937      '</infixop>' +2938      '</children>' +2939      '</infixop>');2940  this.executeTreeTest(2941      '<msub><mi>f</mi><mn>1</mn></msub><mo>\u2061</mo><mo>(</mo><mi>x</mi>' +2942      '<mo>+</mo><mi>y</mi><mo>)</mo>',2943      '<appl>' +2944      '<content>' +2945      '<punctuation>\u2061</punctuation>' +2946      '</content>' +2947      '<children>' +2948      '<subscript>' +2949      '<children>' +2950      '<identifier>f</identifier>' +2951      '<number>1</number>' +2952      '</children>' +2953      '</subscript>' +2954      '<fenced>' +2955      '<content>' +2956      '<fence>(</fence>' +2957      '<fence>)</fence>' +2958      '</content>' +2959      '<children>' +2960      '<infixop>+' +2961      '<content>' +2962      '<operator>+</operator>' +2963      '</content>' +2964      '<children>' +2965      '<identifier>x</identifier>' +2966      '<identifier>y</identifier>' +2967      '</children>' +2968      '</infixop>' +2969      '</children>' +2970      '</fenced>' +2971      '</children>' +2972      '</appl>');2973  this.executeTreeTest(2974      '<msup><msub><mi>f</mi><mn>n</mn></msub><mn>2</mn></msup>' +2975      '<mo>\u2061</mo><mo>(</mo><mi>x</mi><mo>+</mo><mi>y</mi><mo>)</mo>' +2976      '<mo>+</mo><msup><msub><mi>f</mi><mn>m</mn></msub><mn>2</mn></msup>' +2977      '<mo>(</mo><mi>x</mi><mo>+</mo><mi>y</mi><mo>)</mo>',2978      '<infixop>+' +2979      '<content>' +2980      '<operator>+</operator>' +2981      '</content>' +2982      '<children>' +2983      '<appl>' +2984      '<content>' +2985      '<punctuation>\u2061</punctuation>' +2986      '</content>' +2987      '<children>' +2988      '<superscript>' +2989      '<children>' +2990      '<subscript>' +2991      '<children>' +2992      '<identifier>f</identifier>' +2993      '<identifier>n</identifier>' +2994      '</children>' +2995      '</subscript>' +2996      '<number>2</number>' +2997      '</children>' +2998      '</superscript>' +2999      '<fenced>' +3000      '<content>' +3001      '<fence>(</fence>' +3002      '<fence>)</fence>' +3003      '</content>' +3004      '<children>' +3005      '<infixop>+' +3006      '<content>' +3007      '<operator>+</operator>' +3008      '</content>' +3009      '<children>' +3010      '<identifier>x</identifier>' +3011      '<identifier>y</identifier>' +3012      '</children>' +3013      '</infixop>' +3014      '</children>' +3015      '</fenced>' +3016      '</children>' +3017      '</appl>' +3018      '<infixop>\u2062' +3019      '<content>' +3020      '<operator>\u2062</operator>' +3021      '</content>' +3022      '<children>' +3023      '<superscript>' +3024      '<children>' +3025      '<subscript>' +3026      '<children>' +3027      '<identifier>f</identifier>' +3028      '<identifier>m</identifier>' +3029      '</children>' +3030      '</subscript>' +3031      '<number>2</number>' +3032      '</children>' +3033      '</superscript>' +3034      '<fenced>' +3035      '<content>' +3036      '<fence>(</fence>' +3037      '<fence>)</fence>' +3038      '</content>' +3039      '<children>' +3040      '<infixop>+' +3041      '<content>' +3042      '<operator>+</operator>' +3043      '</content>' +3044      '<children>' +3045      '<identifier>x</identifier>' +3046      '<identifier>y</identifier>' +3047      '</children>' +3048      '</infixop>' +3049      '</children>' +3050      '</fenced>' +3051      '</children>' +3052      '</infixop>' +3053      '</children>' +3054      '</infixop>');3055};3056/**3057 * Prefix function applications3058 */3059cvox.SemanticTreeTest.prototype.testStreePrefixFuncsSingle = function() {3060  this.brief = true;3061  this.executeTreeTest(3062      '<mrow><mi>sin</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow>',3063      '<appl>' +3064      '<content>' +3065      '<punctuation>\u2061</punctuation>' +3066      '</content>' +3067      '<children>' +3068      '<function>sin</function>' +3069      '<fenced>' +3070      '<content>' +3071      '<fence>(</fence>' +3072      '<fence>)</fence>' +3073      '</content>' +3074      '<children>' +3075      '<identifier>x</identifier>' +3076      '</children>' +3077      '</fenced>' +3078      '</children>' +3079      '</appl>');3080  this.executeTreeTest(3081      '<mrow><mi>sin</mi><mo>(</mo><mi>x</mi><mi>y</mi><mo>)</mo></mrow>',3082      '<appl>' +3083      '<content>' +3084      '<punctuation>\u2061</punctuation>' +3085      '</content>' +3086      '<children>' +3087      '<function>sin</function>' +3088      '<fenced>' +3089      '<content>' +3090      '<fence>(</fence>' +3091      '<fence>)</fence>' +3092      '</content>' +3093      '<children>' +3094      '<infixop>\u2062' +3095      '<content>' +3096      '<operator>\u2062</operator>' +3097      '</content>' +3098      '<children>' +3099      '<identifier>x</identifier>' +3100      '<identifier>y</identifier>' +3101      '</children>' +3102      '</infixop>' +3103      '</children>' +3104      '</fenced>' +3105      '</children>' +3106      '</appl>');3107  this.executeTreeTest(3108      '<mrow><mi>sin</mi><mo>(</mo><msup><mi>x</mi><mn>2</mn></msup>' +3109      '<mo>)</mo></mrow>',3110      '<appl>' +3111      '<content>' +3112      '<punctuation>\u2061</punctuation>' +3113      '</content>' +3114      '<children>' +3115      '<function>sin</function>' +3116      '<fenced>' +3117      '<content>' +3118      '<fence>(</fence>' +3119      '<fence>)</fence>' +3120      '</content>' +3121      '<children>' +3122      '<superscript>' +3123      '<children>' +3124      '<identifier>x</identifier>' +3125      '<number>2</number>' +3126      '</children>' +3127      '</superscript>' +3128      '</children>' +3129      '</fenced>' +3130      '</children>' +3131      '</appl>');3132  this.executeTreeTest(3133      '<mrow><mi>sin</mi><mo>(</mo><msub><mi>x</mi><mn>2</mn></msub>' +3134      '<mo>)</mo></mrow>',3135      '<appl>' +3136      '<content>' +3137      '<punctuation>\u2061</punctuation>' +3138      '</content>' +3139      '<children>' +3140      '<function>sin</function>' +3141      '<fenced>' +3142      '<content>' +3143      '<fence>(</fence>' +3144      '<fence>)</fence>' +3145      '</content>' +3146      '<children>' +3147      '<subscript>' +3148      '<children>' +3149      '<identifier>x</identifier>' +3150      '<number>2</number>' +3151      '</children>' +3152      '</subscript>' +3153      '</children>' +3154      '</fenced>' +3155      '</children>' +3156      '</appl>');3157  this.executeTreeTest(3158      '<mrow><mi>sin</mi><mo>(</mo><msubsup><mi>x</mi><mn>2</mn>' +3159      '<mn>1</mn></msubsup><mo>)</mo></mrow>',3160      '<appl>' +3161      '<content>' +3162      '<punctuation>\u2061</punctuation>' +3163      '</content>' +3164      '<children>' +3165      '<function>sin</function>' +3166      '<fenced>' +3167      '<content>' +3168      '<fence>(</fence>' +3169      '<fence>)</fence>' +3170      '</content>' +3171      '<children>' +3172      '<superscript>' +3173      '<children>' +3174      '<subscript>' +3175      '<children>' +3176      '<identifier>x</identifier>' +3177      '<number>2</number>' +3178      '</children>' +3179      '</subscript>' +3180      '<number>1</number>' +3181      '</children>' +3182      '</superscript>' +3183      '</children>' +3184      '</fenced>' +3185      '</children>' +3186      '</appl>');3187  this.executeTreeTest(3188      '<mrow><mi>sin</mi><mo>(</mo><mover><mi>x</mi><mn>2</mn></mover>' +3189      '<mo>)</mo></mrow>',3190      '<appl>' +3191      '<content>' +3192      '<punctuation>\u2061</punctuation>' +3193      '</content>' +3194      '<children>' +3195      '<function>sin</function>' +3196      '<fenced>' +3197      '<content>' +3198      '<fence>(</fence>' +3199      '<fence>)</fence>' +3200      '</content>' +3201      '<children>' +3202      '<overscore>' +3203      '<children>' +3204      '<identifier>x</identifier>' +3205      '<number>2</number>' +3206      '</children>' +3207      '</overscore>' +3208      '</children>' +3209      '</fenced>' +3210      '</children>' +3211      '</appl>');3212  this.executeTreeTest(3213      '<mrow><mi>sin</mi><mo>(</mo><munder><mi>x</mi><mn>2</mn></munder>' +3214      '<mo>)</mo></mrow>',3215      '<appl>' +3216      '<content>' +3217      '<punctuation>\u2061</punctuation>' +3218      '</content>' +3219      '<children>' +3220      '<function>sin</function>' +3221      '<fenced>' +3222      '<content>' +3223      '<fence>(</fence>' +3224      '<fence>)</fence>' +3225      '</content>' +3226      '<children>' +3227      '<underscore>' +3228      '<children>' +3229      '<identifier>x</identifier>' +3230      '<number>2</number>' +3231      '</children>' +3232      '</underscore>' +3233      '</children>' +3234      '</fenced>' +3235      '</children>' +3236      '</appl>');3237  this.executeTreeTest(3238      '<mrow><mi>sin</mi><mo>(</mo><munderover><mi>x</mi><mn>2</mn>' +3239      '<mn>1</mn></munderover><mo>)</mo></mrow>',3240      '<appl>' +3241      '<content>' +3242      '<punctuation>\u2061</punctuation>' +3243      '</content>' +3244      '<children>' +3245      '<function>sin</function>' +3246      '<fenced>' +3247      '<content>' +3248      '<fence>(</fence>' +3249      '<fence>)</fence>' +3250      '</content>' +3251      '<children>' +3252      '<overscore>' +3253      '<children>' +3254      '<underscore>' +3255      '<children>' +3256      '<identifier>x</identifier>' +3257      '<number>2</number>' +3258      '</children>' +3259      '</underscore>' +3260      '<number>1</number>' +3261      '</children>' +3262      '</overscore>' +3263      '</children>' +3264      '</fenced>' +3265      '</children>' +3266      '</appl>');3267  this.executeTreeTest(3268      '<mrow><mi>sin</mi><mo>(</mo><mfrac><mn>1</mn><mn>2</mn></mfrac>' +3269      '<mo>)</mo></mrow>',3270      '<appl>' +3271      '<content>' +3272      '<punctuation>\u2061</punctuation>' +3273      '</content>' +3274      '<children>' +3275      '<function>sin</function>' +3276      '<fenced>' +3277      '<content>' +3278      '<fence>(</fence>' +3279      '<fence>)</fence>' +3280      '</content>' +3281      '<children>' +3282      '<fraction>' +3283      '<children>' +3284      '<number>1</number>' +3285      '<number>2</number>' +3286      '</children>' +3287      '</fraction>' +3288      '</children>' +3289      '</fenced>' +3290      '</children>' +3291      '</appl>');3292  this.executeTreeTest(3293      '<mrow><mi>sin</mi><mo>(</mo><mi>x</mi><mo>+</mo><mi>y</mi>' +3294      '<mo>)</mo></mrow>',3295      '<appl>' +3296      '<content>' +3297      '<punctuation>\u2061</punctuation>' +3298      '</content>' +3299      '<children>' +3300      '<function>sin</function>' +3301      '<fenced>' +3302      '<content>' +3303      '<fence>(</fence>' +3304      '<fence>)</fence>' +3305      '</content>' +3306      '<children>' +3307      '<infixop>+' +3308      '<content>' +3309      '<operator>+</operator>' +3310      '</content>' +3311      '<children>' +3312      '<identifier>x</identifier>' +3313      '<identifier>y</identifier>' +3314      '</children>' +3315      '</infixop>' +3316      '</children>' +3317      '</fenced>' +3318      '</children>' +3319      '</appl>');3320};3321/**3322 * Prefix functions applications with surrounding operators.3323 */3324cvox.SemanticTreeTest.prototype.testStreePrefixFuncsWithOps = function() {3325  this.brief = true;3326  this.executeTreeTest(3327      '<mrow><mn>1</mn><mo>+</mo><mi>sin</mi><mo>(</mo><mi>x</mi>' +3328      '<mo>)</mo></mrow>',3329      '<infixop>+' +3330      '<content>' +3331      '<operator>+</operator>' +3332      '</content>' +3333      '<children>' +3334      '<number>1</number>' +3335      '<appl>' +3336      '<content>' +3337      '<punctuation>\u2061</punctuation>' +3338      '</content>' +3339      '<children>' +3340      '<function>sin</function>' +3341      '<fenced>' +3342      '<content>' +3343      '<fence>(</fence>' +3344      '<fence>)</fence>' +3345      '</content>' +3346      '<children>' +3347      '<identifier>x</identifier>' +3348      '</children>' +3349      '</fenced>' +3350      '</children>' +3351      '</appl>' +3352      '</children>' +3353      '</infixop>');3354  this.executeTreeTest(3355      '<mrow><mi>sin</mi><mo>(</mo><mi>x</mi><mo>)</mo><mo>+</mo>' +3356      '<mn>2</mn></mrow>',3357      '<infixop>+' +3358      '<content>' +3359      '<operator>+</operator>' +3360      '</content>' +3361      '<children>' +3362      '<appl>' +3363      '<content>' +3364      '<punctuation>\u2061</punctuation>' +3365      '</content>' +3366      '<children>' +3367      '<function>sin</function>' +3368      '<fenced>' +3369      '<content>' +3370      '<fence>(</fence>' +3371      '<fence>)</fence>' +3372      '</content>' +3373      '<children>' +3374      '<identifier>x</identifier>' +3375      '</children>' +3376      '</fenced>' +3377      '</children>' +3378      '</appl>' +3379      '<number>2</number>' +3380      '</children>' +3381      '</infixop>');3382  this.executeTreeTest(3383      '<mrow><mn>1</mn><mo>+</mo><mi>sin</mi><mo>(</mo><mi>x</mi><mo>)</mo>' +3384      '<mo>+</mo><mn>2</mn></mrow>',3385      '<infixop>+' +3386      '<content>' +3387      '<operator>+</operator>' +3388      '<operator>+</operator>' +3389      '</content>' +3390      '<children>' +3391      '<number>1</number>' +3392      '<appl>' +3393      '<content>' +3394      '<punctuation>\u2061</punctuation>' +3395      '</content>' +3396      '<children>' +3397      '<function>sin</function>' +3398      '<fenced>' +3399      '<content>' +3400      '<fence>(</fence>' +3401      '<fence>)</fence>' +3402      '</content>' +3403      '<children>' +3404      '<identifier>x</identifier>' +3405      '</children>' +3406      '</fenced>' +3407      '</children>' +3408      '</appl>' +3409      '<number>2</number>' +3410      '</children>' +3411      '</infixop>');3412  this.executeTreeTest(3413      '<mrow><mo>a</mo><mo>+</mo><mi>sin</mi><mo>(</mo><mi>x</mi>' +3414      '<mo>)</mo></mrow>',3415      '<infixop>+' +3416      '<content>' +3417      '<operator>+</operator>' +3418      '</content>' +3419      '<children>' +3420      '<identifier>a</identifier>' +3421      '<appl>' +3422      '<content>' +3423      '<punctuation>\u2061</punctuation>' +3424      '</content>' +3425      '<children>' +3426      '<function>sin</function>' +3427      '<fenced>' +3428      '<content>' +3429      '<fence>(</fence>' +3430      '<fence>)</fence>' +3431      '</content>' +3432      '<children>' +3433      '<identifier>x</identifier>' +3434      '</children>' +3435      '</fenced>' +3436      '</children>' +3437      '</appl>' +3438      '</children>' +3439      '</infixop>');3440  this.executeTreeTest(3441      '<mrow><mi>sin</mi><mo>(</mo><mi>x</mi><mo>)</mo><mo>+</mo>' +3442      '<mo>b</mo></mrow>',3443      '<infixop>+' +3444      '<content>' +3445      '<operator>+</operator>' +3446      '</content>' +3447      '<children>' +3448      '<appl>' +3449      '<content>' +3450      '<punctuation>\u2061</punctuation>' +3451      '</content>' +3452      '<children>' +3453      '<function>sin</function>' +3454      '<fenced>' +3455      '<content>' +3456      '<fence>(</fence>' +3457      '<fence>)</fence>' +3458      '</content>' +3459      '<children>' +3460      '<identifier>x</identifier>' +3461      '</children>' +3462      '</fenced>' +3463      '</children>' +3464      '</appl>' +3465      '<identifier>b</identifier>' +3466      '</children>' +3467      '</infixop>');3468  this.executeTreeTest(3469      '<mrow><mo>a</mo><mo>+</mo><mi>sin</mi><mo>(</mo><mi>x</mi>' +3470      '<mo>)</mo><mo>+</mo><mo>b</mo></mrow>',3471      '<infixop>+' +3472      '<content>' +3473      '<operator>+</operator>' +3474      '<operator>+</operator>' +3475      '</content>' +3476      '<children>' +3477      '<identifier>a</identifier>' +3478      '<appl>' +3479      '<content>' +3480      '<punctuation>\u2061</punctuation>' +3481      '</content>' +3482      '<children>' +3483      '<function>sin</function>' +3484      '<fenced>' +3485      '<content>' +3486      '<fence>(</fence>' +3487      '<fence>)</fence>' +3488      '</content>' +3489      '<children>' +3490      '<identifier>x</identifier>' +3491      '</children>' +3492      '</fenced>' +3493      '</children>' +3494      '</appl>' +3495      '<identifier>b</identifier>' +3496      '</children>' +3497      '</infixop>');3498  this.executeTreeTest(3499      '<mrow><mo>a</mo><mo>=</mo><mi>sin</mi><mo>(</mo><mi>x</mi>' +3500      '<mo>)</mo></mrow>',3501      '<relseq>=' +3502      '<content>' +3503      '<relation>=</relation>' +3504      '</content>' +3505      '<children>' +3506      '<identifier>a</identifier>' +3507      '<appl>' +3508      '<content>' +3509      '<punctuation>\u2061</punctuation>' +3510      '</content>' +3511      '<children>' +3512      '<function>sin</function>' +3513      '<fenced>' +3514      '<content>' +3515      '<fence>(</fence>' +3516      '<fence>)</fence>' +3517      '</content>' +3518      '<children>' +3519      '<identifier>x</identifier>' +3520      '</children>' +3521      '</fenced>' +3522      '</children>' +3523      '</appl>' +3524      '</children>' +3525      '</relseq>');3526  this.executeTreeTest(3527      '<mrow><mi>sin</mi><mo>(</mo><mi>x</mi><mo>)</mo><mo>=</mo>' +3528      '<mo>b</mo></mrow>',3529      '<relseq>=' +3530      '<content>' +3531      '<relation>=</relation>' +3532      '</content>' +3533      '<children>' +3534      '<appl>' +3535      '<content>' +3536      '<punctuation>\u2061</punctuation>' +3537      '</content>' +3538      '<children>' +3539      '<function>sin</function>' +3540      '<fenced>' +3541      '<content>' +3542      '<fence>(</fence>' +3543      '<fence>)</fence>' +3544      '</content>' +3545      '<children>' +3546      '<identifier>x</identifier>' +3547      '</children>' +3548      '</fenced>' +3549      '</children>' +3550      '</appl>' +3551      '<identifier>b</identifier>' +3552      '</children>' +3553      '</relseq>');3554  this.executeTreeTest(3555      '<mrow><mo>a</mo><mo>=</mo><mi>sin</mi><mo>(</mo><mi>x</mi><mo>)</mo>' +3556      '<mo>=</mo><mo>b</mo></mrow>',3557      '<relseq>=' +3558      '<content>' +3559      '<relation>=</relation>' +3560      '<relation>=</relation>' +3561      '</content>' +3562      '<children>' +3563      '<identifier>a</identifier>' +3564      '<appl>' +3565      '<content>' +3566      '<punctuation>\u2061</punctuation>' +3567      '</content>' +3568      '<children>' +3569      '<function>sin</function>' +3570      '<fenced>' +3571      '<content>' +3572      '<fence>(</fence>' +3573      '<fence>)</fence>' +3574      '</content>' +3575      '<children>' +3576      '<identifier>x</identifier>' +3577      '</children>' +3578      '</fenced>' +3579      '</children>' +3580      '</appl>' +3581      '<identifier>b</identifier>' +3582      '</children>' +3583      '</relseq>');3584};3585/**3586 * Multiple prefix function applications.3587 */3588cvox.SemanticTreeTest.prototype.testStreePrefixFuncsMulti = function() {3589  this.brief = true;3590  this.executeTreeTest(3591      '<mrow><mi>sin</mi><mo>(</mo><mi>x</mi><mo>)</mo><mo>+</mo><mi>cos</mi>' +3592      '<mo>(</mo><mi>x</mi><mo>)</mo></mrow>',3593      '<infixop>+' +3594      '<content>' +3595      '<operator>+</operator>' +3596      '</content>' +3597      '<children>' +3598      '<appl>' +3599      '<content>' +3600      '<punctuation>\u2061</punctuation>' +3601      '</content>' +3602      '<children>' +3603      '<function>sin</function>' +3604      '<fenced>' +3605      '<content>' +3606      '<fence>(</fence>' +3607      '<fence>)</fence>' +3608      '</content>' +3609      '<children>' +3610      '<identifier>x</identifier>' +3611      '</children>' +3612      '</fenced>' +3613      '</children>' +3614      '</appl>' +3615      '<appl>' +3616      '<content>' +3617      '<punctuation>\u2061</punctuation>' +3618      '</content>' +3619      '<children>' +3620      '<function>cos</function>' +3621      '<fenced>' +3622      '<content>' +3623      '<fence>(</fence>' +3624      '<fence>)</fence>' +3625      '</content>' +3626      '<children>' +3627      '<identifier>x</identifier>' +3628      '</children>' +3629      '</fenced>' +3630      '</children>' +3631      '</appl>' +3632      '</children>' +3633      '</infixop>');3634  this.executeTreeTest(3635      '<mrow><mi>sin</mi><mo>(</mo><mi>x</mi><mo>)</mo><mo>+</mo><mi>cos</mi>' +3636      '<mo>(</mo><mi>x</mi><mo>)</mo><mo>=</mo><mi>tan</mi><mo>(</mo>' +3637      '<mi>x</mi><mo>)</mo></mrow>',3638      '<relseq>=' +3639      '<content>' +3640      '<relation>=</relation>' +3641      '</content>' +3642      '<children>' +3643      '<infixop>+' +3644      '<content>' +3645      '<operator>+</operator>' +3646      '</content>' +3647      '<children>' +3648      '<appl>' +3649      '<content>' +3650      '<punctuation>\u2061</punctuation>' +3651      '</content>' +3652      '<children>' +3653      '<function>sin</function>' +3654      '<fenced>' +3655      '<content>' +3656      '<fence>(</fence>' +3657      '<fence>)</fence>' +3658      '</content>' +3659      '<children>' +3660      '<identifier>x</identifier>' +3661      '</children>' +3662      '</fenced>' +3663      '</children>' +3664      '</appl>' +3665      '<appl>' +3666      '<content>' +3667      '<punctuation>\u2061</punctuation>' +3668      '</content>' +3669      '<children>' +3670      '<function>cos</function>' +3671      '<fenced>' +3672      '<content>' +3673      '<fence>(</fence>' +3674      '<fence>)</fence>' +3675      '</content>' +3676      '<children>' +3677      '<identifier>x</identifier>' +3678      '</children>' +3679      '</fenced>' +3680      '</children>' +3681      '</appl>' +3682      '</children>' +3683      '</infixop>' +3684      '<appl>' +3685      '<content>' +3686      '<punctuation>\u2061</punctuation>' +3687      '</content>' +3688      '<children>' +3689      '<function>tan</function>' +3690      '<fenced>' +3691      '<content>' +3692      '<fence>(</fence>' +3693      '<fence>)</fence>' +3694      '</content>' +3695      '<children>' +3696      '<identifier>x</identifier>' +3697      '</children>' +3698      '</fenced>' +3699      '</children>' +3700      '</appl>' +3701      '</children>' +3702      '</relseq>');3703  this.executeTreeTest(3704      '<mrow><mi>sin</mi><mo>(</mo><mi>x</mi><mo>)</mo><mo>+</mo><mi>cos</mi>' +3705      '<mo>(</mo><mi>y</mi><mo>)</mo><mo>=</mo><mi>tan</mi><mo>(</mo>' +3706      '<mi>x</mi><mi>y</mi><mo>)</mo></mrow>',3707      '<relseq>=' +3708      '<content>' +3709      '<relation>=</relation>' +3710      '</content>' +3711      '<children>' +3712      '<infixop>+' +3713      '<content>' +3714      '<operator>+</operator>' +3715      '</content>' +3716      '<children>' +3717      '<appl>' +3718      '<content>' +3719      '<punctuation>\u2061</punctuation>' +3720      '</content>' +3721      '<children>' +3722      '<function>sin</function>' +3723      '<fenced>' +3724      '<content>' +3725      '<fence>(</fence>' +3726      '<fence>)</fence>' +3727      '</content>' +3728      '<children>' +3729      '<identifier>x</identifier>' +3730      '</children>' +3731      '</fenced>' +3732      '</children>' +3733      '</appl>' +3734      '<appl>' +3735      '<content>' +3736      '<punctuation>\u2061</punctuation>' +3737      '</content>' +3738      '<children>' +3739      '<function>cos</function>' +3740      '<fenced>' +3741      '<content>' +3742      '<fence>(</fence>' +3743      '<fence>)</fence>' +3744      '</content>' +3745      '<children>' +3746      '<identifier>y</identifier>' +3747      '</children>' +3748      '</fenced>' +3749      '</children>' +3750      '</appl>' +3751      '</children>' +3752      '</infixop>' +3753      '<appl>' +3754      '<content>' +3755      '<punctuation>\u2061</punctuation>' +3756      '</content>' +3757      '<children>' +3758      '<function>tan</function>' +3759      '<fenced>' +3760      '<content>' +3761      '<fence>(</fence>' +3762      '<fence>)</fence>' +3763      '</content>' +3764      '<children>' +3765      '<infixop>\u2062' +3766      '<content>' +3767      '<operator>\u2062</operator>' +3768      '</content>' +3769      '<children>' +3770      '<identifier>x</identifier>' +3771      '<identifier>y</identifier>' +3772      '</children>' +3773      '</infixop>' +3774      '</children>' +3775      '</fenced>' +3776      '</children>' +3777      '</appl>' +3778      '</children>' +3779      '</relseq>');3780};3781/**3782 * Prefix function applications with sub- and superscripts.3783 */3784cvox.SemanticTreeTest.prototype.testStreePrefixFuncsScripts = function() {3785  this.brief = true;3786  this.executeTreeTest(3787      '<mrow><msup><mi>sin</mi><mn>2</mn></msup><mo>(</mo><mi>x</mi>' +3788      '<mo>)</mo></mrow>',3789      '<appl>' +3790      '<content>' +3791      '<punctuation>\u2061</punctuation>' +3792      '</content>' +3793      '<children>' +3794      '<superscript>' +3795      '<children>' +3796      '<function>sin</function>' +3797      '<number>2</number>' +3798      '</children>' +3799      '</superscript>' +3800      '<fenced>' +3801      '<content>' +3802      '<fence>(</fence>' +3803      '<fence>)</fence>' +3804      '</content>' +3805      '<children>' +3806      '<identifier>x</identifier>' +3807      '</children>' +3808      '</fenced>' +3809      '</children>' +3810      '</appl>');3811  this.executeTreeTest(3812      '<mrow><msub><mi>sin</mi><mn>1</mn></msub><mo>(</mo><mi>x</mi>' +3813      '<mo>)</mo></mrow>',3814      '<appl>' +3815      '<content>' +3816      '<punctuation>\u2061</punctuation>' +3817      '</content>' +3818      '<children>' +3819      '<subscript>' +3820      '<children>' +3821      '<function>sin</function>' +3822      '<number>1</number>' +3823      '</children>' +3824      '</subscript>' +3825      '<fenced>' +3826      '<content>' +3827      '<fence>(</fence>' +3828      '<fence>)</fence>' +3829      '</content>' +3830      '<children>' +3831      '<identifier>x</identifier>' +3832      '</children>' +3833      '</fenced>' +3834      '</children>' +3835      '</appl>');3836  this.executeTreeTest(3837      '<mrow><msubsup><mi>sin</mi><mn>2</mn><mn>1</mn></msubsup><mo>(</mo>' +3838      '<mi>x</mi><mo>)</mo></mrow>',3839      '<appl>' +3840      '<content>' +3841      '<punctuation>\u2061</punctuation>' +3842      '</content>' +3843      '<children>' +3844      '<superscript>' +3845      '<children>' +3846      '<subscript>' +3847      '<children>' +3848      '<function>sin</function>' +3849      '<number>2</number>' +3850      '</children>' +3851      '</subscript>' +3852      '<number>1</number>' +3853      '</children>' +3854      '</superscript>' +3855      '<fenced>' +3856      '<content>' +3857      '<fence>(</fence>' +3858      '<fence>)</fence>' +3859      '</content>' +3860      '<children>' +3861      '<identifier>x</identifier>' +3862      '</children>' +3863      '</fenced>' +3864      '</children>' +3865      '</appl>');3866  this.executeTreeTest(3867      '<mrow><msup><mi>sin</mi><mn>2</mn></msup><mo>(</mo><mi>x</mi>' +3868      '<mo>)</mo><mo>+</mo><msup><mi>cos</mi><mn>2</mn></msup><mo>(</mo>' +3869      '<mi>y</mi><mo>)</mo><mo>=</mo><mn>1</mn></mrow>',3870      '<relseq>=' +3871      '<content>' +3872      '<relation>=</relation>' +3873      '</content>' +3874      '<children>' +3875      '<infixop>+' +3876      '<content>' +3877      '<operator>+</operator>' +3878      '</content>' +3879      '<children>' +3880      '<appl>' +3881      '<content>' +3882      '<punctuation>\u2061</punctuation>' +3883      '</content>' +3884      '<children>' +3885      '<superscript>' +3886      '<children>' +3887      '<function>sin</function>' +3888      '<number>2</number>' +3889      '</children>' +3890      '</superscript>' +3891      '<fenced>' +3892      '<content>' +3893      '<fence>(</fence>' +3894      '<fence>)</fence>' +3895      '</content>' +3896      '<children>' +3897      '<identifier>x</identifier>' +3898      '</children>' +3899      '</fenced>' +3900      '</children>' +3901      '</appl>' +3902      '<appl>' +3903      '<content>' +3904      '<punctuation>\u2061</punctuation>' +3905      '</content>' +3906      '<children>' +3907      '<superscript>' +3908      '<children>' +3909      '<function>cos</function>' +3910      '<number>2</number>' +3911      '</children>' +3912      '</superscript>' +3913      '<fenced>' +3914      '<content>' +3915      '<fence>(</fence>' +3916      '<fence>)</fence>' +3917      '</content>' +3918      '<children>' +3919      '<identifier>y</identifier>' +3920      '</children>' +3921      '</fenced>' +3922      '</children>' +3923      '</appl>' +3924      '</children>' +3925      '</infixop>' +3926      '<number>1</number>' +3927      '</children>' +3928      '</relseq>');3929};3930/**3931 * Prefix function applications with unfenced arguments.3932 */3933cvox.SemanticTreeTest.prototype.testStreePrefixFuncsUnfenced = function() {3934  this.brief = true;3935  this.executeTreeTest(3936      '<mrow><mi>sin</mi><mi>x</mi></mrow>',3937      '<appl>' +3938      '<content>' +3939      '<punctuation>\u2061</punctuation>' +3940      '</content>' +3941      '<children>' +3942      '<function>sin</function>' +3943      '<identifier>x</identifier>' +3944      '</children>' +3945      '</appl>');3946  this.executeTreeTest(3947      '<mrow><mi>sin</mi><mi>x</mi><mi>y</mi></mrow>',3948      '<appl>' +3949      '<content>' +3950      '<punctuation>\u2061</punctuation>' +3951      '</content>' +3952      '<children>' +3953      '<function>sin</function>' +3954      '<infixop>\u2062' +3955      '<content>' +3956      '<operator>\u2062</operator>' +3957      '</content>' +3958      '<children>' +3959      '<identifier>x</identifier>' +3960      '<identifier>y</identifier>' +3961      '</children>' +3962      '</infixop>' +3963      '</children>' +3964      '</appl>');3965  this.executeTreeTest(3966      '<mrow><mi>sin</mi><msup><mi>x</mi><mn>2</mn></msup></mrow>',3967      '<appl>' +3968      '<content>' +3969      '<punctuation>\u2061</punctuation>' +3970      '</content>' +3971      '<children>' +3972      '<function>sin</function>' +3973      '<superscript>' +3974      '<children>' +3975      '<identifier>x</identifier>' +3976      '<number>2</number>' +3977      '</children>' +3978      '</superscript>' +3979      '</children>' +3980      '</appl>');3981  this.executeTreeTest(3982      '<mrow><mi>sin</mi><msub><mi>x</mi><mn>2</mn></msub></mrow>',3983      '<appl>' +3984      '<content>' +3985      '<punctuation>\u2061</punctuation>' +3986      '</content>' +3987      '<children>' +3988      '<function>sin</function>' +3989      '<subscript>' +3990      '<children>' +3991      '<identifier>x</identifier>' +3992      '<number>2</number>' +3993      '</children>' +3994      '</subscript>' +3995      '</children>' +3996      '</appl>');3997  this.executeTreeTest(3998      '<mrow><mi>sin</mi><msubsup><mi>x</mi><mn>2</mn><mn>1</mn>' +3999      '</msubsup></mrow>',4000      '<appl>' +4001      '<content>' +4002      '<punctuation>\u2061</punctuation>' +4003      '</content>' +4004      '<children>' +4005      '<function>sin</function>' +4006      '<superscript>' +4007      '<children>' +4008      '<subscript>' +4009      '<children>' +4010      '<identifier>x</identifier>' +4011      '<number>2</number>' +4012      '</children>' +4013      '</subscript>' +4014      '<number>1</number>' +4015      '</children>' +4016      '</superscript>' +4017      '</children>' +4018      '</appl>');4019  this.executeTreeTest(4020      '<mrow><mi>sin</mi><mover><mi>x</mi><mn>2</mn></mover></mrow>',4021      '<appl>' +4022      '<content>' +4023      '<punctuation>\u2061</punctuation>' +4024      '</content>' +4025      '<children>' +4026      '<function>sin</function>' +4027      '<overscore>' +4028      '<children>' +4029      '<identifier>x</identifier>' +4030      '<number>2</number>' +4031      '</children>' +4032      '</overscore>' +4033      '</children>' +4034      '</appl>');4035  this.executeTreeTest(4036      '<mrow><mi>sin</mi><munder><mi>x</mi><mn>2</mn></munder></mrow>',4037      '<appl>' +4038      '<content>' +4039      '<punctuation>\u2061</punctuation>' +4040      '</content>' +4041      '<children>' +4042      '<function>sin</function>' +4043      '<underscore>' +4044      '<children>' +4045      '<identifier>x</identifier>' +4046      '<number>2</number>' +4047      '</children>' +4048      '</underscore>' +4049      '</children>' +4050      '</appl>');4051  this.executeTreeTest(4052      '<mrow><mi>sin</mi><munderover><mi>x</mi><mn>2</mn><mn>1</mn>' +4053      '</munderover></mrow>',4054      '<appl>' +4055      '<content>' +4056      '<punctuation>\u2061</punctuation>' +4057      '</content>' +4058      '<children>' +4059      '<function>sin</function>' +4060      '<overscore>' +4061      '<children>' +4062      '<underscore>' +4063      '<children>' +4064      '<identifier>x</identifier>' +4065      '<number>2</number>' +4066      '</children>' +4067      '</underscore>' +4068      '<number>1</number>' +4069      '</children>' +4070      '</overscore>' +4071      '</children>' +4072      '</appl>');4073  this.executeTreeTest(4074      '<mrow><mi>sin</mi><mfrac><mn>1</mn><mn>2</mn></mfrac></mrow>',4075      '<appl>' +4076      '<content>' +4077      '<punctuation>\u2061</punctuation>' +4078      '</content>' +4079      '<children>' +4080      '<function>sin</function>' +4081      '<fraction>' +4082      '<children>' +4083      '<number>1</number>' +4084      '<number>2</number>' +4085      '</children>' +4086      '</fraction>' +4087      '</children>' +4088      '</appl>');4089};4090/**4091 * Prefix function applications with unfenced arguments in an operator4092 * expression.4093 */4094cvox.SemanticTreeTest.prototype.testStreePrefixFuncsUnfencedOps = function() {4095  this.brief = true;4096  this.executeTreeTest(4097      '<mrow><mn>1</mn><mo>+</mo><mi>sin</mi><mi>x</mi></mrow>',4098      '<infixop>+' +4099      '<content>' +4100      '<operator>+</operator>' +4101      '</content>' +4102      '<children>' +4103      '<number>1</number>' +4104      '<appl>' +4105      '<content>' +4106      '<punctuation>\u2061</punctuation>' +4107      '</content>' +4108      '<children>' +4109      '<function>sin</function>' +4110      '<identifier>x</identifier>' +4111      '</children>' +4112      '</appl>' +4113      '</children>' +4114      '</infixop>');4115  this.executeTreeTest(4116      '<mrow><mi>sin</mi><mi>x</mi><mo>+</mo><mn>2</mn></mrow>',4117      '<infixop>+' +4118      '<content>' +4119      '<operator>+</operator>' +4120      '</content>' +4121      '<children>' +4122      '<appl>' +4123      '<content>' +4124      '<punctuation>\u2061</punctuation>' +4125      '</content>' +4126      '<children>' +4127      '<function>sin</function>' +4128      '<identifier>x</identifier>' +4129      '</children>' +4130      '</appl>' +4131      '<number>2</number>' +4132      '</children>' +4133      '</infixop>');4134  this.executeTreeTest(4135      '<mrow><mn>1</mn><mo>+</mo><mi>sin</mi><mi>x</mi><mo>+</mo>' +4136      '<mn>2</mn></mrow>',4137      '<infixop>+' +4138      '<content>' +4139      '<operator>+</operator>' +4140      '<operator>+</operator>' +4141      '</content>' +4142      '<children>' +4143      '<number>1</number>' +4144      '<appl>' +4145      '<content>' +4146      '<punctuation>\u2061</punctuation>' +4147      '</content>' +4148      '<children>' +4149      '<function>sin</function>' +4150      '<identifier>x</identifier>' +4151      '</children>' +4152      '</appl>' +4153      '<number>2</number>' +4154      '</children>' +4155      '</infixop>');4156  this.executeTreeTest(4157      '<mrow><mo>a</mo><mo>+</mo><mi>sin</mi><mi>x</mi></mrow>',4158      '<infixop>+' +4159      '<content>' +4160      '<operator>+</operator>' +4161      '</content>' +4162      '<children>' +4163      '<identifier>a</identifier>' +4164      '<appl>' +4165      '<content>' +4166      '<punctuation>\u2061</punctuation>' +4167      '</content>' +4168      '<children>' +4169      '<function>sin</function>' +4170      '<identifier>x</identifier>' +4171      '</children>' +4172      '</appl>' +4173      '</children>' +4174      '</infixop>');4175  this.executeTreeTest(4176      '<mrow><mi>sin</mi><mi>x</mi><mo>+</mo><mo>b</mo></mrow>',4177      '<infixop>+' +4178      '<content>' +4179      '<operator>+</operator>' +4180      '</content>' +4181      '<children>' +4182      '<appl>' +4183      '<content>' +4184      '<punctuation>\u2061</punctuation>' +4185      '</content>' +4186      '<children>' +4187      '<function>sin</function>' +4188      '<identifier>x</identifier>' +4189      '</children>' +4190      '</appl>' +4191      '<identifier>b</identifier>' +4192      '</children>' +4193      '</infixop>');4194  this.executeTreeTest(4195      '<mrow><mo>a</mo><mo>+</mo><mi>sin</mi><mi>x</mi><mo>+</mo>' +4196      '<mo>b</mo></mrow>',4197      '<infixop>+' +4198      '<content>' +4199      '<operator>+</operator>' +4200      '<operator>+</operator>' +4201      '</content>' +4202      '<children>' +4203      '<identifier>a</identifier>' +4204      '<appl>' +4205      '<content>' +4206      '<punctuation>\u2061</punctuation>' +4207      '</content>' +4208      '<children>' +4209      '<function>sin</function>' +4210      '<identifier>x</identifier>' +4211      '</children>' +4212      '</appl>' +4213      '<identifier>b</identifier>' +4214      '</children>' +4215      '</infixop>');4216  this.executeTreeTest(4217      '<mrow><mo>a</mo><mo>=</mo><mi>sin</mi><mi>x</mi></mrow>',4218      '<relseq>=' +4219      '<content>' +4220      '<relation>=</relation>' +4221      '</content>' +4222      '<children>' +4223      '<identifier>a</identifier>' +4224      '<appl>' +4225      '<content>' +4226      '<punctuation>\u2061</punctuation>' +4227      '</content>' +4228      '<children>' +4229      '<function>sin</function>' +4230      '<identifier>x</identifier>' +4231      '</children>' +4232      '</appl>' +4233      '</children>' +4234      '</relseq>');4235  this.executeTreeTest(4236      '<mrow><mi>sin</mi><mi>x</mi><mo>=</mo><mo>b</mo></mrow>',4237      '<relseq>=' +4238      '<content>' +4239      '<relation>=</relation>' +4240      '</content>' +4241      '<children>' +4242      '<appl>' +4243      '<content>' +4244      '<punctuation>\u2061</punctuation>' +4245      '</content>' +4246      '<children>' +4247      '<function>sin</function>' +4248      '<identifier>x</identifier>' +4249      '</children>' +4250      '</appl>' +4251      '<identifier>b</identifier>' +4252      '</children>' +4253      '</relseq>');4254  this.executeTreeTest(4255      '<mrow><mo>a</mo><mo>=</mo><mi>sin</mi><mi>x</mi><mo>=</mo>' +4256      '<mo>b</mo></mrow>',4257      '<relseq>=' +4258      '<content>' +4259      '<relation>=</relation>' +4260      '<relation>=</relation>' +4261      '</content>' +4262      '<children>' +4263      '<identifier>a</identifier>' +4264      '<appl>' +4265      '<content>' +4266      '<punctuation>\u2061</punctuation>' +4267      '</content>' +4268      '<children>' +4269      '<function>sin</function>' +4270      '<identifier>x</identifier>' +4271      '</children>' +4272      '</appl>' +4273      '<identifier>b</identifier>' +4274      '</children>' +4275      '</relseq>');4276};4277/**4278 * Multiple prefix function applications with unfenced arguments.4279 */4280cvox.SemanticTreeTest.prototype.testStreePrefixFuncsMultiUnfenced = function() {4281  this.brief = true;4282  this.executeTreeTest(4283      '<mrow><mi>sin</mi><mi>x</mi><mo>+</mo><mi>cos</mi><mi>x</mi></mrow>',4284      '<infixop>+' +4285      '<content>' +4286      '<operator>+</operator>' +4287      '</content>' +4288      '<children>' +4289      '<appl>' +4290      '<content>' +4291      '<punctuation>\u2061</punctuation>' +4292      '</content>' +4293      '<children>' +4294      '<function>sin</function>' +4295      '<identifier>x</identifier>' +4296      '</children>' +4297      '</appl>' +4298      '<appl>' +4299      '<content>' +4300      '<punctuation>\u2061</punctuation>' +4301      '</content>' +4302      '<children>' +4303      '<function>cos</function>' +4304      '<identifier>x</identifier>' +4305      '</children>' +4306      '</appl>' +4307      '</children>' +4308      '</infixop>');4309  this.executeTreeTest(4310      '<mrow><mi>sin</mi><mi>x</mi><mo>+</mo><mi>cos</mi><mi>x</mi><mo>=</mo>' +4311      '<mi>tan</mi><mi>x</mi></mrow>',4312      '<relseq>=' +4313      '<content>' +4314      '<relation>=</relation>' +4315      '</content>' +4316      '<children>' +4317      '<infixop>+' +4318      '<content>' +4319      '<operator>+</operator>' +4320      '</content>' +4321      '<children>' +4322      '<appl>' +4323      '<content>' +4324      '<punctuation>\u2061</punctuation>' +4325      '</content>' +4326      '<children>' +4327      '<function>sin</function>' +4328      '<identifier>x</identifier>' +4329      '</children>' +4330      '</appl>' +4331      '<appl>' +4332      '<content>' +4333      '<punctuation>\u2061</punctuation>' +4334      '</content>' +4335      '<children>' +4336      '<function>cos</function>' +4337      '<identifier>x</identifier>' +4338      '</children>' +4339      '</appl>' +4340      '</children>' +4341      '</infixop>' +4342      '<appl>' +4343      '<content>' +4344      '<punctuation>\u2061</punctuation>' +4345      '</content>' +4346      '<children>' +4347      '<function>tan</function>' +4348      '<identifier>x</identifier>' +4349      '</children>' +4350      '</appl>' +4351      '</children>' +4352      '</relseq>');4353  this.executeTreeTest(4354      '<mrow><mi>sin</mi><mi>x</mi><mo>+</mo><mi>cos</mi><mi>y</mi><mo>=</mo>' +4355      '<mi>tan</mi><mi>x</mi><mi>y</mi></mrow>',4356      '<relseq>=' +4357      '<content>' +4358      '<relation>=</relation>' +4359      '</content>' +4360      '<children>' +4361      '<infixop>+' +4362      '<content>' +4363      '<operator>+</operator>' +4364      '</content>' +4365      '<children>' +4366      '<appl>' +4367      '<content>' +4368      '<punctuation>\u2061</punctuation>' +4369      '</content>' +4370      '<children>' +4371      '<function>sin</function>' +4372      '<identifier>x</identifier>' +4373      '</children>' +4374      '</appl>' +4375      '<appl>' +4376      '<content>' +4377      '<punctuation>\u2061</punctuation>' +4378      '</content>' +4379      '<children>' +4380      '<function>cos</function>' +4381      '<identifier>y</identifier>' +4382      '</children>' +4383      '</appl>' +4384      '</children>' +4385      '</infixop>' +4386      '<appl>' +4387      '<content>' +4388      '<punctuation>\u2061</punctuation>' +4389      '</content>' +4390      '<children>' +4391      '<function>tan</function>' +4392      '<infixop>\u2062' +4393      '<content>' +4394      '<operator>\u2062</operator>' +4395      '</content>' +4396      '<children>' +4397      '<identifier>x</identifier>' +4398      '<identifier>y</identifier>' +4399      '</children>' +4400      '</infixop>' +4401      '</children>' +4402      '</appl>' +4403      '</children>' +4404      '</relseq>');4405};4406/**4407 * Prefix function applications with sub- and superscripts and unfenced4408 * arguments.4409 */4410cvox.SemanticTreeTest.prototype.testStreePrefixFuncsScriptUnfenced =4411    function() {4412  this.brief = true;4413  this.executeTreeTest(4414      '<mrow><msup><mi>sin</mi><mn>2</mn></msup><mi>x</mi></mrow>',4415      '<appl>' +4416      '<content>' +4417      '<punctuation>\u2061</punctuation>' +4418      '</content>' +4419      '<children>' +4420      '<superscript>' +4421      '<children>' +4422      '<function>sin</function>' +4423      '<number>2</number>' +4424      '</children>' +4425      '</superscript>' +4426      '<identifier>x</identifier>' +4427      '</children>' +4428      '</appl>');4429  this.executeTreeTest(4430      '<mrow><msub><mi>sin</mi><mn>1</mn></msub><mi>x</mi></mrow>',4431      '<appl>' +4432      '<content>' +4433      '<punctuation>\u2061</punctuation>' +4434      '</content>' +4435      '<children>' +4436      '<subscript>' +4437      '<children>' +4438      '<function>sin</function>' +4439      '<number>1</number>' +4440      '</children>' +4441      '</subscript>' +4442      '<identifier>x</identifier>' +4443      '</children>' +4444      '</appl>');4445  this.executeTreeTest(4446      '<mrow><msubsup><mi>sin</mi><mn>2</mn><mn>1</mn></msubsup>' +4447      '<mi>x</mi></mrow>',4448      '<appl>' +4449      '<content>' +4450      '<punctuation>\u2061</punctuation>' +4451      '</content>' +4452      '<children>' +4453      '<superscript>' +4454      '<children>' +4455      '<subscript>' +4456      '<children>' +4457      '<function>sin</function>' +4458      '<number>2</number>' +4459      '</children>' +4460      '</subscript>' +4461      '<number>1</number>' +4462      '</children>' +4463      '</superscript>' +4464      '<identifier>x</identifier>' +4465      '</children>' +4466      '</appl>');4467  this.executeTreeTest(4468      '<mrow><msup><mi>sin</mi><mn>2</mn></msup><mi>x</mi><mo>+</mo><msup>' +4469      '<mi>cos</mi><mn>2</mn></msup><mi>y</mi><mo>=</mo><mn>1</mn></mrow>',4470      '<relseq>=' +4471      '<content>' +4472      '<relation>=</relation>' +4473      '</content>' +4474      '<children>' +4475      '<infixop>+' +4476      '<content>' +4477      '<operator>+</operator>' +4478      '</content>' +4479      '<children>' +4480      '<appl>' +4481      '<content>' +4482      '<punctuation>\u2061</punctuation>' +4483      '</content>' +4484      '<children>' +4485      '<superscript>' +4486      '<children>' +4487      '<function>sin</function>' +4488      '<number>2</number>' +4489      '</children>' +4490      '</superscript>' +4491      '<identifier>x</identifier>' +4492      '</children>' +4493      '</appl>' +4494      '<appl>' +4495      '<content>' +4496      '<punctuation>\u2061</punctuation>' +4497      '</content>' +4498      '<children>' +4499      '<superscript>' +4500      '<children>' +4501      '<function>cos</function>' +4502      '<number>2</number>' +4503      '</children>' +4504      '</superscript>' +4505      '<identifier>y</identifier>' +4506      '</children>' +4507      '</appl>' +4508      '</children>' +4509      '</infixop>' +4510      '<number>1</number>' +4511      '</children>' +4512      '</relseq>');4513  this.executeTreeTest(4514      '<mrow><msubsup><msubsup><mi>sin</mi><mn>2</mn><mn>1</mn>' +4515      '</msubsup><mi>n</mi><mi>m</mi></msubsup><mi>x</mi></mrow>',4516      '<appl>' +4517      '<content>' +4518      '<punctuation>\u2061</punctuation>' +4519      '</content>' +4520      '<children>' +4521      '<superscript>' +4522      '<children>' +4523      '<subscript>' +4524      '<children>' +4525      '<superscript>' +4526      '<children>' +4527      '<subscript>' +4528      '<children>' +4529      '<function>sin</function>' +4530      '<number>2</number>' +4531      '</children>' +4532      '</subscript>' +4533      '<number>1</number>' +4534      '</children>' +4535      '</superscript>' +4536      '<identifier>n</identifier>' +4537      '</children>' +4538      '</subscript>' +4539      '<identifier>m</identifier>' +4540      '</children>' +4541      '</superscript>' +4542      '<identifier>x</identifier>' +4543      '</children>' +4544      '</appl>');4545};4546/**4547 * Prefix functions without arguments.4548 */4549cvox.SemanticTreeTest.prototype.testStreePrefixFuncsNoArgs = function() {4550  this.brief = true;4551  this.executeTreeTest(4552      '<mi>sin</mi>',4553      '<function>sin</function>');4554  this.executeTreeTest(4555      '<msup><mi>sin</mi><mn>2</mn></msup>',4556      '<superscript>' +4557      '<children>' +4558      '<function>sin</function>' +4559      '<number>2</number>' +4560      '</children>' +4561      '</superscript>');4562  this.executeTreeTest(4563      '<msup><mi>sin</mi><mn>2</mn></msup><mo>+</mo><msup><mi>cos</mi>' +4564      '<mn>2</mn></msup>',4565      '<infixop>+' +4566      '<content>' +4567      '<operator>+</operator>' +4568      '</content>' +4569      '<children>' +4570      '<appl>' +4571      '<content>' +4572      '<punctuation>\u2061</punctuation>' +4573      '</content>' +4574      '<children>' +4575      '<superscript>' +4576      '<children>' +4577      '<function>sin</function>' +4578      '<number>2</number>' +4579      '</children>' +4580      '</superscript>' +4581      '<empty/>' +4582      '</children>' +4583      '</appl>' +4584      '<appl>' +4585      '<content>' +4586      '<punctuation>\u2061</punctuation>' +4587      '</content>' +4588      '<children>' +4589      '<superscript>' +4590      '<children>' +4591      '<function>cos</function>' +4592      '<number>2</number>' +4593      '</children>' +4594      '</superscript>' +4595      '<empty/>' +4596      '</children>' +4597      '</appl>' +4598      '</children>' +4599      '</infixop>');4600  this.executeTreeTest(4601      '<mrow><msup><mi>sin</mi><mn>2</mn></msup><mo>+</mo>' +4602      '<msup><mi>cos</mi><mn>2</mn></msup><mo>=</mo><mn>1</mn></mrow>',4603      '<relseq>=' +4604      '<content>' +4605      '<relation>=</relation>' +4606      '</content>' +4607      '<children>' +4608      '<infixop>+' +4609      '<content>' +4610      '<operator>+</operator>' +4611      '</content>' +4612      '<children>' +4613      '<appl>' +4614      '<content>' +4615      '<punctuation>\u2061</punctuation>' +4616      '</content>' +4617      '<children>' +4618      '<superscript>' +4619      '<children>' +4620      '<function>sin</function>' +4621      '<number>2</number>' +4622      '</children>' +4623      '</superscript>' +4624      '<empty/>' +4625      '</children>' +4626      '</appl>' +4627      '<appl>' +4628      '<content>' +4629      '<punctuation>\u2061</punctuation>' +4630      '</content>' +4631      '<children>' +4632      '<superscript>' +4633      '<children>' +4634      '<function>cos</function>' +4635      '<number>2</number>' +4636      '</children>' +4637      '</superscript>' +4638      '<empty/>' +4639      '</children>' +4640      '</appl>' +4641      '</children>' +4642      '</infixop>' +4643      '<number>1</number>' +4644      '</children>' +4645      '</relseq>');4646  this.executeTreeTest(4647      '<mrow><mi>sin</mi><mo>=</mo><mfrac><mn>1</mn>' +4648      '<mi>csc</mi></mfrac></mrow>',4649      '<relseq>=' +4650      '<content>' +4651      '<relation>=</relation>' +4652      '</content>' +4653      '<children>' +4654      '<appl>' +4655      '<content>' +4656      '<punctuation>\u2061</punctuation>' +4657      '</content>' +4658      '<children>' +4659      '<function>sin</function>' +4660      '<empty/>' +4661      '</children>' +4662      '</appl>' +4663      '<fraction>' +4664      '<children>' +4665      '<number>1</number>' +4666      '<function>csc</function>' +4667      '</children>' +4668      '</fraction>' +4669      '</children>' +4670      '</relseq>');4671};4672/**4673 * Nested prefix function applications, both with and without fenced arguments.4674 */4675cvox.SemanticTreeTest.prototype.testStreePrefixFuncsNested = function() {4676  this.brief = true;4677  this.executeTreeTest(4678    '<mrow><mi>log</mi><mi>cos</mi><mi>x</mi></mrow>',4679    '<appl>' +4680    '<content>' +4681    '<punctuation>\u2061</punctuation>' +4682    '</content>' +4683    '<children>' +4684    '<function>log</function>' +4685    '<appl>' +4686    '<content>' +4687    '<punctuation>\u2061</punctuation>' +4688    '</content>' +4689    '<children>' +4690    '<function>cos</function>' +4691    '<identifier>x</identifier>' +4692    '</children>' +4693    '</appl>' +4694    '</children>' +4695    '</appl>');4696  this.executeTreeTest(4697    '<mrow><mi>ln</mi><mo>(</mo><mi>sin</mi><mo>(</mo><mi>x</mi><mo>)</mo><mo>)</mo></mrow>',4698    '<appl>' +4699    '<content>' +4700    '<punctuation>\u2061</punctuation>' +4701    '</content>' +4702    '<children>' +4703    '<function>ln</function>' +4704    '<fenced>' +4705    '<content>' +4706    '<fence>(</fence>' +4707    '<fence>)</fence>' +4708    '</content>' +4709    '<children>' +4710    '<appl>' +4711    '<content>' +4712    '<punctuation>\u2061</punctuation>' +4713    '</content>' +4714    '<children>' +4715    '<function>sin</function>' +4716    '<fenced>' +4717    '<content>' +4718    '<fence>(</fence>' +4719    '<fence>)</fence>' +4720    '</content>' +4721    '<children>' +4722    '<identifier>x</identifier>' +4723    '</children>' +4724    '</fenced>' +4725    '</children>' +4726    '</appl>' +4727    '</children>' +4728    '</fenced>' +4729    '</children>' +4730    '</appl>');4731  this.executeTreeTest(4732    '<mrow><mi>log</mi><mi>cos</mi><mi>x</mi><mo>=</mo><mi>ln</mi><mo>(</mo><mi>sin</mi><mo>(</mo><mi>x</mi><mo>)</mo><mo>)</mo></mrow>',4733    '<relseq>=' +4734    '<content>' +4735    '<relation>=</relation>' +4736    '</content>' +4737    '<children>' +4738    '<appl>' +4739    '<content>' +4740    '<punctuation>\u2061</punctuation>' +4741    '</content>' +4742    '<children>' +4743    '<function>log</function>' +4744    '<appl>' +4745    '<content>' +4746    '<punctuation>\u2061</punctuation>' +4747    '</content>' +4748    '<children>' +4749    '<function>cos</function>' +4750    '<identifier>x</identifier>' +4751    '</children>' +4752    '</appl>' +4753    '</children>' +4754    '</appl>' +4755    '<appl>' +4756    '<content>' +4757    '<punctuation>\u2061</punctuation>' +4758    '</content>' +4759    '<children>' +4760    '<function>ln</function>' +4761    '<fenced>' +4762    '<content>' +4763    '<fence>(</fence>' +4764    '<fence>)</fence>' +4765    '</content>' +4766    '<children>' +4767    '<appl>' +4768    '<content>' +4769    '<punctuation>\u2061</punctuation>' +4770    '</content>' +4771    '<children>' +4772    '<function>sin</function>' +4773    '<fenced>' +4774    '<content>' +4775    '<fence>(</fence>' +4776    '<fence>)</fence>' +4777    '</content>' +4778    '<children>' +4779    '<identifier>x</identifier>' +4780    '</children>' +4781    '</fenced>' +4782    '</children>' +4783    '</appl>' +4784    '</children>' +4785    '</fenced>' +4786    '</children>' +4787    '</appl>' +4788    '</children>' +4789    '</relseq>');4790};4791/**4792 * Variations of tables representing matrices, vectors, case statements,4793 * multiline equations and regular tables.4794 */4795cvox.SemanticTreeTest.prototype.testStreeTables = function() {4796  this.brief = false;4797  this.executeTreeTest(4798      '<mrow class="MJX-TeXAtom-ORD"><mi mathvariant="bold">A</mi>' +4799      '<mo>=</mo><mo>[</mo><mtable rowspacing="4pt" columnspacing="1em">' +4800      '<mtr><mtd><mn>0</mn></mtd><mtd><mn>1</mn></mtd></mtr><mtr><mtd>' +4801      '<mn>2</mn></mtd><mtd><mn>3</mn></mtd></mtr></mtable><mo>]</mo>' +4802      '</mrow>',4803      '<relseq role="equality" id="16">=' +4804      '<content>' +4805      '<relation role="equality" id="1">=</relation>' +4806      '</content>' +4807      '<children>' +4808      '<identifier role="latinletter" font="bold" id="0">A</identifier>' +4809      '<matrix role="unknown" id="13">' +4810      '<content>' +4811      '<fence role="open" id="2">[</fence>' +4812      '<fence role="close" id="14">]</fence>' +4813      '</content>' +4814      '<children>' +4815      '<row role="matrix" id="7">' +4816      '<children>' +4817      '<cell role="matrix" id="4">' +4818      '<children>' +4819      '<number role="integer" font="normal" id="3">0</number>' +4820      '</children>' +4821      '</cell>' +4822      '<cell role="matrix" id="6">' +4823      '<children>' +4824      '<number role="integer" font="normal" id="5">1</number>' +4825      '</children>' +4826      '</cell>' +4827      '</children>' +4828      '</row>' +4829      '<row role="matrix" id="12">' +4830      '<children>' +4831      '<cell role="matrix" id="9">' +4832      '<children>' +4833      '<number role="integer" font="normal" id="8">2</number>' +4834      '</children>' +4835      '</cell>' +4836      '<cell role="matrix" id="11">' +4837      '<children>' +4838      '<number role="integer" font="normal" id="10">3</number>' +4839      '</children>' +4840      '</cell>' +4841      '</children>' +4842      '</row>' +4843      '</children>' +4844      '</matrix>' +4845      '</children>' +4846      '</relseq>');4847  this.executeTreeTest(4848      '<mo>[</mo><mtable rowspacing="4pt" columnspacing="1em"><mtr>' +4849      '<mtd><mn>0</mn></mtd><mtd><mn>1</mn></mtd></mtr><mtr><mtd>' +4850      '<mn>2</mn></mtd><mtd><mn>3</mn></mtd></mtr></mtable>' +4851      '<mo>]</mo>',4852      '<matrix role="unknown" id="11">' +4853      '<content>' +4854      '<fence role="open" id="0">[</fence>' +4855      '<fence role="close" id="12">]</fence>' +4856      '</content>' +4857      '<children>' +4858      '<row role="matrix" id="5">' +4859      '<children>' +4860      '<cell role="matrix" id="2">' +4861      '<children>' +4862      '<number role="integer" font="normal" id="1">0</number>' +4863      '</children>' +4864      '</cell>' +4865      '<cell role="matrix" id="4">' +4866      '<children>' +4867      '<number role="integer" font="normal" id="3">1</number>' +4868      '</children>' +4869      '</cell>' +4870      '</children>' +4871      '</row>' +4872      '<row role="matrix" id="10">' +4873      '<children>' +4874      '<cell role="matrix" id="7">' +4875      '<children>' +4876      '<number role="integer" font="normal" id="6">2</number>' +4877      '</children>' +4878      '</cell>' +4879      '<cell role="matrix" id="9">' +4880      '<children>' +4881      '<number role="integer" font="normal" id="8">3</number>' +4882      '</children>' +4883      '</cell>' +4884      '</children>' +4885      '</row>' +4886      '</children>' +4887      '</matrix>');4888  this.executeTreeTest(4889      '<mrow class="MJX-TeXAtom-ORD"><mi mathvariant="bold">V</mi>' +4890      '<mo>=</mo><mo>[</mo><mtable rowspacing="4pt" columnspacing="1em">' +4891      '<mtr><mtd><mn>1</mn></mtd></mtr><mtr><mtd><mn>2</mn></mtd></mtr>' +4892      '<mtr><mtd><mn>3</mn></mtd></mtr></mtable><mo>]</mo></mrow>',4893      '<relseq role="equality" id="15">=' +4894      '<content>' +4895      '<relation role="equality" id="1">=</relation>' +4896      '</content>' +4897      '<children>' +4898      '<identifier role="latinletter" font="bold" id="0">V</identifier>' +4899      '<vector role="unknown" id="12">' +4900      '<content>' +4901      '<fence role="open" id="2">[</fence>' +4902      '<fence role="close" id="13">]</fence>' +4903      '</content>' +4904      '<children>' +4905      '<line role="vector" id="5">' +4906      '<children>' +4907      '<number role="integer" font="normal" id="3">1</number>' +4908      '</children>' +4909      '</line>' +4910      '<line role="vector" id="8">' +4911      '<children>' +4912      '<number role="integer" font="normal" id="6">2</number>' +4913      '</children>' +4914      '</line>' +4915      '<line role="vector" id="11">' +4916      '<children>' +4917      '<number role="integer" font="normal" id="9">3</number>' +4918      '</children>' +4919      '</line>' +4920      '</children>' +4921      '</vector>' +4922      '</children>' +4923      '</relseq>');4924  this.executeTreeTest(4925      '<mo>[</mo><mtable rowspacing="4pt" columnspacing="1em">' +4926      '<mtr><mtd><mn>1</mn></mtd></mtr><mtr><mtd><mn>2</mn></mtd></mtr>' +4927      '<mtr><mtd><mn>3</mn></mtd></mtr></mtable><mo>]</mo>',4928      '<vector role="unknown" id="10">' +4929      '<content>' +4930      '<fence role="open" id="0">[</fence>' +4931      '<fence role="close" id="11">]</fence>' +4932      '</content>' +4933      '<children>' +4934      '<line role="vector" id="3">' +4935      '<children>' +4936      '<number role="integer" font="normal" id="1">1</number>' +4937      '</children>' +4938      '</line>' +4939      '<line role="vector" id="6">' +4940      '<children>' +4941      '<number role="integer" font="normal" id="4">2</number>' +4942      '</children>' +4943      '</line>' +4944      '<line role="vector" id="9">' +4945      '<children>' +4946      '<number role="integer" font="normal" id="7">3</number>' +4947      '</children>' +4948      '</line>' +4949      '</children>' +4950      '</vector>');4951  this.executeTreeTest(4952      '<mrow><mo>{</mo><mtable><mtr><mtd><mi>a</mi></mtd><mtd>' +4953      '<mtext>often</mtext></mtd></mtr><mtr><mtd><mi>b</mi></mtd>' +4954      '<mtd><mtext>sometimes</mtext></mtd></mtr></mtable></mrow>',4955      '<cases role="unknown" id="11">' +4956      '<content>' +4957      '<punctuation role="openfence" id="0">{</punctuation>' +4958      '</content>' +4959      '<children>' +4960      '<row role="cases" id="5">' +4961      '<children>' +4962      '<cell role="cases" id="2">' +4963      '<children>' +4964      '<identifier role="latinletter" font="normal" id="1">a</identifier>' +4965      '</children>' +4966      '</cell>' +4967      '<cell role="cases" id="4">' +4968      '<children>' +4969      '<text role="unknown" id="3">often</text>' +4970      '</children>' +4971      '</cell>' +4972      '</children>' +4973      '</row>' +4974      '<row role="cases" id="10">' +4975      '<children>' +4976      '<cell role="cases" id="7">' +4977      '<children>' +4978      '<identifier role="latinletter" font="normal" id="6">b</identifier>' +4979      '</children>' +4980      '</cell>' +4981      '<cell role="cases" id="9">' +4982      '<children>' +4983      '<text role="unknown" id="8">sometimes</text>' +4984      '</children>' +4985      '</cell>' +4986      '</children>' +4987      '</row>' +4988      '</children>' +4989      '</cases>');4990  this.executeTreeTest(4991      '<mrow><mi mathvariant="bold">A</mi><mo>=</mo><mo>{</mo><mtable>' +4992      '<mtr><mtd><mi>a</mi></mtd><mtd><mtext>often</mtext></mtd></mtr>' +4993      '<mtr><mtd><mi>b</mi></mtd><mtd><mtext>sometimes</mtext></mtd></mtr>' +4994      '</mtable></mrow>',4995      '<relseq role="equality" id="14">=' +4996      '<content>' +4997      '<relation role="equality" id="1">=</relation>' +4998      '</content>' +4999      '<children>' +5000      '<identifier role="latinletter" font="bold" id="0">A</identifier>' +5001      '<cases role="unknown" id="13">' +5002      '<content>' +5003      '<punctuation role="openfence" id="2">{</punctuation>' +5004      '</content>' +5005      '<children>' +5006      '<row role="cases" id="7">' +5007      '<children>' +5008      '<cell role="cases" id="4">' +5009      '<children>' +5010      '<identifier role="latinletter" font="normal" id="3">a</identifier>' +5011      '</children>' +5012      '</cell>' +5013      '<cell role="cases" id="6">' +5014      '<children>' +5015      '<text role="unknown" id="5">often</text>' +5016      '</children>' +5017      '</cell>' +5018      '</children>' +5019      '</row>' +5020      '<row role="cases" id="12">' +5021      '<children>' +5022      '<cell role="cases" id="9">' +5023      '<children>' +5024      '<identifier role="latinletter" font="normal" id="8">b</identifier>' +5025      '</children>' +5026      '</cell>' +5027      '<cell role="cases" id="11">' +5028      '<children>' +5029      '<text role="unknown" id="10">sometimes</text>' +5030      '</children>' +5031      '</cell>' +5032      '</children>' +5033      '</row>' +5034      '</children>' +5035      '</cases>' +5036      '</children>' +5037      '</relseq>');5038  this.executeTreeTest(5039      '<mrow><mo>{</mo><mtable><mtr><mtd><mi>a</mi></mtd><mtd>' +5040      '<mtext>often</mtext></mtd></mtr><mtr><mtd><mi>b</mi></mtd><mtd>' +5041      '<mtext>sometimes</mtext></mtd></mtr></mtable><mo>.</mo></mrow>',5042      '<punctuated role="endpunct" id="13">' +5043      '<content>' +5044      '<punctuation role="fullstop" id="12">.</punctuation>' +5045      '</content>' +5046      '<children>' +5047      '<cases role="unknown" id="11">' +5048      '<content>' +5049      '<punctuation role="openfence" id="0">{</punctuation>' +5050      '</content>' +5051      '<children>' +5052      '<row role="cases" id="5">' +5053      '<children>' +5054      '<cell role="cases" id="2">' +5055      '<children>' +5056      '<identifier role="latinletter" font="normal" id="1">a</identifier>' +5057      '</children>' +5058      '</cell>' +5059      '<cell role="cases" id="4">' +5060      '<children>' +5061      '<text role="unknown" id="3">often</text>' +5062      '</children>' +5063      '</cell>' +5064      '</children>' +5065      '</row>' +5066      '<row role="cases" id="10">' +5067      '<children>' +5068      '<cell role="cases" id="7">' +5069      '<children>' +5070      '<identifier role="latinletter" font="normal" id="6">b</identifier>' +5071      '</children>' +5072      '</cell>' +5073      '<cell role="cases" id="9">' +5074      '<children>' +5075      '<text role="unknown" id="8">sometimes</text>' +5076      '</children>' +5077      '</cell>' +5078      '</children>' +5079      '</row>' +5080      '</children>' +5081      '</cases>' +5082      '<punctuation role="fullstop" id="12">.</punctuation>' +5083      '</children>' +5084      '</punctuated>');5085  this.executeTreeTest(5086      '<mrow><mo>{</mo><mtable><mtr><mtd><mi>a</mi></mtd>' +5087      '<mtd><mtext>often</mtext></mtd></mtr><mtr><mtd><mi>b</mi></mtd>' +5088      '<mtd><mtext>sometimes</mtext></mtd></mtr></mtable>' +5089      '<mo>,</mo><mi>b</mi><mo>,</mo><mi>c</mi><mo>.</mo></mrow>',5090      '<punctuated role="sequence" id="17">' +5091      '<content>' +5092      '<punctuation role="unknown" id="12">,</punctuation>' +5093      '<punctuation role="unknown" id="14">,</punctuation>' +5094      '<punctuation role="fullstop" id="16">.</punctuation>' +5095      '</content>' +5096      '<children>' +5097      '<cases role="unknown" id="11">' +5098      '<content>' +5099      '<punctuation role="openfence" id="0">{</punctuation>' +5100      '</content>' +5101      '<children>' +5102      '<row role="cases" id="5">' +5103      '<children>' +5104      '<cell role="cases" id="2">' +5105      '<children>' +5106      '<identifier role="latinletter" font="normal" id="1">a</identifier>' +5107      '</children>' +5108      '</cell>' +5109      '<cell role="cases" id="4">' +5110      '<children>' +5111      '<text role="unknown" id="3">often</text>' +5112      '</children>' +5113      '</cell>' +5114      '</children>' +5115      '</row>' +5116      '<row role="cases" id="10">' +5117      '<children>' +5118      '<cell role="cases" id="7">' +5119      '<children>' +5120      '<identifier role="latinletter" font="normal" id="6">b</identifier>' +5121      '</children>' +5122      '</cell>' +5123      '<cell role="cases" id="9">' +5124      '<children>' +5125      '<text role="unknown" id="8">sometimes</text>' +5126      '</children>' +5127      '</cell>' +5128      '</children>' +5129      '</row>' +5130      '</children>' +5131      '</cases>' +5132      '<punctuation role="unknown" id="12">,</punctuation>' +5133      '<identifier role="latinletter" font="normal" id="13">b</identifier>' +5134      '<punctuation role="unknown" id="14">,</punctuation>' +5135      '<identifier role="latinletter" font="normal" id="15">c</identifier>' +5136      '<punctuation role="fullstop" id="16">.</punctuation>' +5137      '</children>' +5138      '</punctuated>');5139  this.executeTreeTest(5140      '<mrow><mo>{</mo><mtable><mtr><mtd><mi>a</mi><mo>,</mo>' +5141      '<mtext>often</mtext></mtd></mtr><mtr><mtd><mi>b</mi><mo>,</mo>' +5142      '<mtext>sometimes</mtext></mtd></mtr></mtable><mo>,</mo><mi>b</mi>' +5143      '<mo>,</mo><mi>c</mi><mo>.</mo></mrow>',5144      '<punctuated role="sequence" id="19">' +5145      '<content>' +5146      '<punctuation role="unknown" id="14">,</punctuation>' +5147      '<punctuation role="unknown" id="16">,</punctuation>' +5148      '<punctuation role="fullstop" id="18">.</punctuation>' +5149      '</content>' +5150      '<children>' +5151      '<cases role="unknown" id="13">' +5152      '<content>' +5153      '<punctuation role="openfence" id="0">{</punctuation>' +5154      '</content>' +5155      '<children>' +5156      '<line role="cases" id="6">' +5157      '<children>' +5158      '<punctuated role="sequence" id="4">' +5159      '<content>' +5160      '<punctuation role="unknown" id="2">,</punctuation>' +5161      '</content>' +5162      '<children>' +5163      '<identifier role="latinletter" font="normal" id="1">a</identifier>' +5164      '<punctuation role="unknown" id="2">,</punctuation>' +5165      '<text role="unknown" id="3">often</text>' +5166      '</children>' +5167      '</punctuated>' +5168      '</children>' +5169      '</line>' +5170      '<line role="cases" id="12">' +5171      '<children>' +5172      '<punctuated role="sequence" id="10">' +5173      '<content>' +5174      '<punctuation role="unknown" id="8">,</punctuation>' +5175      '</content>' +5176      '<children>' +5177      '<identifier role="latinletter" font="normal" id="7">b</identifier>' +5178      '<punctuation role="unknown" id="8">,</punctuation>' +5179      '<text role="unknown" id="9">sometimes</text>' +5180      '</children>' +5181      '</punctuated>' +5182      '</children>' +5183      '</line>' +5184      '</children>' +5185      '</cases>' +5186      '<punctuation role="unknown" id="14">,</punctuation>' +5187      '<identifier role="latinletter" font="normal" id="15">b</identifier>' +5188      '<punctuation role="unknown" id="16">,</punctuation>' +5189      '<identifier role="latinletter" font="normal" id="17">c</identifier>' +5190      '<punctuation role="fullstop" id="18">.</punctuation>' +5191      '</children>' +5192      '</punctuated>');5193  this.executeTreeTest(5194      '<mtable><mtr><mtd><mi>x</mi><maligngroup/><mo>=</mo><mn>4</mn>' +5195      '</mtd></mtr><mtr><mtd><mi>y</mi><maligngroup/><mo>=</mo><mn>2</mn>' +5196      '</mtd></mtr><mtr><mtd><mi>x</mi><mi>y</mi><maligngroup/><mo>=</mo>' +5197      '<mn>6</mn></mtd></mtr></mtable>',5198      '<multiline role="unknown" id="21">' +5199      '<children>' +5200      '<line role="multiline" id="5">' +5201      '<children>' +5202      '<relseq role="equality" id="3">=' +5203      '<content>' +5204      '<relation role="equality" id="1">=</relation>' +5205      '</content>' +5206      '<children>' +5207      '<identifier role="latinletter" font="normal" id="0">x</identifier>' +5208      '<number role="integer" font="normal" id="2">4</number>' +5209      '</children>' +5210      '</relseq>' +5211      '</children>' +5212      '</line>' +5213      '<line role="multiline" id="11">' +5214      '<children>' +5215      '<relseq role="equality" id="9">=' +5216      '<content>' +5217      '<relation role="equality" id="7">=</relation>' +5218      '</content>' +5219      '<children>' +5220      '<identifier role="latinletter" font="normal" id="6">y</identifier>' +5221      '<number role="integer" font="normal" id="8">2</number>' +5222      '</children>' +5223      '</relseq>' +5224      '</children>' +5225      '</line>' +5226      '<line role="multiline" id="20">' +5227      '<children>' +5228      '<relseq role="equality" id="18">=' +5229      '<content>' +5230      '<relation role="equality" id="14">=</relation>' +5231      '</content>' +5232      '<children>' +5233      '<infixop role="implicit" id="17">\u2062' +5234      '<content>' +5235      '<operator role="multiplication" id="16">\u2062</operator>' +5236      '</content>' +5237      '<children>' +5238      '<identifier role="latinletter" font="normal" id="12">x</identifier>' +5239      '<identifier role="latinletter" font="normal" id="13">y</identifier>' +5240      '</children>' +5241      '</infixop>' +5242      '<number role="integer" font="normal" id="15">6</number>' +5243      '</children>' +5244      '</relseq>' +5245      '</children>' +5246      '</line>' +5247      '</children>' +5248      '</multiline>');5249  this.executeTreeTest(5250      '<mtable><mtr><mtd><mi>x</mi></mtd><mtd><mo>=</mo></mtd><mtd><mn>4</mn>' +5251      '</mtd></mtr><mtr><mtd><mi>y</mi></mtd><mtd><mo>=</mo></mtd><mtd>' +5252      '<mn>2</mn></mtd></mtr><mtr><mtd><mi>x</mi><mi>y</mi></mtd><mtd>' +5253      '<mo>=</mo></mtd><mtd><mn>6</mn></mtd></mtr></mtable>',5254      '<table role="unknown" id="24">' +5255      '<children>' +5256      '<row role="table" id="6">' +5257      '<children>' +5258      '<cell role="table" id="1">' +5259      '<children>' +5260      '<identifier role="latinletter" font="normal" id="0">x</identifier>' +5261      '</children>' +5262      '</cell>' +5263      '<cell role="table" id="3">' +5264      '<children>' +5265      '<relation role="equality" id="2">=</relation>' +5266      '</children>' +5267      '</cell>' +5268      '<cell role="table" id="5">' +5269      '<children>' +5270      '<number role="integer" font="normal" id="4">4</number>' +5271      '</children>' +5272      '</cell>' +5273      '</children>' +5274      '</row>' +5275      '<row role="table" id="13">' +5276      '<children>' +5277      '<cell role="table" id="8">' +5278      '<children>' +5279      '<identifier role="latinletter" font="normal" id="7">y</identifier>' +5280      '</children>' +5281      '</cell>' +5282      '<cell role="table" id="10">' +5283      '<children>' +5284      '<relation role="equality" id="9">=</relation>' +5285      '</children>' +5286      '</cell>' +5287      '<cell role="table" id="12">' +5288      '<children>' +5289      '<number role="integer" font="normal" id="11">2</number>' +5290      '</children>' +5291      '</cell>' +5292      '</children>' +5293      '</row>' +5294      '<row role="table" id="23">' +5295      '<children>' +5296      '<cell role="table" id="18">' +5297      '<children>' +5298      '<infixop role="implicit" id="17">\u2062' +5299      '<content>' +5300      '<operator role="multiplication" id="16">\u2062</operator>' +5301      '</content>' +5302      '<children>' +5303      '<identifier role="latinletter" font="normal" id="14">x</identifier>' +5304      '<identifier role="latinletter" font="normal" id="15">y</identifier>' +5305      '</children>' +5306      '</infixop>' +5307      '</children>' +5308      '</cell>' +5309      '<cell role="table" id="20">' +5310      '<children>' +5311      '<relation role="equality" id="19">=</relation>' +5312      '</children>' +5313      '</cell>' +5314      '<cell role="table" id="22">' +5315      '<children>' +5316      '<number role="integer" font="normal" id="21">6</number>' +5317      '</children>' +5318      '</cell>' +5319      '</children>' +5320      '</row>' +5321      '</children>' +5322      '</table>');5323};5324cvox.SemanticTreeTest.prototype.testStreeLimitFunctions = function() {5325  this.brief = true;5326  this.executeTreeTest(5327    '<mrow><munder><mi>lim</mi><mrow><mi>x</mi><mo>\u2192</mo>' +5328    '<mi>\u221E</mi></mrow></munder><mo>(</mo><mi>x</mi><mo>)</mo></mrow>',5329    '<appl>' +5330    '<content>' +5331    '<punctuation>\u2061</punctuation>' +5332    '</content>' +5333    '<children>' +5334    '<limlower>' +5335    '<children>' +5336    '<function>lim</function>' +5337    '<relseq>\u2192' +5338    '<content>' +5339    '<relation>\u2192</relation>' +5340    '</content>' +5341    '<children>' +5342    '<identifier>x</identifier>' +5343    '<identifier>\u221E</identifier>' +5344    '</children>' +5345    '</relseq>' +5346    '</children>' +5347    '</limlower>' +5348    '<fenced>' +5349    '<content>' +5350    '<fence>(</fence>' +5351    '<fence>)</fence>' +5352    '</content>' +5353    '<children>' +5354    '<identifier>x</identifier>' +5355    '</children>' +5356    '</fenced>' +5357    '</children>' +5358    '</appl>');5359  this.executeTreeTest(5360    '<mrow><mi>a</mi><mo>+</mo><munder><mi>lim</mi><mrow><mi>x</mi>' +5361    '<mo>\u2192</mo><mi>\u221E</mi></mrow></munder><mo>(</mo><mi>x</mi>' +5362    '<mo>)</mo><mo>+</mo><mi>b</mi></mrow>',5363    '<infixop>+' +5364    '<content>' +5365    '<operator>+</operator>' +5366    '<operator>+</operator>' +5367    '</content>' +5368    '<children>' +5369    '<identifier>a</identifier>' +5370    '<appl>' +5371    '<content>' +5372    '<punctuation>\u2061</punctuation>' +5373    '</content>' +5374    '<children>' +5375    '<limlower>' +5376    '<children>' +5377    '<function>lim</function>' +5378    '<relseq>\u2192' +5379    '<content>' +5380    '<relation>\u2192</relation>' +5381    '</content>' +5382    '<children>' +5383    '<identifier>x</identifier>' +5384    '<identifier>\u221E</identifier>' +5385    '</children>' +5386    '</relseq>' +5387    '</children>' +5388    '</limlower>' +5389    '<fenced>' +5390    '<content>' +5391    '<fence>(</fence>' +5392    '<fence>)</fence>' +5393    '</content>' +5394    '<children>' +5395    '<identifier>x</identifier>' +5396    '</children>' +5397    '</fenced>' +5398    '</children>' +5399    '</appl>' +5400    '<identifier>b</identifier>' +5401    '</children>' +5402    '</infixop>');5403  this.executeTreeTest(5404    '<mrow><msup><munder><mi>lim</mi><mrow><mi>x</mi><mo>\u2192</mo>' +5405    '<mi>\u221E</mi></mrow></munder><mo>+</mo></msup><mo>(</mo><mi>x</mi>' +5406    '<mo>)</mo></mrow>',5407    '<appl>' +5408    '<content>' +5409    '<punctuation>\u2061</punctuation>' +5410    '</content>' +5411    '<children>' +5412    '<limupper>' +5413    '<children>' +5414    '<limlower>' +5415    '<children>' +5416    '<function>lim</function>' +5417    '<relseq>\u2192' +5418    '<content>' +5419    '<relation>\u2192</relation>' +5420    '</content>' +5421    '<children>' +5422    '<identifier>x</identifier>' +5423    '<identifier>\u221E</identifier>' +5424    '</children>' +5425    '</relseq>' +5426    '</children>' +5427    '</limlower>' +5428    '<operator>+</operator>' +5429    '</children>' +5430    '</limupper>' +5431    '<fenced>' +5432    '<content>' +5433    '<fence>(</fence>' +5434    '<fence>)</fence>' +5435    '</content>' +5436    '<children>' +5437    '<identifier>x</identifier>' +5438    '</children>' +5439    '</fenced>' +5440    '</children>' +5441    '</appl>');5442  this.executeTreeTest(5443    '<mrow><munderover><mi>lim</mi><mo>\u2015</mo><mrow><mi>x</mi>' +5444    '<mo>\u2192</mo><mi>\u221E</mi></mrow></munderover><mo>(</mo>' +5445    '<mi>x</mi><mo>)</mo></mrow>',5446    '<appl>' +5447    '<content>' +5448    '<punctuation>\u2061</punctuation>' +5449    '</content>' +5450    '<children>' +5451    '<limboth>' +5452    '<children>' +5453    '<function>lim</function>' +5454    '<punctuation>\u2015</punctuation>' +5455    '<relseq>\u2192' +5456    '<content>' +5457    '<relation>\u2192</relation>' +5458    '</content>' +5459    '<children>' +5460    '<identifier>x</identifier>' +5461    '<identifier>\u221E</identifier>' +5462    '</children>' +5463    '</relseq>' +5464    '</children>' +5465    '</limboth>' +5466    '<fenced>' +5467    '<content>' +5468    '<fence>(</fence>' +5469    '<fence>)</fence>' +5470    '</content>' +5471    '<children>' +5472    '<identifier>x</identifier>' +5473    '</children>' +5474    '</fenced>' +5475    '</children>' +5476    '</appl>');5477  this.executeTreeTest(5478    '<mrow><munder><mi>liminf</mi><mrow><mi>x</mi><mo>\u2192</mo>' +5479    '<mi>\u221E</mi></mrow></munder><mo>(</mo><mi>x</mi><mo>)</mo>' +5480    '<mo>+</mo><munder><mi>limsup</mi><mrow><mi>y</mi><mo>\u2192</mo>' +5481    '<mi>\u221E</mi></mrow></munder><mo>(</mo><mi>y</mi><mo>)</mo></mrow>',5482    '<infixop>+' +5483    '<content>' +5484    '<operator>+</operator>' +5485    '</content>' +5486    '<children>' +5487    '<appl>' +5488    '<content>' +5489    '<punctuation>\u2061</punctuation>' +5490    '</content>' +5491    '<children>' +5492    '<limlower>' +5493    '<children>' +5494    '<function>liminf</function>' +5495    '<relseq>\u2192' +5496    '<content>' +5497    '<relation>\u2192</relation>' +5498    '</content>' +5499    '<children>' +5500    '<identifier>x</identifier>' +5501    '<identifier>\u221E</identifier>' +5502    '</children>' +5503    '</relseq>' +5504    '</children>' +5505    '</limlower>' +5506    '<fenced>' +5507    '<content>' +5508    '<fence>(</fence>' +5509    '<fence>)</fence>' +5510    '</content>' +5511    '<children>' +5512    '<identifier>x</identifier>' +5513    '</children>' +5514    '</fenced>' +5515    '</children>' +5516    '</appl>' +5517    '<appl>' +5518    '<content>' +5519    '<punctuation>\u2061</punctuation>' +5520    '</content>' +5521    '<children>' +5522    '<limlower>' +5523    '<children>' +5524    '<function>limsup</function>' +5525    '<relseq>\u2192' +5526    '<content>' +5527    '<relation>\u2192</relation>' +5528    '</content>' +5529    '<children>' +5530    '<identifier>y</identifier>' +5531    '<identifier>\u221E</identifier>' +5532    '</children>' +5533    '</relseq>' +5534    '</children>' +5535    '</limlower>' +5536    '<fenced>' +5537    '<content>' +5538    '<fence>(</fence>' +5539    '<fence>)</fence>' +5540    '</content>' +5541    '<children>' +5542    '<identifier>y</identifier>' +5543    '</children>' +5544    '</fenced>' +5545    '</children>' +5546    '</appl>' +5547    '</children>' +5548    '</infixop>');5549  this.executeTreeTest(5550    '<mrow><mi>a</mi><mo>+</mo><munder><mi>lim</mi><mrow><mi>x</mi>' +5551    '<mo>\u2192</mo><mi>\u221E</mi></mrow></munder><mi>x</mi><mo>+</mo>' +5552    '<mi>b</mi></mrow>',5553    '<infixop>+' +5554    '<content>' +5555    '<operator>+</operator>' +5556    '<operator>+</operator>' +5557    '</content>' +5558    '<children>' +5559    '<identifier>a</identifier>' +5560    '<appl>' +5561    '<content>' +5562    '<punctuation>\u2061</punctuation>' +5563    '</content>' +5564    '<children>' +5565    '<limlower>' +5566    '<children>' +5567    '<function>lim</function>' +5568    '<relseq>\u2192' +5569    '<content>' +5570    '<relation>\u2192</relation>' +5571    '</content>' +5572    '<children>' +5573    '<identifier>x</identifier>' +5574    '<identifier>\u221E</identifier>' +5575    '</children>' +5576    '</relseq>' +5577    '</children>' +5578    '</limlower>' +5579    '<identifier>x</identifier>' +5580    '</children>' +5581    '</appl>' +5582    '<identifier>b</identifier>' +5583    '</children>' +5584    '</infixop>');5585  this.executeTreeTest(5586    '<mrow><munder><mi>lim</mi><mrow><mi>x</mi><mo>\u2192</mo><mi>\u221E</mi>' +5587    '</mrow></munder><mi>lim</mi><munder><mrow><mi>y</mi><mo>\u2192</mo>' +5588    '<mi>\u221E</mi></mrow></munder><mi>x</mi><mi>y</mi></mrow>',5589    '<appl>' +5590    '<content>' +5591    '<punctuation>\u2061</punctuation>' +5592    '</content>' +5593    '<children>' +5594    '<limlower>' +5595    '<children>' +5596    '<function>lim</function>' +5597    '<relseq>\u2192' +5598    '<content>' +5599    '<relation>\u2192</relation>' +5600    '</content>' +5601    '<children>' +5602    '<identifier>x</identifier>' +5603    '<identifier>\u221E</identifier>' +5604    '</children>' +5605    '</relseq>' +5606    '</children>' +5607    '</limlower>' +5608    '<appl>' +5609    '<content>' +5610    '<punctuation>\u2061</punctuation>' +5611    '</content>' +5612    '<children>' +5613    '<function>lim</function>' +5614    '<infixop>\u2062' +5615    '<content>' +5616    '<operator>\u2062</operator>' +5617    '</content>' +5618    '<children>' +5619    '<underscore>' +5620    '<children>' +5621    '<relseq>\u2192' +5622    '<content>' +5623    '<relation>\u2192</relation>' +5624    '</content>' +5625    '<children>' +5626    '<identifier>y</identifier>' +5627    '<identifier>\u221E</identifier>' +5628    '</children>' +5629    '</relseq>' +5630    '</children>' +5631    '</underscore>' +5632    '<identifier>x</identifier>' +5633    '<identifier>y</identifier>' +5634    '</children>' +5635    '</infixop>' +5636    '</children>' +5637    '</appl>' +5638    '</children>' +5639    '</appl>');5640  this.executeTreeTest(5641    '<mi>liminf</mi>',5642    '<function>liminf</function>');5643  this.executeTreeTest(5644    '<munder><mi>lim</mi><mrow><mi>x</mi><mo>\u2192</mo><mi>\u221E</mi>' +5645    '</mrow></munder>',5646    '<limlower>' +5647    '<children>' +5648    '<function>lim</function>' +5649    '<relseq>\u2192' +5650    '<content>' +5651    '<relation>\u2192</relation>' +5652    '</content>' +5653    '<children>' +5654    '<identifier>x</identifier>' +5655    '<identifier>\u221E</identifier>' +5656    '</children>' +5657    '</relseq>' +5658    '</children>' +5659    '</limlower>');5660  this.executeTreeTest(5661    '<mi>liminf</mi><mo>+</mo><mi>limsup</mi><mo>=</mo><mi>lim</mi>',5662    '<relseq>=' +5663    '<content>' +5664    '<relation>=</relation>' +5665    '</content>' +5666    '<children>' +5667    '<infixop>+' +5668    '<content>' +5669    '<operator>+</operator>' +5670    '</content>' +5671    '<children>' +5672    '<appl>' +5673    '<content>' +5674    '<punctuation>\u2061</punctuation>' +5675    '</content>' +5676    '<children>' +5677    '<function>liminf</function>' +5678    '<empty/>' +5679    '</children>' +5680    '</appl>' +5681    '<appl>' +5682    '<content>' +5683    '<punctuation>\u2061</punctuation>' +5684    '</content>' +5685    '<children>' +5686    '<function>limsup</function>' +5687    '<empty/>' +5688    '</children>' +5689    '</appl>' +5690    '</children>' +5691    '</infixop>' +5692    '<appl>' +5693    '<content>' +5694    '<punctuation>\u2061</punctuation>' +5695    '</content>' +5696    '<children>' +5697    '<function>lim</function>' +5698    '<empty/>' +5699    '</children>' +5700    '</appl>' +5701    '</children>' +5702    '</relseq>');5703};5704/**5705 * Variations of big operators.5706 */5707cvox.SemanticTreeTest.prototype.testStreeBigOps = function() {5708  this.brief = true;5709  this.executeTreeTest(5710    '<mrow><munderover><mi>\u2211</mi><mrow><mi>n</mi><mo>=</mo><mn>0</mn>' +5711    '</mrow><mi>\u221E</mi></munderover><msup><mi>n</mi><mn>2</mn>' +5712    '</msup></mrow>',5713    '<bigop>' +5714    '<children>' +5715    '<limboth>' +5716    '<children>' +5717    '<largeop>\u2211</largeop>' +5718    '<relseq>=' +5719    '<content>' +5720    '<relation>=</relation>' +5721    '</content>' +5722    '<children>' +5723    '<identifier>n</identifier>' +5724    '<number>0</number>' +5725    '</children>' +5726    '</relseq>' +5727    '<identifier>\u221E</identifier>' +5728    '</children>' +5729    '</limboth>' +5730    '<superscript>' +5731    '<children>' +5732    '<identifier>n</identifier>' +5733    '<number>2</number>' +5734    '</children>' +5735    '</superscript>' +5736    '</children>' +5737    '</bigop>');5738  this.executeTreeTest(5739    '<mrow><munderover><mi>\u2211</mi><mrow><mi>n</mi><mo>=</mo><mn>0</mn>' +5740    '</mrow><mi>\u221E</mi></munderover><munderover><mi>\u2211</mi><mrow>' +5741    '<mi>m</mi><mo>=</mo><mn>0</mn></mrow><mi>\u221E</mi></munderover><msup>' +5742    '<mi>n</mi><mn>m</mn></msup></mrow>',5743    '<bigop>' +5744    '<children>' +5745    '<limboth>' +5746    '<children>' +5747    '<largeop>\u2211</largeop>' +5748    '<relseq>=' +5749    '<content>' +5750    '<relation>=</relation>' +5751    '</content>' +5752    '<children>' +5753    '<identifier>n</identifier>' +5754    '<number>0</number>' +5755    '</children>' +5756    '</relseq>' +5757    '<identifier>\u221E</identifier>' +5758    '</children>' +5759    '</limboth>' +5760    '<bigop>' +5761    '<children>' +5762    '<limboth>' +5763    '<children>' +5764    '<largeop>\u2211</largeop>' +5765    '<relseq>=' +5766    '<content>' +5767    '<relation>=</relation>' +5768    '</content>' +5769    '<children>' +5770    '<identifier>m</identifier>' +5771    '<number>0</number>' +5772    '</children>' +5773    '</relseq>' +5774    '<identifier>\u221E</identifier>' +5775    '</children>' +5776    '</limboth>' +5777    '<superscript>' +5778    '<children>' +5779    '<identifier>n</identifier>' +5780    '<identifier>m</identifier>' +5781    '</children>' +5782    '</superscript>' +5783    '</children>' +5784    '</bigop>' +5785    '</children>' +5786    '</bigop>');5787  this.executeTreeTest(5788    '<mrow><munder><mi>\u2211</mi><mrow><mi>n</mi><mo>=</mo><mn>0</mn></mrow>' +5789    '</munder><msup><mi>n</mi><mn>2</mn></msup></mrow>',5790    '<bigop>' +5791    '<children>' +5792    '<limlower>' +5793    '<children>' +5794    '<largeop>\u2211</largeop>' +5795    '<relseq>=' +5796    '<content>' +5797    '<relation>=</relation>' +5798    '</content>' +5799    '<children>' +5800    '<identifier>n</identifier>' +5801    '<number>0</number>' +5802    '</children>' +5803    '</relseq>' +5804    '</children>' +5805    '</limlower>' +5806    '<superscript>' +5807    '<children>' +5808    '<identifier>n</identifier>' +5809    '<number>2</number>' +5810    '</children>' +5811    '</superscript>' +5812    '</children>' +5813    '</bigop>');5814};5815/**5816 * Variations of integrals.5817 */5818cvox.SemanticTreeTest.prototype.testStreeIntegrals = function() {5819  this.brief = true;5820  this.executeTreeTest(5821    '<mi>\u222B</mi>',5822    '<largeop>\u222B</largeop>');5823  this.executeTreeTest(5824    '<mi>\u222B</mi><mi>dx</mi>',5825    '<integral>' +5826    '<children>' +5827    '<largeop>\u222B</largeop>' +5828    '<empty/>' +5829    '<identifier>dx</identifier>' +5830    '</children>' +5831    '</integral>');5832  this.executeTreeTest(5833    '<mrow><mi>\u222B</mi><mi>x</mi><mi>dx</mi></mrow>',5834    '<integral>' +5835    '<children>' +5836    '<largeop>\u222B</largeop>' +5837    '<identifier>x</identifier>' +5838    '<identifier>dx</identifier>' +5839    '</children>' +5840    '</integral>');5841  this.executeTreeTest(5842    '<mrow><mi>\u222B</mi><mi>x</mi><mi>d</mi><mi>x</mi></mrow>',5843    '<integral>' +5844    '<children>' +5845    '<largeop>\u222B</largeop>' +5846    '<identifier>x</identifier>' +5847    '<punctuated>' +5848    '<content>' +5849    '<punctuation>\u2063</punctuation>' +5850    '</content>' +5851    '<children>' +5852    '<identifier>d</identifier>' +5853    '<punctuation>\u2063</punctuation>' +5854    '<identifier>x</identifier>' +5855    '</children>' +5856    '</punctuated>' +5857    '</children>' +5858    '</integral>');5859  this.executeTreeTest(5860    '<mrow><mi>\u222B</mi><mi>x</mi><mo>+</mo><mi>y</mi><mi>d</mi><mi>x</mi></mrow>',5861    '<integral>' +5862    '<children>' +5863    '<largeop>\u222B</largeop>' +5864    '<infixop>+' +5865    '<content>' +5866    '<operator>+</operator>' +5867    '</content>' +5868    '<children>' +5869    '<identifier>x</identifier>' +5870    '<identifier>y</identifier>' +5871    '</children>' +5872    '</infixop>' +5873    '<punctuated>' +5874    '<content>' +5875    '<punctuation>\u2063</punctuation>' +5876    '</content>' +5877    '<children>' +5878    '<identifier>d</identifier>' +5879    '<punctuation>\u2063</punctuation>' +5880    '<identifier>x</identifier>' +5881    '</children>' +5882    '</punctuated>' +5883    '</children>' +5884    '</integral>');5885  this.executeTreeTest(5886    '<munderover><mi>\u222B</mi><mn>0</mn><mn>10</mn></munderover>',5887    '<limboth>' +5888    '<children>' +5889    '<largeop>\u222B</largeop>' +5890    '<number>0</number>' +5891    '<number>10</number>' +5892    '</children>' +5893    '</limboth>');5894  this.executeTreeTest(5895    '<munder><mi>\u222B</mi><mn>X</mn></munder>',5896    '<limlower>' +5897    '<children>' +5898    '<largeop>\u222B</largeop>' +5899    '<identifier>X</identifier>' +5900    '</children>' +5901    '</limlower>');5902  this.executeTreeTest(5903    '<munderover><mi>\u222B</mi><mn>0</mn><mn>10</mn></munderover><mi>x</mi>' +5904    '<mi>d</mi><mi>x</mi>',5905    '<integral>' +5906    '<children>' +5907    '<limboth>' +5908    '<children>' +5909    '<largeop>\u222B</largeop>' +5910    '<number>0</number>' +5911    '<number>10</number>' +5912    '</children>' +5913    '</limboth>' +5914    '<identifier>x</identifier>' +5915    '<punctuated>' +5916    '<content>' +5917    '<punctuation>\u2063</punctuation>' +5918    '</content>' +5919    '<children>' +5920    '<identifier>d</identifier>' +5921    '<punctuation>\u2063</punctuation>' +5922    '<identifier>x</identifier>' +5923    '</children>' +5924    '</punctuated>' +5925    '</children>' +5926    '</integral>');5927  this.executeTreeTest(5928    '<munder><mi>\u222B</mi><mn>X</mn></munder><mi>x</mi><mi>dx</mi>',5929    '<integral>' +5930    '<children>' +5931    '<limlower>' +5932    '<children>' +5933    '<largeop>\u222B</largeop>' +5934    '<identifier>X</identifier>' +5935    '</children>' +5936    '</limlower>' +5937    '<identifier>x</identifier>' +5938    '<identifier>dx</identifier>' +5939    '</children>' +5940    '</integral>');5941  this.executeTreeTest(5942    '<munderover><mi>\u222B</mi><mn>0</mn><mn>10</mn></munderover><mi>x</mi>' +5943    '<mi>dx</mi><mo>+</mo><munderover><mi>\u222B</mi><mn>10</mn><mn>20</mn>' +5944    '</munderover><mi>x</mi><mi>dx</mi><mo>=</mo><munderover><mi>\u222B</mi>' +5945    '<mn>0</mn><mn>20</mn></munderover><mi>x</mi><mi>dx</mi>',5946    '<relseq>=' +5947    '<content>' +5948    '<relation>=</relation>' +5949    '</content>' +5950    '<children>' +5951    '<infixop>+' +5952    '<content>' +5953    '<operator>+</operator>' +5954    '</content>' +5955    '<children>' +5956    '<integral>' +5957    '<children>' +5958    '<limboth>' +5959    '<children>' +5960    '<largeop>\u222B</largeop>' +5961    '<number>0</number>' +5962    '<number>10</number>' +5963    '</children>' +5964    '</limboth>' +5965    '<identifier>x</identifier>' +5966    '<identifier>dx</identifier>' +5967    '</children>' +5968    '</integral>' +5969    '<integral>' +5970    '<children>' +5971    '<limboth>' +5972    '<children>' +5973    '<largeop>\u222B</largeop>' +5974    '<number>10</number>' +5975    '<number>20</number>' +5976    '</children>' +5977    '</limboth>' +5978    '<identifier>x</identifier>' +5979    '<identifier>dx</identifier>' +5980    '</children>' +5981    '</integral>' +5982    '</children>' +5983    '</infixop>' +5984    '<integral>' +5985    '<children>' +5986    '<limboth>' +5987    '<children>' +5988    '<largeop>\u222B</largeop>' +5989    '<number>0</number>' +5990    '<number>20</number>' +5991    '</children>' +5992    '</limboth>' +5993    '<identifier>x</identifier>' +5994    '<identifier>dx</identifier>' +5995    '</children>' +5996    '</integral>' +5997    '</children>' +5998    '</relseq>');5999  this.executeTreeTest(6000    '<mi>\u222B</mi><mi>\u222B</mi><mi>\u222B</mi><mi>dx</mi><mi>dy</mi><mi>dz</mi>',6001    '<integral>' +6002    '<children>' +6003    '<largeop>\u222B</largeop>' +6004    '<integral>' +6005    '<children>' +6006    '<largeop>\u222B</largeop>' +6007    '<integral>' +6008    '<children>' +6009    '<largeop>\u222B</largeop>' +6010    '<empty/>' +6011    '<identifier>dx</identifier>' +6012    '</children>' +6013    '</integral>' +6014    '<identifier>dy</identifier>' +6015    '</children>' +6016    '</integral>' +6017    '<identifier>dz</identifier>' +6018    '</children>' +6019    '</integral>');...tupu.js
Source:tupu.js  
1import Mock from './config'2Mock.mock(/info\/tupu/,'get',options=>{3  console.log(options)4  return {5    "Status": "200",6    "Message": "æ¥è¯¢æå",7    "OrderNumber": "ECIRELATION2018081714544389316056",8    "Result": {9      "Node": {10        "name": "æµ·éè¯å¸è¡ä»½æéå
¬å¸",11        "KeyNo": "56777fa57d850f62a5225be7d974a17e",12        "Category": 1,13        "ShortName": "æµ·éè¯å¸",14        "Count": 128,15        "Level": 0,16        "Children": [{17          "name": "坹夿èµ",18          "KeyNo": null,19          "Category": 2,20          "ShortName": "坹夿èµ",21          "Count": 70,22          "Level": 0,23          "Children": [{24            "name": "ä¸è¯ä¿¡ç¨å¢è¿è¡ä»½æéå
¬å¸",25            "KeyNo": "195562be947d311ee4d170aceb6a296c",26            "Category": 2,27            "ShortName": "ä¸è¯ä¿¡ç¨å¢è¿",28            "Count": 0,29            "Level": 1,30            "Children": null31          }, {32            "name": "æµ·éè¯å¸è¡ä»½æéå
¬å¸æ·±å³æ¢
æè·¯è¯å¸è¥ä¸é¨",33            "KeyNo": "1f4c40f0ed97c3baea83c149396fe495",34            "Category": 2,35            "ShortName": "æµ·éè¯å¸",36            "Count": 0,37            "Level": 1,38            "Children": null39          }, {40            "name": "æµ·éè¯å¸è¡ä»½æéå
¬å¸æ·±å³é«æ°ååéè¯å¸è¥ä¸é¨",41            "KeyNo": "afbc7aa4e7db21f68f132e01352e31fa",42            "Category": 2,43            "ShortName": "æµ·éè¯å¸",44            "Count": 0,45            "Level": 1,46            "Children": null47          }, {48            "name": "è¯éè¡ä»½æéå
¬å¸",49            "KeyNo": "00db45cb036ece3cfbc3897ffe372e74",50            "Category": 2,51            "ShortName": "è¯é",52            "Count": 0,53            "Level": 1,54            "Children": null55          }, {56            "name": "æµ·éè¯å¸è¡ä»½æéå
¬å¸æ·±å³å®æºè·¯è¯å¸è¥ä¸é¨",57            "KeyNo": "6b1f1f15f20c881879c41509b166f6c5",58            "Category": 2,59            "ShortName": "æµ·éè¯å¸",60            "Count": 0,61            "Level": 1,62            "Children": null63          }, {64            "name": "䏿µ·ææ³°ç½®ä¸ç®¡çæéå
¬å¸",65            "KeyNo": "0745ac985805e5013d890c79bfab4973",66            "Category": 2,67            "ShortName": "ææ³°ç½®ä¸",68            "Count": 0,69            "Level": 1,70            "Children": null71          }, {72            "name": "æµ·éè¯å¸è¡ä»½æéå
¬å¸æ·±å³æ·±å大éè¯å¸è¥ä¸é¨",73            "KeyNo": "6030d841e0b7b8bc34fcfd3ea310bea7",74            "Category": 2,75            "ShortName": "æµ·éè¯å¸",76            "Count": 0,77            "Level": 1,78            "Children": null79          }, {80            "name": "䏿µ·æµ·éè¯å¸èµäº§ç®¡çæéå
¬å¸",81            "KeyNo": "2dc36c7a5f117488be2adee032f5c770",82            "Category": 2,83            "ShortName": "æµ·éè¯å¸èµäº§",84            "Count": 0,85            "Level": 1,86            "Children": null87          }, {88            "name": "æµ·éåæ°è¯å¸æèµæéå
¬å¸",89            "KeyNo": "420447e12564fb5e424809af5c99c472",90            "Category": 2,91            "ShortName": "æµ·éåæ°è¯å¸",92            "Count": 0,93            "Level": 1,94            "Children": null95          }, {96            "name": "䏿µ·æ¶å
ç§æè¡ä»½æéå
¬å¸",97            "KeyNo": "1bb3cb0f2cf7830dc685465e91ebc3ae",98            "Category": 2,99            "ShortName": "䏿µ·æ¶å
",100            "Count": 0,101            "Level": 1,102            "Children": null103          }, {104            "name": "åè¥åä¸å
å¦è¡ä»½æéå
¬å¸",105            "KeyNo": "ec05f25a4e751abcf4a2c30ead6142ac",106            "Category": 2,107            "ShortName": "åä¸å
å¦",108            "Count": 0,109            "Level": 1,110            "Children": null111          }, {112            "name": "å京æç«æ¹ç§æåå±è¡ä»½æéå
¬å¸",113            "KeyNo": "ffc1d9c689efdda49cc57fae05590072",114            "Category": 2,115            "ShortName": "æç«æ¹ç§æå",116            "Count": 0,117            "Level": 1,118            "Children": null119          }, {120            "name": "å京èè½é¼åç§æè¡ä»½æéå
¬å¸",121            "KeyNo": "10798ccf855a4e98d18078111b61142f",122            "Category": 2,123            "ShortName": "èè½é¼å",124            "Count": 0,125            "Level": 1,126            "Children": null127          }, {128            "name": "å¹¿ä¸æ¾æ¬ç»¿è²æ°æè¡ä»½æéå
¬å¸",129            "KeyNo": "97d4e0e2636b2222de6d3d36ea1d8f62",130            "Category": 2,131            "ShortName": "æ¾æ¬ç»¿è²æ°æ",132            "Count": 0,133            "Level": 1,134            "Children": null135          }, {136            "name": "æµ·éè¯å¸è¡ä»½æéå
¬å¸æ·±å³åå
¬å¸",137            "KeyNo": "3d40214923e321c47afdb5ff7c94bbb3",138            "Category": 2,139            "ShortName": "æµ·éè¯å¸",140            "Count": 0,141            "Level": 1,142            "Children": null143          }, {144            "name": "æµ·éå¼å
æèµæéå
¬å¸",145            "KeyNo": "a54d8f397f474591d06a6a16a1eaf0f7",146            "Category": 2,147            "ShortName": "æµ·éå¼å
æèµ",148            "Count": 0,149            "Level": 1,150            "Children": null151          }, {152            "name": "åå·é±¼é³å¾ä¿¡æ¯ææ¯è¡ä»½æéå
¬å¸",153            "KeyNo": "96097759f2c3d5486ee62722acb12c49",154            "Category": 2,155            "ShortName": "é±¼é³å¾ä¿¡æ¯æ",156            "Count": 0,157            "Level": 1,158            "Children": null159          }, {160            "name": "ä¸å½ä¸ç
¤è½æºè¡ä»½æéå
¬å¸",161            "KeyNo": "9230cf099809fa150e3a80f1bc6ebafc",162            "Category": 2,163            "ShortName": "ä¸ç
¤è½æº",164            "Count": 0,165            "Level": 1,166            "Children": null167          }, {168            "name": "䏿µ·ççè½¯ä»¶ææ¯è¡ä»½æéå
¬å¸",169            "KeyNo": "01c774cca57a2a243c089ceb281a3490",170            "Category": 2,171            "ShortName": "ççè½¯ä»¶ææ¯",172            "Count": 0,173            "Level": 1,174            "Children": null175          }, {176            "name": "è´µå·é»é©°ä¿¡æ¯è¡ä»½æéå
¬å¸",177            "KeyNo": "6a256d8dc7c0b6216173b049c20579d2",178            "Category": 2,179            "ShortName": "é»é©°ä¿¡æ¯",180            "Count": 0,181            "Level": 1,182            "Children": null183          }, {184            "name": "å®å¾½å¯ç
颿è¡ä»½æéå
¬å¸",185            "KeyNo": "b0d810110c1d62712f25bafa6bf7960f",186            "Category": 2,187            "ShortName": "å¯ç
颿",188            "Count": 0,189            "Level": 1,190            "Children": null191          }, {192            "name": "ä¸å½âæ¯å©æ¶ç´æ¥è¡ææèµåºé",193            "KeyNo": "1b6e0f2bb0fbc66404d555b61c06a6c9",194            "Category": 2,195            "ShortName": "âæ¯å©æ¶ç´æ¥",196            "Count": 0,197            "Level": 1,198            "Children": null199          }, {200            "name": "æµ·å¯äº§ä¸æèµåºé管çæéå
¬å¸",201            "KeyNo": "f8b9cfddc01adc227ec7b5c093ad1948",202            "Category": 2,203            "ShortName": "æµ·å¯äº§ä¸æèµ",204            "Count": 0,205            "Level": 1,206            "Children": null207          }, {208            "name": "ç康å»è¯è¡ä»½æéå
¬å¸",209            "KeyNo": "97c2f68a930871fc66d5c4e585ca9c41",210            "Category": 2,211            "ShortName": "ç康å»è¯",212            "Count": 0,213            "Level": 1,214            "Children": null215          }, {216            "name": "䏿µ·è¾°å
å»çç§æè¡ä»½æéå
¬å¸",217            "KeyNo": "1ca13511a91a498e704440f7dfd353e9",218            "Category": 2,219            "ShortName": "è¾°å
å»ç",220            "Count": 0,221            "Level": 1,222            "Children": null223          }, {224            "name": "æµ·å¯éåºé管çæéå
¬å¸",225            "KeyNo": "9d847a6dc9ca0ada7124c4df25bae41c",226            "Category": 2,227            "ShortName": "æµ·å¯éåºé",228            "Count": 0,229            "Level": 1,230            "Children": null231          }, {232            "name": "åæè¾¾æºè½è£
å¤éå¢è¡ä»½æéå
¬å¸",233            "KeyNo": "e986b84525c98322b29035b740596783",234            "Category": 2,235            "ShortName": "åæè¾¾æºè½è£
",236            "Count": 0,237            "Level": 1,238            "Children": null239          }, {240            "name": "ç¯æçµåè¡ä»½æéå
¬å¸",241            "KeyNo": "bf178d305707db324c7845acecb7034b",242            "Category": 2,243            "ShortName": "ç¯æçµå",244            "Count": 0,245            "Level": 1,246            "Children": null247          }, {248            "name": "å京æåè½æºè¡ä»½æéå
¬å¸",249            "KeyNo": "3184e61178d3cb711f235300223e6b3f",250            "Category": 2,251            "ShortName": "æåè½æº",252            "Count": 0,253            "Level": 1,254            "Children": null255          }, {256            "name": "䏿µ·çæºç½®ä¸é¡¾é®è¡ä»½æéå
¬å¸",257            "KeyNo": "e51bb9b3a3a95c8cbedcc0ce1ece5e9e",258            "Category": 2,259            "ShortName": "çæºç½®ä¸é¡¾é®",260            "Count": 0,261            "Level": 1,262            "Children": null263          }, {264            "name": "æ±å¾å©(常å·)çµåè¡ä»½æéå
¬å¸",265            "KeyNo": "c6e3f141d5fad6c299d72f7c830a269c",266            "Category": 2,267            "ShortName": "æ±å¾å©çµå",268            "Count": 0,269            "Level": 1,270            "Children": null271          }, {272            "name": "䏿µ·ç¾è¯ºç¦ç§æè¡ä»½æéå
¬å¸",273            "KeyNo": "767e3d1b1a6f0375a81d243e8b78a788",274            "Category": 2,275            "ShortName": "ç¾è¯ºç¦",276            "Count": 0,277            "Level": 1,278            "Children": null279          }, {280            "name": "大åç
¤ä¸è¡ä»½æéå
¬å¸",281            "KeyNo": "fb12fa7914412ed1fdf83b56febc189a",282            "Category": 2,283            "ShortName": "大åç
¤ä¸",284            "Count": 0,285            "Level": 1,286            "Children": null287          }, {288            "name": "䏿µ·å®é¼æèµè¡ä»½æéå
¬å¸",289            "KeyNo": "874e591224be57f5ed6d602ae7e5adeb",290            "Category": 2,291            "ShortName": "å®é¼æèµ",292            "Count": 0,293            "Level": 1,294            "Children": null295          }, {296            "name": "宿ºç
¤ä¸éå¢è¡ä»½æéå
¬å¸",297            "KeyNo": "2820ccc953096c74fc1a0a1909bd54b8",298            "Category": 2,299            "ShortName": "ç
¤ä¸éå¢",300            "Count": 0,301            "Level": 1,302            "Children": null303          }, {304            "name": "è´µå·çæ±ç²¾ç
¤è¡ä»½æéå
¬å¸",305            "KeyNo": "f4cc2499c8d4e806dd82e49b149d180d",306            "Category": 2,307            "ShortName": "çæ±ç²¾ç
¤",308            "Count": 0,309            "Level": 1,310            "Children": null311          }, {312            "name": "äºåä¸ç»¿çç©è¡ä»½æéå
¬å¸",313            "KeyNo": "d15da1b1f4dc8aa6c2466176fbe5eedc",314            "Category": 2,315            "ShortName": "ä¸ç»¿çç©",316            "Count": 0,317            "Level": 1,318            "Children": null319          }, {320            "name": "å¯å½åºé管çæéå
¬å¸",321            "KeyNo": "59129a4cabfae9f6a54121a7ffc40a69",322            "Category": 2,323            "ShortName": "å¯å½åºé",324            "Count": 0,325            "Level": 1,326            "Children": null327          }, {328            "name": "山西å
°è±ç§æåä¸è¡ä»½æéå
¬å¸",329            "KeyNo": "2b6ade1cedaf103ffc1fafeed5ac7a2a",330            "Category": 2,331            "ShortName": "å
°è±ç§æåä¸",332            "Count": 0,333            "Level": 1,334            "Children": null335          }, {336            "name": "æµæ±å¤©æ¾å»ç卿¢°è¡ä»½æéå
¬å¸",337            "KeyNo": "8b35cab83c4bd0c44cec41bcc7e75b28",338            "Category": 2,339            "ShortName": "天æ¾å»ç卿¢°",340            "Count": 0,341            "Level": 1,342            "Children": null343          }, {344            "name": "䏿µ·é¸£å¿çµå¨è¡ä»½æéå
¬å¸",345            "KeyNo": "7b93aef192661e0751bf5ebcb1ca0539",346            "Category": 2,347            "ShortName": "鸣å¿çµå¨",348            "Count": 0,349            "Level": 1,350            "Children": null351          }, {352            "name": "䏿µ·æµ·èæèµå屿éå
¬å¸",353            "KeyNo": "885fc358990d6bb7010526ba1cc3980c",354            "Category": 2,355            "ShortName": "æµ·èæèµ",356            "Count": 0,357            "Level": 1,358            "Children": null359          }, {360            "name": "äºåéä¸è¡ä»½æéå
¬å¸",361            "KeyNo": "b635bc55738f0947aed0fb3fbb88853c",362            "Category": 2,363            "ShortName": "äºåéä¸",364            "Count": 0,365            "Level": 1,366            "Children": null367          }, {368            "name": "ä¸ç
¤æ°éè½æºè¡ä»½æéå
¬å¸",369            "KeyNo": "fc485d7e292b45ed5b51cbacfe6c1c20",370            "Category": 2,371            "ShortName": "ä¸ç
¤æ°éè½æº",372            "Count": 0,373            "Level": 1,374            "Children": null375          }, {376            "name": "æ±èé
å
ç§æè¡ä»½æéå
¬å¸",377            "KeyNo": "51e84f1bed720783f1b947bdf3791a7e",378            "Category": 2,379            "ShortName": "æ±èé
å
",380            "Count": 0,381            "Level": 1,382            "Children": null383          }, {384            "name": "䏿µ·å¸å工念¦ä¸æ»å
¬å¸",385            "KeyNo": "82b73c574811820dcf59648c7439a53b",386            "Category": 2,387            "ShortName": "å工念¦ä¸",388            "Count": 0,389            "Level": 1,390            "Children": null391          }, {392            "name": "䏿µ·æå¥æèµå¨è¯¢æéå
¬å¸",393            "KeyNo": "c11fe32f62a00c81e2a88dc73593b376",394            "Category": 2,395            "ShortName": "æå¥æèµå¨è¯¢",396            "Count": 0,397            "Level": 1,398            "Children": null399          }, {400            "name": "䏿µ·ä¸åå塿éå
¬å¸",401            "KeyNo": "896ac3f46e4db437753681dd2d3b011c",402            "Category": 2,403            "ShortName": "ä¸ååå¡",404            "Count": 0,405            "Level": 1,406            "Children": null407          }, {408            "name": "æµ·éè¯å¸è¡ä»½æéå
¬å¸æ·±å³æ¯ç°è·¯è¯å¸è¥ä¸é¨",409            "KeyNo": "b8b7c302c4bcb0d2f466f68d43c71b7b",410            "Category": 2,411            "ShortName": "æµ·éè¯å¸",412            "Count": 0,413            "Level": 1,414            "Children": null415          }, {416            "name": "å½ä¹ææ è¡ä»½æéå
¬å¸",417            "KeyNo": "03ae78fa43cfdf11e9efa86613189001",418            "Category": 2,419            "ShortName": "å½ä¹ææ ",420            "Count": 0,421            "Level": 1,422            "Children": null423          }]424        }, {425          "name": "è¡ä¸",426          "KeyNo": null,427          "Category": 3,428          "ShortName": "è¡ä¸",429          "Count": 3,430          "Level": 0,431          "Children": [{432            "name": "æ é宿¡ä»¶è¡ä»½",433            "KeyNo": "56777fa57d850f62a5225be7d974a17e_æ é宿¡ä»¶è¡ä»½",434            "Category": 3,435            "ShortName": "æºå
³æ³äºº",436            "Count": 0,437            "Level": 1,438            "Children": null439          }, {440            "name": "æé宿¡ä»¶è¡ä»½",441            "KeyNo": "56777fa57d850f62a5225be7d974a17e_æé宿¡ä»¶è¡ä»½",442            "Category": 3,443            "ShortName": "æºå
³æ³äºº",444            "Count": 0,445            "Level": 1,446            "Children": null447          }, {448            "name": "å
¶ä»è¡ä¸",449            "KeyNo": "56777fa57d850f62a5225be7d974a17e_å
¶ä»è¡ä¸",450            "Category": 3,451            "ShortName": "å
¶ä»æèµè
",452            "Count": 0,453            "Level": 1,454            "Children": null455          }]456        }, {457          "name": "é«ç®¡",458          "KeyNo": null,459          "Category": 4,460          "ShortName": "é«ç®¡",461          "Count": 24,462          "Level": 0,463          "Children": [{464            "name": "æå®¶ç¤¼",465            "KeyNo": null,466            "Category": 4,467            "ShortName": "è£äº",468            "Count": 0,469            "Level": 0,470            "Children": null471          }, {472            "name": "è¡æµ·è",473            "KeyNo": null,474            "Category": 4,475            "ShortName": "çäº",476            "Count": 0,477            "Level": 0,478            "Children": null479          }, {480            "name": "å®ä¸æµ©",481            "KeyNo": null,482            "Category": 4,483            "ShortName": "çäº",484            "Count": 0,485            "Level": 0,486            "Children": null487          }, {488            "name": "ç¿ç§å¹³",489            "KeyNo": null,490            "Category": 4,491            "ShortName": "è£äºå
¼æ»ç»ç",492            "Count": 0,493            "Level": 0,494            "Children": null495          }, {496            "name": "éå°è¸",497            "KeyNo": null,498            "Category": 4,499            "ShortName": "çäº",500            "Count": 0,501            "Level": 0,502            "Children": null503          }, {504            "name": "卿°",505            "KeyNo": null,506            "Category": 4,507            "ShortName": "è£äºé¿",508            "Count": 0,509            "Level": 0,510            "Children": null511          }, {512            "name": "é¬è·è",513            "KeyNo": null,514            "Category": 4,515            "ShortName": "è£äº",516            "Count": 0,517            "Level": 0,518            "Children": null519          }, {520            "name": "å¯ç
",521            "KeyNo": null,522            "Category": 4,523            "ShortName": "çäº",524            "Count": 0,525            "Level": 0,526            "Children": null527          }, {528            "name": "许建å½",529            "KeyNo": null,530            "Category": 4,531            "ShortName": "è£äº",532            "Count": 0,533            "Level": 0,534            "Children": null535          }, {536            "name": "张鸣",537            "KeyNo": null,538            "Category": 4,539            "ShortName": "è£äº",540            "Count": 0,541            "Level": 0,542            "Children": null543          }, {544            "name": "è®æ¿å
",545            "KeyNo": null,546            "Category": 4,547            "ShortName": "çäº",548            "Count": 0,549            "Level": 0,550            "Children": null551          }, {552            "name": "宿¥é£",553            "KeyNo": null,554            "Category": 4,555            "ShortName": "çäº",556            "Count": 0,557            "Level": 0,558            "Children": null559          }, {560            "name": "ææ",561            "KeyNo": null,562            "Category": 4,563            "ShortName": "çäº",564            "Count": 0,565            "Level": 0,566            "Children": null567          }, {568            "name": "ç¨å³°",569            "KeyNo": null,570            "Category": 4,571            "ShortName": "çäº",572            "Count": 0,573            "Level": 0,574            "Children": null575          }, {576            "name": "å´çº¢ä¼",577            "KeyNo": null,578            "Category": 4,579            "ShortName": "çäº",580            "Count": 0,581            "Level": 0,582            "Children": null583          }, {584            "name": "æ²éå¬",585            "KeyNo": null,586            "Category": 4,587            "ShortName": "è£äº",588            "Count": 0,589            "Level": 0,590            "Children": null591          }, {592            "name": "ä½èè",593            "KeyNo": null,594            "Category": 4,595            "ShortName": "è£äº",596            "Count": 0,597            "Level": 0,598            "Children": null599          }, {600            "name": "èéå®",601            "KeyNo": null,602            "Category": 4,603            "ShortName": "è£äº",604            "Count": 0,605            "Level": 0,606            "Children": null607          }, {608            "name": "å¼ æ°ç«",609            "KeyNo": null,610            "Category": 4,611            "ShortName": "è£äº",612            "Count": 0,613            "Level": 0,614            "Children": null615          }, {616            "name": "éæ",617            "KeyNo": null,618            "Category": 4,619            "ShortName": "è£äº",620            "Count": 0,621            "Level": 0,622            "Children": null623          }, {624            "name": "éè¾å³°",625            "KeyNo": null,626            "Category": 4,627            "ShortName": "çäº",628            "Count": 0,629            "Level": 0,630            "Children": null631          }, {632            "name": "å¯ä»",633            "KeyNo": null,634            "Category": 4,635            "ShortName": "è£äº",636            "Count": 0,637            "Level": 0,638            "Children": null639          }, {640            "name": "åå¿æ",641            "KeyNo": null,642            "Category": 4,643            "ShortName": "è£äº",644            "Count": 0,645            "Level": 0,646            "Children": null647          }, {648            "name": "çç¾å¨",649            "KeyNo": null,650            "Category": 4,651            "ShortName": "çäº",652            "Count": 0,653            "Level": 0,654            "Children": null655          }]656        }, {657          "name": "åå²è¡ä¸",658          "KeyNo": null,659          "Category": 8,660          "ShortName": "åå²è¡ä¸",661          "Count": 0,662          "Level": 0,663          "Children": null664        }, {665          "name": "å岿³äºº",666          "KeyNo": null,667          "Category": 9,668          "ShortName": "å岿³äºº",669          "Count": 1,670          "Level": 0,671          "Children": [{672            "name": "çå¼å½",673            "KeyNo": null,674            "Category": 9,675            "ShortName": null,676            "Count": 0,677            "Level": 0,678            "Children": null679          }]680        }, {681          "name": "è£å¤æä¹¦",682          "KeyNo": null,683          "Category": 6,684          "ShortName": "è£å¤æä¹¦",685          "Count": 29,686          "Level": 0,687          "Children": [{688            "name": "æ²³åç¾çå¾å¸äºå¡æ",689            "KeyNo": "w24ce750b40e7a70e0d22a4ac9518708",690            "Category": 6,691            "ShortName": "æµ·éè¯å¸",692            "Count": 0,693            "Level": 0,694            "Children": null695          }, {696            "name": "æµ·éè¯å¸è¡ä»½æéå
¬å¸è¥¿å®è¥¿æ°è¡è¯å¸è¥ä¸é¨",697            "KeyNo": "8113bdda7e9f33ac995338a40387f0e3",698            "Category": 6,699            "ShortName": "æµ·éè¯å¸",700            "Count": 0,701            "Level": 0,702            "Children": null703          }, {704            "name": "é»é¾æ±ççæåºæ¿å°äº§å¼åé墿é责任å
¬å¸",705            "KeyNo": "854ebb143bba939284295da846cf1972",706            "Category": 6,707            "ShortName": "æµ·éè¯å¸",708            "Count": 0,709            "Level": 0,710            "Children": null711          }, {712            "name": "æµ·éè¯å¸è¡ä»½æéå
¬å¸ç»å
´å³å¨è·¯è¯å¸è¥ä¸é¨",713            "KeyNo": "e3de61d8b3f7b37af3f539fadc54368a",714            "Category": 6,715            "ShortName": "æµ·éè¯å¸",716            "Count": 0,717            "Level": 0,718            "Children": null719          }, {720            "name": "æµ·éè¯å¸æéå
¬å¸",721            "KeyNo": "34b176fab493cb533c9868fc114ab9cf",722            "Category": 6,723            "ShortName": "æµ·éè¯å¸",724            "Count": 0,725            "Level": 0,726            "Children": null727          }, {728            "name": "䏿µ·å½æ³°åå®è¯å¸èµäº§ç®¡çæéå
¬å¸",729            "KeyNo": "6262ee34e9ddd285812f52d66a3d5ae3",730            "Category": 6,731            "ShortName": "æµ·éè¯å¸",732            "Count": 0,733            "Level": 0,734            "Children": null735          }, {736            "name": "è¾½å®æ¬£æ³°è¡ä»½æéå
¬å¸",737            "KeyNo": "69ce27fe94bdd779b12f075e6e723fe6",738            "Category": 6,739            "ShortName": "æµ·éè¯å¸",740            "Count": 0,741            "Level": 0,742            "Children": null743          }, {744            "name": "䏿µ·èæ¸
åå¡å¨è¯¢æéå
¬å¸",745            "KeyNo": "cbe0be0a816573e8948d53bf680c6709",746            "Category": 6,747            "ShortName": "æµ·éè¯å¸",748            "Count": 0,749            "Level": 0,750            "Children": null751          }, {752            "name": "æµ·éè¯å¸è¡ä»½æéå
¬å¸æ°ä½å³å¨åè·¯è¯å¸è¥ä¸é¨",753            "KeyNo": "6cb3040322d7acbc8bea4d4543bfe8a2",754            "Category": 6,755            "ShortName": "æµ·éè¯å¸",756            "Count": 0,757            "Level": 0,758            "Children": null759          }, {760            "name": "䏿µ·èå®äºåé宿éå
¬å¸",761            "KeyNo": "553977322a4266555452e568a24cf045",762            "Category": 6,763            "ShortName": "æµ·éè¯å¸",764            "Count": 0,765            "Level": 0,766            "Children": null767          }, {768            "name": "åææèéå¢è¡ä»½æéå
¬å¸",769            "KeyNo": "08853b65ebb39abaf86d0393f5852c15",770            "Category": 6,771            "ShortName": "æµ·éè¯å¸",772            "Count": 0,773            "Level": 0,774            "Children": null775          }, {776            "name": "ä¸æä¿¡ç¨æ
ä¿æéå
¬å¸",777            "KeyNo": "0e713b9512d878ead20036b7e0832d28",778            "Category": 6,779            "ShortName": "æµ·éè¯å¸",780            "Count": 0,781            "Level": 0,782            "Children": null783          }, {784            "name": "æµ·éè¯å¸è¡ä»½æéå
¬å¸ç¦å·å¹¿è¾¾è·¯è¯å¸è¥ä¸é¨",785            "KeyNo": "edb841da32a9c85117085856ddf88753",786            "Category": 6,787            "ShortName": "æµ·éè¯å¸",788            "Count": 0,789            "Level": 0,790            "Children": null791          }, {792            "name": "æµ·éè¯å¸è¡ä»½æéå
¬å¸è¥å£è¾½æ²³å¤§è¡è¯å¸è¥ä¸é¨",793            "KeyNo": "bba8c820f4b941ed04f3024a055238d1",794            "Category": 6,795            "ShortName": "æµ·éè¯å¸",796            "Count": 0,797            "Level": 0,798            "Children": null799          }, {800            "name": "æµ·éè¯å¸è¡ä»½æéå
¬å¸ä¸æµ·æ®éåºå®å·è·¯è¯å¸è¥ä¸é¨",801            "KeyNo": "a0561ea3366f8d72dbacafd218224868",802            "Category": 6,803            "ShortName": "æµ·éè¯å¸",804            "Count": 0,805            "Level": 0,806            "Children": null807          }, {808            "name": "䏿µ·æµ·éè¯å¸èµäº§ç®¡çæéå
¬å¸",809            "KeyNo": "2dc36c7a5f117488be2adee032f5c770",810            "Category": 6,811            "ShortName": "æµ·éè¯å¸",812            "Count": 0,813            "Level": 0,814            "Children": null815          }, {816            "name": "æµ·éè¯å¸è¡ä»½æéå
¬å¸æ·±å³åå
¬å¸çº¢å²ä¸è·¯è¯å¸è¥ä¸é¨",817            "KeyNo": "f02c6e9d56e8aa59146123504d606cc7",818            "Category": 6,819            "ShortName": "æµ·éè¯å¸",820            "Count": 0,821            "Level": 0,822            "Children": null823          }, {824            "name": "æ¦æ±å»ºå·¥ç¬¬ä¸å»ºçæéå
¬å¸",825            "KeyNo": "1c7fcaffce786c65678954e184c5d89c",826            "Category": 6,827            "ShortName": "æµ·éè¯å¸",828            "Count": 0,829            "Level": 0,830            "Children": null831          }, {832            "name": "æ¦æ±çº¢æ¥åé¤é¥®æéå
¬å¸",833            "KeyNo": "5edeb8ed1f67943a9f7e5ba660a00d37",834            "Category": 6,835            "ShortName": "æµ·éè¯å¸",836            "Count": 0,837            "Level": 0,838            "Children": null839          }, {840            "name": "æµ·éè¯å¸è¡ä»½æéå
¬å¸å¼åæµ©ç¹æ°åä¸è¡è¯å¸è¥ä¸é¨",841            "KeyNo": "06e451d599b6ad92d67118da27c5a622",842            "Category": 6,843            "ShortName": "æµ·éè¯å¸",844            "Count": 0,845            "Level": 0,846            "Children": null847          }, {848            "name": "æµ·éè¯å¸è¡ä»½æéå
¬å¸ç¦å·ç¾¤ä¼è·¯è¯å¸è¥ä¸é¨",849            "KeyNo": "edb841da32a9c85117085856ddf88753",850            "Category": 6,851            "ShortName": "æµ·éè¯å¸",852            "Count": 0,853            "Level": 0,854            "Children": null855          }, {856            "name": "ä¸å½é¶æ²³æèµç®¡çæéå
¬å¸",857            "KeyNo": "c62b2a20020f45cf30acd00680b5df28",858            "Category": 6,859            "ShortName": "æµ·éè¯å¸",860            "Count": 0,861            "Level": 0,862            "Children": null863          }, {864            "name": "æç¹ï¼æ·±å³ï¼åºé管çæéå
¬å¸",865            "KeyNo": "cd137e7eed6cab1ce87675992f4d9eae",866            "Category": 6,867            "ShortName": "æµ·éè¯å¸",868            "Count": 0,869            "Level": 0,870            "Children": null871          }, {872            "name": "æç¹(æ·±å³)åºé管çæéå
¬å¸",873            "KeyNo": "cd137e7eed6cab1ce87675992f4d9eae",874            "Category": 6,875            "ShortName": "æµ·éè¯å¸",876            "Count": 0,877            "Level": 0,878            "Children": null879          }, {880            "name": "æµ·éè¯å¸è¡ä»½æéå
¬å¸æ·±å³åå
¬å¸",881            "KeyNo": "3d40214923e321c47afdb5ff7c94bbb3",882            "Category": 6,883            "ShortName": "æµ·éè¯å¸",884            "Count": 0,885            "Level": 0,886            "Children": null887          }, {888            "name": "䏿µ·è±ç¥ç¾è´§ååº",889            "KeyNo": "d9ac6748de89e4d228ba311b3402820c",890            "Category": 6,891            "ShortName": "æµ·éè¯å¸",892            "Count": 0,893            "Level": 0,894            "Children": null895          }, {896            "name": "䏿µ·ä¸èè¡ä»½æéå
¬å¸",897            "KeyNo": "fdf7152d4fdbed7e20073111380ab099",898            "Category": 6,899            "ShortName": "æµ·éè¯å¸",900            "Count": 0,901            "Level": 0,902            "Children": null903          }, {904            "name": "æ¦æ±å¸ä½æ¿ä¿éåæ¿å±ç®¡çå±",905            "KeyNo": "g41549c2201cb46a7e190274d9e15c93",906            "Category": 6,907            "ShortName": "æµ·éè¯å¸",908            "Count": 0,909            "Level": 0,910            "Children": null911          }, {912            "name": "æ¦æ±çåæ¿å°äº§å¼åæéå
¬å¸",913            "KeyNo": "6f6707446f97ea5fa1b73e53056d598a",914            "Category": 6,915            "ShortName": "æµ·éè¯å¸",916            "Count": 0,917            "Level": 0,918            "Children": null919          }]920        }, {921          "name": "æ³é¢å
¬å",922          "KeyNo": null,923          "Category": 5,924          "ShortName": "æ³é¢å
¬å",925          "Count": 1,926          "Level": 0,927          "Children": [{928            "name": "卿µ·èµæè´¸ææéå
¬å¸",929            "KeyNo": "6c24f8e33c4e06a101e19f34056ab406",930            "Category": 5,931            "ShortName": "èµæè´¸æ",932            "Count": 0,933            "Level": 0,934            "Children": null935          }]936        }]937      }938    }939  }...help-center.js
Source:help-center.js  
1import LF from 'LF';2import Vue from 'vue';3//å¼å
¥å
Œ
±çheaderåfooter4import LfHeader from '../../../components/header_new.vue';5import LfFooter from '../../../components/footer.vue';6import LfSearch from '../../../components/search.vue';7import {Message, Card,Carousel,CarouselItem,Tree,Select,Button} from 'element-ui'  ;8Vue.use(Card)9Vue.use(Carousel)10Vue.use(CarouselItem)11Vue.use(Tree)12Vue.use(Select)13Vue.use(Button)14new Vue({15             el: '#app',16             data: {17                          searchStr:'', 18                          show:false,19                    introduce:false,              //å
³äºèå±±20                    management:false,       //ç»è¥ç念21                    recruit:false,                   //æè´¤çº³å£«22                   aboutMarket:false,         //å
³äºè¢é¼ éå¸23                   integral:false,                  //éç¨ç§¯å24                   understandInt:false,         //äºè§£ç§¯å25                   intRule:false,                     //积åè§å26                   distribution:false,              //ä¼åå享æ¶è´¹27                   settled:false,                   //åå®¶å
¥é©»28                    user:false,                       //ç¨æ·29                   vip:false,                           //åéä¼å30                   shop:false,                        //åæ·31                   operate:false,                    //è¿è¥ä¸å¿32                   opipion:false,                    //æè§å»ºè®®33                   registration:false,              //ç¨æ·æ³¨ååè®®34                   privacy:false,                     //éç§æ¿ç35                   contactUS:false,                //èç³»æä»¬36                   customer:false,                  //客ææå¡37                          helpMsg: [{38                                      label: 'å
³äºæä»¬',39                                      children: [{40                                              label: '>å
³äºèå±±éå¿',                                                                                                      41                                          },{42                                            label: '>ç»è¥ç念',43                                          },{44                                            label: '>æè´¤çº³å£«',45                                          }]46                                    },{47                                      label: 'è¢é¼ éå¸',48                                      children: [{49                                              label: '>å
³äºè¢é¼ éå¸',                                                        50                                          },{51                                            label: '>éç¨ç§¯å',52                                          },{53                                            label: '>äºè§£ç§¯å',54                                          },{55                                            label: '>积åè§å',56                                          },{57                                            label: '>ä¼åå享æ¶è´¹',58                                          },{59                                            label: '>åå®¶å
¥é©»',60                                          }]61                                    },{62                                      label: 'å使¨å¹¿',63                                      children: [{64                                            label: '>ç¨æ·',                                                        65                                          },{66                                            label: '>åéä¼å',67                                          },{68                                            label: '>åæ·',69                                          },{70                                            label: '>è¿è¥ä¸å¿',71                                          }]72                                    },{73                                      label: 'æè§åé¦',74                                      children: [{75                                            label: '>æè§å»ºè®®',                                                        76                                          },{77                                            label: '>ç¨æ·æ³¨ååè®®',78                                          },{79                                            label: '>éç§æ¿ç',80                                          }]81                                    },{82                                      label: 'èç³»æä»¬',83                                      children: [{84                                            label: '>èç³»æä»¬',                                                        85                                          },{86                                            label: '>客ææå¡',87                                          }]88                                    }],                     89                          defaultProps: {90                                  children: 'children',91                                  label: 'label'92                          }                       93            },94             methods: {95                          handleNodeClick(data,node,item) {console.log(data,node,item,'-------------------------------------------------------------------------------------------------');96                             //æætreeå
ç´ 97                          //   var tree = document.getElementsByClassName('el-tree');console.log(tree,'tree=============');98                          //   //å
³äºæä»¬99                          //   var about = document.getElementById('about');console.log(about,typeof(about),about instanceof Object)100                          //   var abNodes = about.getElementsByClassName('el-tree-node');console.log(abNodes)101                          //   //è¢é¼ éå¸102                          //   var market = document.getElementById('market');console.log(market)103                          //   var maNodes = market.getElementsByClassName('el-tree-node');console.log(maNodes)104                          //   //å使¨å¹¿105                          //   var cooperation = document.getElementById('cooperation');console.log(cooperation)106                          //   var coNodes = cooperation.getElementsByClassName('el-tree-node');console.log(coNodes)107                          //   //æè§åé¦108                          //   var opinion = document.getElementById('opinion');console.log(opinion)109                          //   var opNodes = opinion.getElementsByClassName('el-tree-node');console.log(abNodes)110                          //   //èç³»æä»¬111                          //   var contact = document.getElementById('contact');console.log(contact)112                          //   var coNodes = contact.getElementsByClassName('el-tree-node');console.log(coNodes,'------------------------------------->')                          113                          // node.parent.childNodes.forEach(function(item,index){114                          //           if(data.label == item.data.label ){115                          //                   console.log(item,data.label,index);116                          //                   if(node.parent.data.label == 'å
³äºæä»¬'){     console.log(abNodes[index+1],'å
³äºæä»¬')117                          //                               console.log(abNodes[index+1].innerText)                                                        118                          //                   }else if (node.parent.data.label == 'è¢é¼ éå¸') {   console.log(maNodes[index+1])119                                                       120                          //                   }121                          //           }122                          // });123                                  124                            125                            // console.log(about.getElementsByClassName('el-tree-node__content')[0],123)126                            // console.log(this);127                            // this.show = true;128                            if(data.label == ">å
³äºèå±±éå¿"){this.introduce = true;this.$refs.tree.$children[0].$children[1].$el.style.color= '#f37e01';}else{this.introduce = false;this.$refs.tree.$children[0].$children[1].$el.style.color= ''};129                            if(data.label == ">ç»è¥ç念"){this.management = true;this.$refs.tree.$children[0].$children[2].$el.style.color= '#f37e01';}else{this.management = false;this.$refs.tree.$children[0].$children[2].$el.style.color= ''};                            130                            if(data.label == ">æè´¤çº³å£«"){this.recruit = true;this.$refs.tree.$children[0].$children[3].$el.style.color= '#f37e01';}else{this.recruit = false;this.$refs.tree.$children[0].$children[3].$el.style.color= ''};131                            if(data.label == ">å
³äºè¢é¼ éå¸"){this.aboutMarket = true;this.$refs.tree.$children[1].$children[1].$el.style.color= '#f37e01';}else{this.aboutMarket = false;this.$refs.tree.$children[1].$children[1].$el.style.color= '';};132                            if(data.label == ">éç¨ç§¯å"){this.integral = true;this.$refs.tree.$children[1].$children[2].$el.style.color= '#f37e01';}else{this.integral = false;this.$refs.tree.$children[1].$children[2].$el.style.color= '';};133                            if(data.label == ">äºè§£ç§¯å"){this.understandInt = true;this.$refs.tree.$children[1].$children[3].$el.style.color= '#f37e01';}else{this.understandInt = false;this.$refs.tree.$children[1].$children[3].$el.style.color= '';};134                            if(data.label == ">积åè§å"){this.intRule = true;this.$refs.tree.$children[1].$children[4].$el.style.color= '#f37e01';}else{this.intRule = false;this.$refs.tree.$children[1].$children[4].$el.style.color= '';};135                            if(data.label == ">ä¼åå享æ¶è´¹"){this.distribution = true;this.$refs.tree.$children[1].$children[5].$el.style.color= '#f37e01';}else{this.distribution = false;this.$refs.tree.$children[1].$children[5].$el.style.color= '';};136                            if(data.label == ">åå®¶å
¥é©»"){this.settled = true;this.$refs.tree.$children[1].$children[6].$el.style.color= '#f37e01';}else{this.settled = false;this.$refs.tree.$children[1].$children[6].$el.style.color= '';};137                            if(data.label == ">ç¨æ·"){this.user = true;this.$refs.tree.$children[2].$children[1].$el.style.color= '#f37e01';}else{this.user = false;this.$refs.tree.$children[2].$children[1].$el.style.color= '';};138                            if(data.label == ">åéä¼å"){this.vip = true;this.$refs.tree.$children[2].$children[2].$el.style.color= '#f37e01';}else{this.vip = false;this.$refs.tree.$children[2].$children[2].$el.style.color= '';};139                            if(data.label == ">åæ·"){this.shop = true;this.$refs.tree.$children[2].$children[3].$el.style.color= '#f37e01';}else{this.shop = false;this.$refs.tree.$children[2].$children[3].$el.style.color= '';};140                            if(data.label == ">è¿è¥ä¸å¿"){this.operate = true;this.$refs.tree.$children[2].$children[4].$el.style.color= '#f37e01';}else{this.operate = false;this.$refs.tree.$children[2].$children[4].$el.style.color= '';};141                            if(data.label == ">æè§å»ºè®®"){this.opipion = true;this.$refs.tree.$children[3].$children[1].$el.style.color= '#f37e01'}else{this.opipion = false;this.$refs.tree.$children[3].$children[1].$el.style.color= ''};142                            if(data.label == ">ç¨æ·æ³¨ååè®®"){this.registration = true;this.$refs.tree.$children[3].$children[2].$el.style.color= '#f37e01'}else{this.registration = false;this.$refs.tree.$children[3].$children[2].$el.style.color= ''};143                            if(data.label == ">éç§æ¿ç"){this.privacy = true;this.$refs.tree.$children[3].$children[3].$el.style.color= '#f37e01'}else{this.privacy = false;this.$refs.tree.$children[3].$children[3].$el.style.color= ''};144                            if(data.label == ">èç³»æä»¬"){this.contactUS = true;this.$refs.tree.$children[4].$children[1].$el.style.color= '#f37e01'}else{this.contactUS = false;this.$refs.tree.$children[4].$children[1].$el.style.color= ''};145                            if(data.label == ">客ææå¡"){this.customer = true;this.$refs.tree.$children[4].$children[2].$el.style.color= '#f37e01'}else{this.customer = false;this.$refs.tree.$children[4].$children[2].$el.style.color= ''};146                          },147                          getName:function(name){'>'+name148                            if('>'+name == ">å
³äºèå±±éå¿"){this.introduce = true;this.$refs.tree.$children[0].node.expanded = true;this.$refs.tree.$children[0].$children[1].$el.style.color= '#f37e01';}else{this.aboutMarket = false;this.$refs.tree.$children[1].$children[1].$el.style.color= '';};149                            if('>'+name == ">ç»è¥ç念"){this.management = true;this.$refs.tree.$children[0].node.expanded = true;this.$refs.tree.$children[0].$children[2].$el.style.color= '#f37e01';}else{this.management = false;this.$refs.tree.$children[0].$children[2].$el.style.color= ''};                       150                            if('>'+name == ">æè´¤çº³å£«"){this.recruit = true;this.$refs.tree.$children[0].node.expanded = true;this.$refs.tree.$children[0].$children[3].$el.style.color= '#f37e01';}else{this.recruit = false;this.$refs.tree.$children[0].$children[3].$el.style.color= ''};151                            if('>'+name == ">å
³äºè¢é¼ éå¸"){this.aboutMarket = true;this.$refs.tree.$children[1].node.expanded = true;this.$refs.tree.$children[1].$children[1].$el.style.color= '#f37e01';}else{this.aboutMarket = false;this.$refs.tree.$children[1].$children[1].$el.style.color= '';};152                            if('>'+name == ">éç¨ç§¯å"){this.integral = true;this.$refs.tree.$children[1].node.expanded = true;this.$refs.tree.$children[1].$children[2].$el.style.color= '#f37e01';}else{this.integral = false;this.$refs.tree.$children[1].$children[2].$el.style.color= '';};153                            if('>'+name == ">äºè§£ç§¯å"){this.understandInt = true;this.$refs.tree.$children[1].node.expanded = true;this.$refs.tree.$children[1].$children[3].$el.style.color= '#f37e01';}else{this.understandInt = false;this.$refs.tree.$children[1].$children[3].$el.style.color= '';};154                            if('>'+name == ">积åè§å"){this.intRule = true;this.$refs.tree.$children[1].node.expanded = true;this.$refs.tree.$children[1].$children[4].$el.style.color= '#f37e01';}else{this.intRule = false;this.$refs.tree.$children[1].$children[4].$el.style.color= '';};155                            if('>'+name == ">ä¼åå享æ¶è´¹"){this.distribution = true;this.$refs.tree.$children[1].node.expanded = true;this.$refs.tree.$children[1].$children[5].$el.style.color= '#f37e01';}else{this.distribution = false;this.$refs.tree.$children[1].$children[5].$el.style.color= '';};156                            if('>'+name == ">åå®¶å
¥é©»"){this.settled = true;this.$refs.tree.$children[1].node.expanded = true;this.$refs.tree.$children[1].$children[6].$el.style.color= '#f37e01';}else{this.settled = false;this.$refs.tree.$children[1].$children[6].$el.style.color= '';};157                            if('>'+name == ">ç¨æ·"){this.user = true;this.$refs.tree.$children[2].node.expanded = true;this.$refs.tree.$children[2].$children[1].$el.style.color= '#f37e01';}else{this.user = false;this.$refs.tree.$children[2].$children[1].$el.style.color= '';};158                            if('>'+name == ">åéä¼å"){this.vip = true;this.$refs.tree.$children[2].node.expanded = true;this.$refs.tree.$children[2].$children[2].$el.style.color= '#f37e01';}else{this.vip = false;this.$refs.tree.$children[2].$children[2].$el.style.color= '';};159                            if('>'+name == ">åæ·"){this.shop = true;this.$refs.tree.$children[2].node.expanded = true;this.$refs.tree.$children[2].$children[3].$el.style.color= '#f37e01';}else{this.shop = false;this.$refs.tree.$children[2].$children[3].$el.style.color= '';};160                            if('>'+name == ">è¿è¥ä¸å¿"){this.operate = true;this.$refs.tree.$children[2].node.expanded = true;this.$refs.tree.$children[2].$children[4].$el.style.color= '#f37e01';}else{this.operate = false;this.$refs.tree.$children[2].$children[4].$el.style.color= '';};161                            if('>'+name == ">æè§å»ºè®®"){this.opipion = true;this.$refs.tree.$children[3].node.expanded = true;this.$refs.tree.$children[3].$children[1].$el.style.color= '#f37e01'}else{this.opipion = false;this.$refs.tree.$children[3].$children[1].$el.style.color= ''};162                            if('>'+name == ">ç¨æ·æ³¨ååè®®"){this.registration = true;this.$refs.tree.$children[3].node.expanded = true;this.$refs.tree.$children[3].$children[2].$el.style.color= '#f37e01'}else{this.registration = false;this.$refs.tree.$children[3].$children[2].$el.style.color= ''};163                            if('>'+name == ">éç§æ¿ç"){this.privacy = true;this.$refs.tree.$children[3].node.expanded = true;this.$refs.tree.$children[3].$children[3].$el.style.color= '#f37e01'}else{this.privacy = false;this.$refs.tree.$children[3].$children[3].$el.style.color= ''};164                            if('>'+name == ">èç³»æä»¬"){this.contactUS = true;this.$refs.tree.$children[4].node.expanded = true;this.$refs.tree.$children[4].$children[1].$el.style.color= '#f37e01'}else{this.contactUS = false;this.$refs.tree.$children[4].$children[1].$el.style.color= ''};165                            if('>'+name == ">客ææå¡"){this.customer = true;this.$refs.tree.$children[4].node.expanded = true;this.$refs.tree.$children[4].$children[2].$el.style.color= '#f37e01'; }else{this.customer = false;this.$refs.tree.$children[4].$children[2].$el.style.color= ''};166                            167                          },168                          check(q,w,e){169                                console.log(q,w,e)170                          },171                          isShow:function(){172                                    alert(123)173                          },174                          remove:function(store, data) {  175                             store.remove(data);  176                          },  177                          renderContent:function(createElement, { node, data, store }) {  178                                       var self = this;  179                                        return createElement('span', [  180                                                            createElement('span', node.label),  181                                                             createElement('span', {attrs:{  182                                                                  style:"float: right; margin-right: 20px"  183                                                             }},[  184                                                                      createElement('el-button',{attrs:{  185                                                                        size:"mini"  186                                                                    },on:{  187                                                                         click:function() {  188                                                                              console.info("ç¹å»äºèç¹" + data.id + "çæ·»å æé®");  189                                                                              store.append({ id: self.baseId++, label: 'testtest', children: [] }, data);  190                                                                          }  191                                                                    }},"æ·»å "),  192                                                                     createElement('el-button',{attrs:{  193                                                                       size:"mini"  194                                                                      },on:{  195                                                                       click:function() {  196                                                                             console.info("ç¹å»äºèç¹" + data.id + "çå é¤æé®");  197                                                                            store.remove(data);  198                                                                          }  199                                                                     }},"å é¤"),  200                                                              ]),  201                                        ]);  202                        } ,203                          closeService(){204                              var mapEle = document.getElementById("Map");205                              var parentEle = mapEle.parentNode;206                              parentEle.style.display = "none";207                          },208                          onlineSale(){209                              LF.net.getJSON("sys/after/sale", {}, function(res) {210                                  var href="";211                                 if(res.code==='000'){212                                          //href = "http://wpa.qq.com/msgrd?v=3&uin="+res.data.qq+"&site=qq&menu=yes";213                                          href="tencent://message/?uin="+res.data.qq+"&Site=qq&Menu=yes"214                                          window.open(href);215                                      }else{216                                         console.log(res.errorMessage);217                                     }218                                 });219                          },220                        	go(url) {221                                       LF.window.openWindow(url);222                          },223                          doSearch(){224                              if (this.searchStr == ''){225                                  Message({226                                     type: 'warning',227                                     message:"请è¾å
¥é¨çå·ï¼"228                                 });229                                  return;230                              }231                              LF.net.getJSON("/store/data/details", { houseNumber:this.searchStr }, res => {232                                  if(res.code == "000") {233                                      let storeId = res.data.id;234                                      if (storeId == ''){235                                         Message({236                                           type: 'warning',237                                           message:"æªæ¾å°å¯¹åºçå®ä½åºï¼è¯·éæ°è¾å
¥ï¼"238                                       });239                                         return;240                                     }241                                     LF.window.openWindow("/app/pages/store/storeshop.html?houseNumber="+this.searchStr + "&merchantId=" + storeId,"_self");242                                 } else {243                                  Message({244                                    type: 'warning',245                                    message:"æªæ¾å°å¯¹åºçå®ä½åºï¼è¯·éæ°è¾å
¥ï¼"246                                });247                              }248                          }, res => {249                            Message({250                             type: 'error',251                             message:res.errorMessage252                         });253                            console.log("errorï¼" + JSON.stringify(res));254                        });255                    },   256             },257             beforeMount(){258             },259             mounted() {console.log(location.href)260                   var  name = location.hash.replace('#','');console.log(name,5555);console.log(this.$refs.tree,147);261                           name = decodeURI(name);console.log(name,666)                   262                    this.getName(name);263                  264                    console.log(this.$refs.tree.$children[0].$children[1].$el);265                    // this.$refs.tree.$children[0].$children[1].$el.style.color = 'red';266                    // this.$refs.tree.$children[0].$children[1].$el.setAttribute('class', 'active');267             },268components: {269  LfHeader,270  LfSearch,271  LfFooter272},...sense.js
Source:sense.js  
1//keyCode å¼ å·¦ä¸å³ä¸ 37--402let people = document.querySelector("#people");3let sense_one = document.querySelector(".sense_one"); // åºæ¯ä¸4let sense_two = document.querySelector(".sense_two"); // åºæ¯äº5let sense_three = document.querySelector(".sense_three"); // åºæ¯ä¸6let sense_four = document.querySelector(".sense_four"); // åºæ¯å7let is_sense_two = false; // æ¯å¦è§£éåºæ¯äº8let is_sense_three = false; // æ¯å¦è§£éåºæ¯ä¸9let is_sense_four = false; // æ¯å¦è§£éåºæ¯å10let is_left = false; // æ¯å¦å¯ä»¥å¾å·¦è¾¹æ¥çåé¢çåºæ¯11let isMove = {12  left: "false",13  top: "false",14  right: "false",15  bottom: "false"16};17// ä¸å¼å§åºæ¯äºï¼ä¸ï¼åéè18sense_two.classList.add("displayNone");19sense_three.classList.add("displayNone");20sense_four.classList.add("displayNone");21// alert(people.offsetWidth);22document.onkeydown = function(ev) {23  var ev = ev || event;24  if (ev.keyCode == 37) {25    isMove["left"] = true;26  }27  if (ev.keyCode == 38) {28    isMove["top"] = true;29  }30  if (ev.keyCode == 39) {31    isMove["right"] = true;32  }33  if (ev.keyCode == 40) {34    isMove["bottom"] = true;35  }36};37document.onkeyup = function() {38  var ev = ev || event;39  if (ev.keyCode == 37) {40    isMove["left"] = false;41  }42  if (ev.keyCode == 38) {43    isMove["top"] = false;44  }45  if (ev.keyCode == 39) {46    isMove["right"] = false;47  }48  if (ev.keyCode == 40) {49    isMove["bottom"] = false;50  }51};52// currentPageå½åç¨æ·å¨çåªä¸é¡µ53let currentPage = 1;54// åå§å第ä¸åºæ¯çæ ·å¼55sense_one_init();56setInterval(function() {57  if (isMove["left"] == true) {58    let left = people.getBoundingClientRect().left; // å
ç´ è·ç¦»å·¦è¾¹çè·ç¦»59    if (left <= 0) {60      if (is_left == true && currentPage == 4) {61        currentPage = 3;62        removeDisplay(sense_four);63        sense_four.classList.add("displayNone");64        sense_three.classList.add("displayBlock"); //æ¾ç¤ºåºæ¯ä¸65        removeAnimation(sense_three);66        sense_three.classList.add("animationRight");67        //   sense_three.style.left = 0; //æ¾ç¤ºåºæ¯ä¸68      } else if (is_left == true && currentPage == 3) {69        currentPage = 2;70        removeDisplay(sense_three);71        sense_three.classList.add("displayNone");72        sense_two.classList.add("displayBlock"); //æ¾ç¤ºåºæ¯äº73        removeAnimation(sense_two);74        sense_two.classList.add("animationRight");75        //   sense_two.style.left = 0; //æ¾ç¤ºåºæ¯äº76      } else if (is_left == true && currentPage == 2) {77        currentPage = 1;78        removeDisplay(sense_two);79        sense_two.classList.add("displayNone");80        sense_one.classList.add("displayBlock"); //æ¾ç¤ºåºæ¯ä¸81        //æ¾ç¤ºåºæ¯ä¸82        removeAnimation(sense_one);83        sense_one.classList.add("animationRight");84      }85      people.style.left = window.innerWidth - people.offsetWidth + "px"; // 左边æ»åæ»å°æå·¦è¾¹ï¼é置为å³è¾¹86    } else {87      people.style.left = people.offsetLeft - 10 + "px";88    }89  }90  // if (isMove["top"] == true) {91  //     let top = people.getBoundingClientRect().top;92  //   people.style.top = people.offsetTop - 10 + "px";93  // }94  if (isMove["right"] == true) {95    console.log(currentPage);96    let right = people.getBoundingClientRect().right; // å
ç´ è·ç¦»å³è¾¹çè·ç¦»97    // let activityDistance = window.innerWidth - people.offsetWidth; // å¯ç§»å¨è·ç¦»98    // 夿æ¯å¦è¾¾å°æå³ç«¯99    if (right >= window.innerWidth) {100      people.style.left = people.offsetWidth + "px";101      is_sense_two = true; // å¼å¯åºæ¯äº102      if (is_sense_two == true && currentPage == 1) {103        // 妿æ¯ç¬¬ä¸åºæ¯è䏿¯ä»å³è¾¹è¿å»çå°±æ¯åæ¢ç¬¬äºåºæ¯104        currentPage = 2;105        // ç§»é¤åºæ¯ä¸106        removeAnimation(sense_one);107        sense_one.classList.add("animationLeft");108        sense_two.classList.remove("displayNone");109        sense_two.classList.add("displayBlock");110        // æ§è¡åºæ¯äºçæ ·å¼111        excutedAnimationTwo( 112          sense_two.children[0].children[0],113           sense_two.children[0].children[1],114          sense_two.children[1].children[0].children[0].children[0],115          sense_two.children[1].children[0].children[1],116          sense_two.children[1].children[0].children[1].children[3].children[0],117          sense_two.children[1].children[0].children[1].children[3].children[1],118          sense_two.children[1].children[0].children[1].children[3].children[2],119          sense_two.children[1].children[1].children[0].children[0],120          sense_two.children[1].children[1].children[1],121          sense_two.children[1].children[1].children[1].children[3].children[0],122          sense_two.children[1].children[1].children[1].children[3].children[1],123          sense_two.children[1].children[1].children[1].children[3].children[2],124          sense_two.children[1].children[2].children[0].children[0],125          sense_two.children[1].children[2].children[1],126          sense_two.children[1].children[2].children[1].children[3].children[0],127          sense_two.children[1].children[2].children[1].children[3].children[1],128          sense_two.children[1].children[2].children[1].children[3].children[2]129           );130        is_sense_three = true; // å¼å¯åºæ¯ä¸131        // is_left = true; // å¯ä»¥æ¥çä¹åçåºæ¯132      } else if (is_sense_three == true && currentPage == 2) {133        // å½å页æ¯2䏿¯è§£éäºåºæ¯ä¸134        currentPage = 3; // å½å页æ¯3135        //   sense_two.style.left = "-5000px"; // ç§»é¤åºæ¯äº136        removeAnimation(sense_two);137        sense_two.classList.add("animationLeft");138        sense_three.classList.remove("displayNone"); // æè¿ä¸ªæ ·å¼é¦å
ç§»é¤139        sense_three.classList.add("displayBlock"); // æ¾ç¤ºåºæ¯ä¸140        // 便¬¡æ§è¡ç¬¬ä¸åºæ¯çæ ·å¼141        excutedAnimationThree(142          sense_three.children[1].children[0],143          sense_three.children[1].children[2],144          sense_three.children[1].children[1],145          sense_three.children[1].children[1].children[0].children[0].children[1],146          sense_three.children[1].children[1].children[0].children[0].children[0],147          sense_three.children[1].children[1].children[0].children[1].children[1],148          sense_three.children[1].children[1].children[0].children[1].children[0],149          sense_three.children[1].children[1].children[0].children[2].children[1],150          sense_three.children[1].children[1].children[0].children[2].children[0],151          sense_three.children[1].children[1].children[0].children[3].children[1],152          sense_three.children[1].children[1].children[0].children[3].children[0],153          sense_three.children[1].children[1].children[0].children[4].children[1],154          sense_three.children[1].children[1].children[0].children[4].children[0],155          sense_three.children[1].children[1].children[0].children[5].children[1],156          sense_three.children[1].children[1].children[0].children[5].children[0],157          sense_three.children[1].children[1].children[0].children[6].children[1],158          sense_three.children[1].children[1].children[0].children[6].children[0]159        ); 160        is_sense_four = true; // å¼å¯åºæ¯å161      } else if (is_sense_four == true && currentPage == 3) {162        // å½å页æ¯3䏿¯è§£éäºåºæ¯å163        sense_three.style.left = "-5000px"; // ç§»é¤åºæ¯ä¸164        removeAnimation(sense_three);165        sense_three.classList.add("animationLeft");166        removeDisplay(sense_four);167        sense_four.classList.add("displayBlock"); // æ¾ç¤ºåºæ¯å168        currentPage = 4; //å½å页æ¯ç¬¬4169      }170    } else {171      people.style.left = people.offsetLeft + 10 + "px";172    }173  }174  // if (isMove["bottom"] == true) {175  //   people.style.top = people.offsetTop + 10 + "px";176  // }177}, 30);178// 第ä¸åºæ¯çæ ·å¼179function sense_one_init() {180  console.log(sense_one.children[1].children[2]);181  // ä¸å¼å§éèææçå
ç´ 182  sense_one.children[0].children[1].classList.add("displayNone"); // å
³äºæçæç183  sense_one.children[1].children[0].children[0].classList.add("displayNone"); // æ ç¾ä¸184  sense_one.children[1].children[0].children[1].classList.add("displayNone"); // æ ç¾äº185  sense_one.children[1].children[1].children[0].classList.add("displayNone"); // æ ç¾ä¸186  sense_one.children[1].children[1].children[1].classList.add("displayNone"); // æ ç¾å187  sense_one.children[1].children[2].classList.add("opacity0"); // æ ç¾äº188  sense_one.children[0].children[0].classList.add("lineAnimation"); // 页é¢ä¸æå¼å°±æ·»å çº¿æ¡æ ·å¼189  sense_one.children[0].children[0].addEventListener(190    "animationend",191    function() {192      // 线æ¡å¨ç»ç»ætitleåºæ¥193      display(sense_one.children[0].children[1]);194      excutedAnimation(195        sense_one.children[1].children[0].children[0],196        sense_one.children[1].children[0].children[1],197        sense_one.children[1].children[1].children[0],198        sense_one.children[1].children[1].children[1],199        sense_one.children[1].children[2]200      );201    }202  );203  sense_one.children[0].children[1].addEventListener(204    "animationend",205    function() {206      display(sense_one.children[1].children[0].children[0]); // ææçæ¾ç¤ºåºæ¥207    }208  );209}210function removeDisplay(obj) {211  // å é¤åºæ¯åæçæ ·å¼212  if (obj.className.indexOf("displayNone") > -1) {213    obj.classList.remove("displayNone"); // æè¿ä¸ªæ ·å¼é¦å
ç§»é¤214  }215  if (obj.className.indexOf("displayBlock") > -1) {216    obj.classList.remove("displayBlock");217  }218}219function removeAnimation(obj) { // ç§»é¤åºæ¯ä¹åçå¨ç»220  if (obj.className.indexOf("animationLeft") > -1) {221    obj.classList.remove("animationLeft");222  }223  if (obj.className.indexOf("animationRight") > -1) {224    obj.classList.remove("animationRight");225  }226}227function display(obj) { // æ¾ç¤ºæ ç¾åºæ¥228  let classs = obj.getAttribute("class").replace("displayNone", "displayBlock");229  obj.setAttribute("class", classs);230}231function addAnimation(obj,animation) { // æ·»å å¨ç»232  obj.classList.add(animation);233}234  // 弿¥æ§è¡æ¯å¸§å¨ç»ï¼ç¬¬ä¸åºæ¯ï¼235async function excutedAnimation(label1,label2,label3,label4,label5) {236  new Promise(resolve=>{237    display(label1); // ææ ç¾ä¸æ¾ç¤ºåºæ¥238    addAnimation(label1,'leftIn'); // ç»ç¬¬ä¸ä¸ªæ ç¾æ·»å å¨ç»239    label1.addEventListener('animationend',function(){240      resolve('ok');241    });242  }).then(resolve => {243    display(label2); // ææ ç¾äºæ¾ç¤ºåºæ¥244    addAnimation(label2,'rightIn'); // æç¬¬äºä¸ªæ ç¾æ·»å å¨ç»245    label2.addEventListener('animationend',function(){246      display(label3); // ææ ç¾ä¸æ¾ç¤ºåºæ¥247      addAnimation(label3, 'leftIn'); // æç¬¬ä¸ä¸ªæ ç¾æ·»å å¨ç»248      label3.addEventListener('animationend', function () {249        display(label4); // ææ ç¾åæ¾ç¤ºåºæ¥250        addAnimation(label4, 'rightIn'); // æç¬¬å个æ ç¾æ·»å å¨ç»251        label4.addEventListener('animationend',function(){252          let classs = label5.getAttribute("class").replace("opacity0", "opacity1");253          label5.setAttribute("class", classs);254        });255      });256    });257  })258}259// 弿¥æ§è¡æ¯å¸§å¨ç»ï¼ç¬¬äºåºæ¯ï¼260async function excutedAnimationTwo261(line,262  title,263  lable1_line,264  label1_content,265  label1_content_star1,266  label1_content_star2,267  label1_content_star3,268  label2_line,269  label2_content,270  label2_content_star1,271  label2_content_star2,272  label2_content_star3,273  label3_line,274  label3_content,275  label3_content_star1,276  label3_content_star2,277  label3_content_star3278  ){279  new Promise(resolve => {280    // ä¸å¼å§éèæçæç281    title.classList.add("displayNone");282    // 线æ¡å¨ç»283    addAnimation(line, 'lineAnimation');284    line.addEventListener('animationend', function () {285      // æçæ¾ç¤ºåºæ¥å¹¶æ·»å å¨ç»286      removeDisplay(title);287      addAnimation(title,'content');288      resolve('ok');289    });290  }).then(res=>{291    addAnimation(lable1_line, 'animationLineFormLeft');292    lable1_line.addEventListener('animationend',function(){293      addAnimation(label1_content,'opacity11');294      addAnimation(label1_content_star1, 'animationStarMoveLeft');295      addAnimation(label1_content_star2, 'animationStarMoveRight');296      addAnimation(label1_content_star3, 'animationStarMoveLeft');297      label1_content.addEventListener('animationend',function(){298        addAnimation(label2_line,'animationLineFormRight');299        addAnimation(label2_content_star1, 'animationStarMoveLeft');300        addAnimation(label2_content_star2, 'animationStarMoveRight');301        addAnimation(label2_content_star3, 'animationStarMoveLeft');302        label2_line.addEventListener('animationend',function(){303          addAnimation(label2_content, 'opacity11');304          label2_content.addEventListener('animationend',function(){305            addAnimation(label3_line,'animationLineFormLeft');306            addAnimation(label3_content_star1, 'animationStarMoveLeft');307            addAnimation(label3_content_star2, 'animationStarMoveRight');308            addAnimation(label3_content_star3, 'animationStarMoveLeft');309            label3_line.addEventListener('animationend',function(){310              addAnimation(label3_content, 'opacity11');311            });312          });313        });314      });315    })316    317  })318 319    320}321// 弿¥æ§è¡æ¯å¸§å¨ç»ï¼ç¬¬ä¸åºæ¯ï¼322async function excutedAnimationThree(323  left_line,324  right_line,325  language,326  label1_line,327  label1_content,328  label2_line,329  label2_content,330  label3_line,331  label3_content,332  label4_line,333  label4_content,334  label5_line,335  label5_content,336  label6_line,337  label6_content,338  label7_line,339  label7_content){340  // new Promise(resolve=>{341    addAnimation(left_line,'three_lineFormLeft');342    addAnimation(right_line, 'three_lineFormRight');343    left_line.addEventListener('animationend',function(){344      addAnimation(language, 'opacity11');345      language.addEventListener('animationend',function(){346        addAnimation(label1_line,'three_fontLine');347        label1_line.addEventListener('animationend',function(){348          addAnimation(label1_content,'opacity11');349          label1_content.addEventListener('animationend', function () {350            addAnimation(label2_line, 'three_fontLine');351            label2_line.addEventListener('animationend',function(){352              addAnimation(label2_content, 'opacity11');353              label2_content.addEventListener('animationend',function(){354                addAnimation(label3_line,'three_fontLine');355                label3_line.addEventListener('animationend',function(){356                  addAnimation(label3_content,'opacity11');357                  label3_content.addEventListener('animationend', function () {358                    addAnimation(label4_line, 'three_fontLine');359                    label4_line.addEventListener('animationend', function () {360                      addAnimation(label4_content, 'opacity11');361                      label4_content.addEventListener('animationend', function () {362                        addAnimation(label5_line, 'three_fontLine');363                        label5_line.addEventListener('animationend', function () {364                          addAnimation(label5_content, 'opacity11');365                          label5_content.addEventListener('animationend', function () {366                            addAnimation(label6_line, 'three_fontLine');367                            label6_line.addEventListener('animationend', function () {368                              addAnimation(label6_content, 'opacity11');369                              label6_content.addEventListener('animationend', function () {370                                addAnimation(label7_line, 'three_fontLine');371                                label7_line.addEventListener('animationend', function () {372                                  addAnimation(label7_content, 'opacity11');373                                });374                              })375                            });376                          });377                        });378                      });379                    });380                  });381                });382              });383            });384          })385        });386      });387      // resolve('ok')388    });389  // })390}391// console.log(sense_three.children[1].children[0]);392console.log(sense_three.children[1].children[1].children[0].children[0].children[0]);393// console.log(sense_two.children[1].children[2].children[1].children[3].children[1]);...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
