/testsrc/tests/e4x/Expressions/11.1.4-08.js

https://github.com/HtmlUnit/htmlunit-rhino-fork · JavaScript · 126 lines · 101 code · 19 blank · 6 comment · 1 complexity · cfb6c1d1f6495e3433cfeefe797f2b8e MD5 · raw file

  1. /* -*- Mode: javascript; tab-width:8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
  2. /* This Source Code Form is subject to the terms of the Mozilla Public
  3. * License, v. 2.0. If a copy of the MPL was not distributed with this
  4. * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  5. gTestfile = '11.1.4-08.js';
  6. var summary = "11.1.4 - XML Initializer - {} Expressions - 08";
  7. var BUGNUMBER = 325750;
  8. var actual = '';
  9. var expect = '';
  10. printBugNumber(BUGNUMBER);
  11. START(summary);
  12. printStatus('E4X: inconsistencies in the use of {} syntax Part Deux');
  13. // https://bugzilla.mozilla.org/show_bug.cgi?id=318922
  14. // https://bugzilla.mozilla.org/show_bug.cgi?id=321549
  15. var exprs = [];
  16. var iexpr;
  17. exprs.push({expr: 'b=\'\\\'\';\na=<a>\n <b c=\'c{b}>x</b>\n</a>;', valid: false});
  18. exprs.push({expr: 'b=\'\\\'\';\na=<a>\n <b c={b}c\'>x</b>\n</a>;', valid: false});
  19. exprs.push({expr: 'b=\'b\';\na=<a xmlns:p=\'http://a.uri/\'>\n <p:b{b}>x</p:bb>\n</a>;', valid: true});
  20. exprs.push({expr: 'b=\'b\';\na=<a xmlns:p=\'http://a.uri/\'>\n <p:b{b}>x</p:bb>\n</a>;', valid: true});
  21. exprs.push({expr: 'b=\'b\';\na=<a xmlns:p=\'http://a.uri/\'>\n <p:{b}b>x</p:bb>\n</a>;', valid: true});
  22. exprs.push({expr: 'b=\'b\';\na=<a xmlns:p=\'http://a.uri/\'>\n <p:{b}b>x</p:bb>\n</a>;', valid: true});
  23. exprs.push({expr: 'b=\'b\';\na=<a xmlns:p=\'http://a.uri/\'>\n <{b}b>x</bb>\n</a>;', valid: true});
  24. exprs.push({expr: 'b=\'b\';\na=<a>\n <b{b}>x</bb>\n</a>;', valid: true});
  25. exprs.push({expr: 'b=\'b\';\na=<a>\n <{b+\'b\'}>x</bb>\n</a>;', valid: true});
  26. exprs.push({expr: 'b=\'b\';\na=<a>\n <{b}b>x</bb>\n</a>;', valid: true});
  27. exprs.push({expr: 'b=\'c\';\na=<a>\n <b c=\'c\'{b}>x</b>\n</a>;', valid: false});
  28. exprs.push({expr: 'b=\'c\';\na=<a>\n <b c={b}>x</b>\n</a>;', valid: true});
  29. exprs.push({expr: 'b=\'c\';\na=<a>\n <b c={b}\'c\'>x</b>\n</a>;', valid: false});
  30. exprs.push({expr: 'b=\'c\';\na=<a>\n <b c{b}=\'c\'>x</b>\n</a>;', valid: true});
  31. exprs.push({expr: 'b=\'c\';\na=<a>\n <b {b+\'c\'}=\'c\'>x</b>\n</a>;', valid: true});
  32. exprs.push({expr: 'b=\'c\';\na=<a>\n <b {b}=\'c\'>x</b>\n</a>;', valid: true});
  33. exprs.push({expr: 'b=\'c\';\na=<a>\n <b {b}c=\'c\'>x</b>\n</a>;', valid: true});
  34. exprs.push({expr: 'm=1;\na=<a>\n x {m} z\n</a>;', valid: true});
  35. exprs.push({expr: 'm=1;\na=new XML(m);', valid: true});
  36. exprs.push({expr: 'm=<m><n>o</n></m>;\na=<a>\n <b>x {m} z</b>\n</a>;', valid: true});
  37. exprs.push({expr: 'm=<m><n>o</n></m>;\na=<a>\n <{m}>x z</{m}>\n</a>;', valid: false});
  38. exprs.push({expr: 'm=<m>o</m>;\na=<a>\n <{m}>x z</{m}>\n</a>;', valid: true});
  39. exprs.push({expr: 'm=[1,\'x\'];\na=<a>\n x {m} z\n</a>;', valid: true});
  40. exprs.push({expr: 'm=[1,\'x\'];\na=new XML(m);', valid: false});
  41. exprs.push({expr: 'm=[1];\na=new XML(m);', valid: false});
  42. exprs.push({expr: 'm=\'<m><n>o</n></m>\';\na=<a>\n <b>x {m} z</b>\n</a>;', valid: true});
  43. exprs.push({expr: 'm=\'<m><n>o</n></m>\';\na=<a>\n x {m} z\n</a>;', valid: true});
  44. exprs.push({expr: 'm=\'x\';\na=new XML(m);', valid: true});
  45. exprs.push({expr: 'm=new Date();\na=new XML(m);', valid: false});
  46. exprs.push({expr: 'm=new Number(\'1\');\na=new XML(m);', valid: true});
  47. exprs.push({expr: 'm=new String(\'x\');\na=new XML(\'<a>\\n {m}\\n</a>\');', valid: true});
  48. exprs.push({expr: 'm=new String(\'x\');\na=new XML(m);', valid: true});
  49. exprs.push({expr: 'm={a:1,b:\'x\'};\na=<a>\n x {m} z\n</a>;', valid: true});
  50. exprs.push({expr: 'm={a:1,b:\'x\'};\na=new XML(m);', valid: false});
  51. exprs.push({expr: 'p="p";\nu=\'http://a.uri/\';\na=<a xmlns:p{p}={\'x\',1,u}>\n <pp:b>x</pp:b>\n</a>;', valid: true});
  52. exprs.push({expr: 'p="p";\nu=\'http://a.uri/\';\na=<a xmlns:{p}p={\'x\',1,u}>\n <pp:b>x</pp:b>\n</a>;', valid: true});
  53. exprs.push({expr: 'p="pp";\nu=\'http://a.uri/\';\na=<a xmlns:{p}={\'x\',1,u}>\n <pp:b>x</pp:b>\n</a>;', valid: true});
  54. exprs.push({expr: 'u=\'http://a.uri/\';\na=<a xmlns:p={(function(){return u})()}>\n <p:b>x</p:b>\n</a>;', valid: true});
  55. exprs.push({expr: 'u=\'http://a.uri/\';\na=<a xmlns:p={\'x\',1,u}>\n <p:b>x</p:b>\n</a>;', valid: true});
  56. exprs.push({expr: 'u=\'http://a.uri/\';\na=<a xmlns:p={u}>\n <{u}:b>x</p:b>\n</a>;', valid: false});
  57. exprs.push({expr: 'u=\'http://a.uri/\';\na=<a xmlns:p={var d=2,u}>\n <p:b>x</p:b>\n</a>;', valid: false});
  58. exprs.push({expr: 'u=\'http://a.uri/\';\nn=new Namespace("p",u);\na=<a xmlns:p={n}>\n <{u}:b>x</p:b>\n</a>;', valid: false});
  59. exprs.push({expr: 'u=\'http://a.uri/\';\nn=new Namespace("p",u);\na=<a xmlns:p={u}>\n <{u}:b>x</p:b>\n</a>;', valid: false});
  60. exprs.push({expr: 'u=\'http://a.uri/\';\nn=new Namespace("p",u);\na=<a xmlns:{n}={n}>\n <p:b>x</p:b>\n</a>;', valid: false});
  61. exprs.push({expr: 'u=\'http://a.uri/\';\nn=new Namespace("p",u);\na=<a xmlns:{n}={n}>\n <{n}:b>x</p:b>\n</a>;', valid: false});
  62. exprs.push({expr: 'u=\'http://a.uri/\';\nn=new Namespace(u);\na=<a xmlns:p={n}>\n <p:b>x</p:b>\n</a>;', valid: true});
  63. exprs.push({expr: 'u=\'http://a.uri/\';\nn=new Namespace(u);\na=<a xmlns:p={n}>\n <{n}:b>x</p:b>\n</a>;', valid: false});
  64. exprs.push({expr: 'u=\'http://a.uri/\';\nn=new Namespace(u);\na=<a xmlns:p={u}>\n <p:b>x</p:b>\n</a>;', valid: true});
  65. exprs.push({expr: 'u=\'http://a.uri/\';\nn=new Namespace(u);\na=<a xmlns:p={u}>\n <{n}:b>x</p:b>\n</a>;', valid: false});
  66. exprs.push({expr: 'u=\'http://a.uri/\';\nn=new Namespace(u);\na=<a xmlns:p={u}>\n <{n}:b>x</p:b>\n</a>;', valid: false});
  67. exprs.push({expr: 'u=\'http://a.uri/\';\np=\'p\';\na=<a xmlns:p={u}>\n <{p}:b>x</p:b>\n</a>;', valid: true});
  68. exprs.push({expr: 'u=\'http://a.uri/\';\np=\'p\';\na=<a xmlns:pp={u}>\n <p{p}:b>x</pp:b>\n</a>;', valid: true});
  69. exprs.push({expr: 'u=\'http://a.uri/\';\np=\'p\';\na=<a xmlns:pp={u}>\n <{p}p:b>x</pp:b>\n</a>;', valid: true});
  70. exprs.push({expr: 'u=\'http://a.uri/\';\np=\'p\';\nns="ns";\na=<a xml{ns}:pp={u}>\n <{p}p:b>x</pp:b>\n</a>;', valid: true});
  71. exprs.push({expr: 'u=\'http://a.uri/\';\np=\'p\';\nns="xmlns";\na=<a {ns}:pp={u}>\n <{p}p:b>x</pp:b>\n</a>;', valid: true});
  72. exprs.push({expr: 'u=\'http://a.uri/\';\np=\'p\';\nxml="xml";\na=<a {xml}ns:pp={u}>\n <{p}p:b>x</pp:b>\n</a>;', valid: true});
  73. exprs.push({expr: 'u=\'http://a.uri/\';\np=\'pp\';\na=<a xmlns:pp={u}>\n <{p}:b>x</pp:b>\n</a>;', valid: true});
  74. exprs.push({expr: 'u=\'http://a.uri/\';\nu2=\'http://uri2.sameprefix/\';\nn=new Namespace(\'p\',u2);\na=<a xmlns:p={u}>\n <{n}:b>x</p:b>\n</a>;', valid: false}); // This should always fail
  75. for (iexpr = 0; iexpr < exprs.length; ++iexpr)
  76. {
  77. evalStr(exprs, iexpr);
  78. }
  79. END();
  80. function evalStr(exprs, iexpr)
  81. {
  82. var value;
  83. var valid;
  84. var passfail;
  85. var obj = exprs[iexpr];
  86. try
  87. {
  88. value = eval(obj.expr).toXMLString();
  89. valid = true;
  90. }
  91. catch(ex)
  92. {
  93. value = ex + '';
  94. valid = false;
  95. }
  96. passfail = (valid === obj.valid);
  97. msg = iexpr + ': ' + (passfail ? 'PASS':'FAIL') +
  98. ' expected: ' + (obj.valid ? 'valid':'invalid') +
  99. ', actual: ' + (valid ? 'valid':'invalid') + '\n' +
  100. 'input: ' + '\n' +
  101. obj.expr + '\n' +
  102. 'output: ' + '\n' +
  103. value + '\n\n';
  104. printStatus(msg);
  105. TEST(iexpr, obj.valid, valid);
  106. return passfail;
  107. }