⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xpath_unittest.js

📁 ajax patterns 这是关于ajax设计模式方面的原代码
💻 JS
字号:
// Copyright 2005, Google Inc.// All Rights Reserved.//// Unit test for the XPath parser and engine.//// Author: Steffen Meschkat <mesch@google.com>var expr = [    "@*",    "@*|node()",    "/descendant-or-self::div",    "//div",    "substring('12345', 0, 3)",    "//title | //link",    "$x//title",    "//*[@about]",    "count(descendant::*)",    "count(descendant::*) + count(ancestor::*)",    "concat(substring-before(@image,'marker'),'icon',substring-after(@image,'marker'))",    "@*|text()",    "*|/",    "source|destination",    "$page != 'to' and $page != 'from'",    "substring-after(icon/@image, '/mapfiles/marker')",    "substring-before($str, $c)",    "$page = 'from'",    "segments/@time",    "child::para",    "child::*",    "child::text()",    "child::node()",    "attribute::name",    "attribute::*",    "descendant::para",    "ancestor::div",    "ancestor-or-self::div",    "descendant-or-self::para",    "self::para",    "child::chapter/descendant::para",    "child::*/child::para",    "/",    "/descendant::para",    "/descendant::olist/child::item",    "child::para[position()=1]",    "child::para[position()=last()]",    "child::para[position()=last()-1]",    "child::para[position()>1]",    "following-sibling::chapter[position()=1]",    "preceding-sibling::chapter[position()=1]",    "/descendant::figure[position()=42]",    "/child::doc/child::chapter[position()=5]/child::section[position()=2]",    "child::para[attribute::type='warning']",    "child::para[attribute::type='warning'][position()=5]",    "child::para[position()=5][attribute::type='warning']",    "child::chapter[child::title='Introduction']",    "child::chapter[child::title]",    "child::*[self::chapter or self::appendix]",    "child::*[self::chapter or self::appendix][position()=last()]",    // The following are all expressions that occur in maps XSLT templates.     // See maps/tools/xpathscan.pl.     "$address",    "$address=string(/page/user/defaultlocation)",    "$count-of-snippet-of-url = 0",    "$daddr",    "$form",    "$form = 'from'",    "$form = 'to'",    "$form='near'",    "$home",    "$i",    "$i > $page and $i < $page + $range",    "$i < $page and $i >= $page - $range",    "$i < @max",    "$i <= $page",    "$i + 1",    "$i = $page",    "$i = 1",    "$info = position() or (not($info) and position() = 1)",    "$is-first-order",    "$is-first-order and $snippets-exist",    "$more",    "$more > 0",    "$near-point",    "$page",    "$page != 'from'",    "$page != 'to'",    "$page != 'to' and $page != 'from'",    "$page > 1",    "$page = 'basics'",    "$page = 'details'",    "$page = 'from'",    "$page = 'to'",    "$page='from'",    "$page='to'",    "$r >= 0.5",    "$r >= 1",    "$r - 0",    "$r - 1",    "$r - 2",    "$r - 3",    "$r - 4",    "$saddr",    "$sources",    "$sources[position() < $details]",    "$src",    "$str",    "\"'\"",    "(//location[string(info/references/reference[1]/url)=string($current-url)]/info/references/reference[1])[1]",    "(not($count-of-snippet-of-url = 0) and (position() = 1) or not($current-url = //locations/location[position() = $last-pos]//reference[1]/url))",    "(not($info) and position() = 1) or $info = position()",    ".",    "../@arg0",    "../@filterpng",    "/page/@filterpng",    "4",    "@attribution",    "@id",    "@max > @num",    "@meters > 16093",    "@name",    "@start div @num + 1",    "@url",    "ad",    "address/line",    "adsmessage",    "attr",    "boolean(location[@id='near'][icon/@image])",    "bubble/node()",    "calltoaction/node()",    "category",    "contains($str, $c)",    "count(//location[string(info/references/reference[1]/url)=string($current-url)]//snippet)",    "count(//snippet)",    "count(attr)",    "count(location)",    "count(structured/source) > 1",    "description/node()",    "destination",    "destinationAddress",    "domain",    "false()",    "icon/@class != 'noicon'",    "icon/@image",    "info",    "info/address/line",    "info/distance",    "info/distance and $near-point",    "info/distance and info/phone and $near-point",    "info/distance or info/phone",    "info/panel/node()",    "info/phone",    "info/references/reference[1]",    "info/references/reference[1]/snippet",    "info/references/reference[1]/url",    "info/title",    "info/title/node()",    "line",    "location",    "location[@id!='near']",    "location[@id='near'][icon/@image]",    "location[position() > $numlocations div 2]",    "location[position() <= $numlocations div 2]",    "locations",    "locations/location",    "near",    "node()",    "not($count-of-snippets = 0)",    "not($form = 'from')",    "not($form = 'near')",    "not($form = 'to')",    "not(../@page)",    "not(structured/source)",    "notice",    "number(../@info)",    "number(../@items)",    "number(/page/@linewidth)",    "page/ads",    "page/directions",    "page/error",    "page/overlay",    "page/overlay/locations/location",    "page/refinements",    "page/request/canonicalnear",    "page/request/near",    "page/request/query",    "page/spelling/suggestion",    "page/user/defaultlocation",    "phone",    "position()",    "position() != 1",    "position() != last()",    "position() > 1",    "position() < $details",    "position()-1",    "query",    "references/@total",    "references/reference",    "references/reference/domain",    "references/reference/url",    "reviews/@positive div (reviews/@positive + reviews/@negative) * 5",    "reviews/@positive div (reviews/@positive + reviews/@negative) * (5)",    "reviews/@total",    "reviews/@total > 1",    "reviews/@total > 5",    "reviews/@total = 1",    "segments/@distance",    "segments/@time",    "segments/segment",    "shorttitle/node()",    "snippet",    "snippet/node()",    "source",    "sourceAddress",    "sourceAddress and destinationAddress",    "string(../@daddr)",    "string(../@form)",    "string(../@page)",    "string(../@saddr)",    "string(info/title)",    "string(page/request/canonicalnear) != ''",    "string(page/request/near) != ''",    "string-length($address) > $linewidth",    "structured/@total - $details",    "structured/source",    "structured/source[@name]",    "substring($address, 1, $linewidth - 3)",    "substring-after($str, $c)",    "substring-after(icon/@image, '/mapfiles/marker')",    "substring-before($str, $c)",    "tagline/node()",    "targetedlocation",    "title",    "title/node()",    "true()",    "url",    "visibleurl"];function testParse() {  for (var i = 0; i < expr.length; ++i) {    assert(expr[i], xpathParse(expr[i]));  }}var numExpr = [    /* number expressions */    [ "1+1", 2 ],    [ "floor( -3.1415 )", -4 ],    [ "-5 mod -2", -1 ],    [ "-5 mod 2", -1 ],    [ "5 mod -2", 1 ],    [ "5 mod 2", 1 ],    [ "ceiling( 3.1415 )", 4.0 ],     [ "floor( 3.1415 )", 3.0 ],     [ "ceiling( -3.1415 )", -3.0 ],    /* string expressions */    [ "substring('12345', -42, 1 div 0)", "12345" ],    [ "normalize-space( '  qwerty ' )", "qwerty" ],    [ "contains('1234567890','9')", true ],    [ "contains('1234567890','1')", true ],    [ "'Hello World!'", 'Hello World!' ],     [ "substring('12345', 1.5, 2.6)", "234" ],     [ "substring('12345', 0, 3)", "12" ],     /* variables */    [ "$foo", 'bar', { foo: 'bar' } ],     [ "$foo", 100, { foo: 100 } ],     [ "$foo", true, { foo: true } ],     [ "$foo + 1", 101, { foo: 100 } ]];function testEval() {  for (var i = 0; i < numExpr.length; ++i) {    var ctx = new ExprContext(null, 0, null, null);    var e = numExpr[i];    if (e[2]) {      for (var k in e[2]) {        var v = e[2][k];        if (typeof v == 'number') {          ctx.setVariable(k, new NumberValue(v));                  } else if (typeof v == 'string') {          ctx.setVariable(k, new StringValue(v));        } else if (typeof v == 'boolean') {          ctx.setVariable(k, new BooleanValue(v));        }      }    }    var result = xpathParse(e[0]).evaluate(ctx);    if (typeof e[1] == 'number') {      assertEquals(e[0], e[1], result.numberValue());    } else if (typeof e[1] == 'string') {      assertEquals(e[0], e[1], result.stringValue());          } else if (typeof e[1] == 'boolean') {      assertEquals(e[0], e[1], result.booleanValue());    }  }}// eval an xpath expression to a single nodefunction evalNodeSet(expr, ctx) {  var expr1 = xpathParse(expr);  var e = expr1.evaluate(ctx);  return e.nodeSetValue();}function testEvalDom() {  var xml = [      '<page>',      '<request>',      '<q>new york</q>',      '</request>',      '<location lat="100" lon="100"/>',      '</page>'  ].join('');  var ctx = new ExprContext(xmlParse(xml));  var ctx1 = new ExprContext((new DOMParser).parseFromString(xml, 'text/xml'));  var ns = evalNodeSet('page', ctx);  assertEquals('page', ns.length, 1);  ns = evalNodeSet('page', ctx1);  assertEquals('page', ns.length, 1);  ns = evalNodeSet('/page', ctx);  assertEquals('/page', ns.length, 1);  ns = evalNodeSet('/page', ctx1);  assertEquals('/page', ns.length, 1);  assertEquals('/', evalNodeSet('/', ctx).length, 1);  assertEquals('/', evalNodeSet('/', ctx1).length, 1);  assertEquals('/', evalNodeSet('/', ctx)[0].nodeName, '#document');  assertEquals('/', evalNodeSet('/', ctx1)[0].nodeName, '#document');  assertEquals('/page', evalNodeSet('/page', ctx)[0].nodeName, 'page');  assertEquals('/page', evalNodeSet('/page', ctx1)[0].nodeName, 'page');  var n = evalNodeSet('/page/location/@lat', ctx)[0];  assertEquals('/page/location/@lat', n.nodeName, 'lat');  assertEquals('/page/location/@lat', n.nodeValue, '100');  n = evalNodeSet('/page/location/@lat', ctx1)[0];  assertEquals('/page/location/@lat', n.nodeName, 'lat');  assertEquals('/page/location/@lat', n.nodeValue, '100');}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -