Imported Upstream version 1.0.0
[platform/upstream/js.git] / js / src / tests / e4x / Expressions / 11.1.4-08.js
1 /* -*- Mode: java; tab-width:8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
3 /* ***** BEGIN LICENSE BLOCK *****
4  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
5  *
6  * The contents of this file are subject to the Mozilla Public License Version
7  * 1.1 (the "License"); you may not use this file except in compliance with
8  * the License. You may obtain a copy of the License at
9  * http://www.mozilla.org/MPL/
10  *
11  * Software distributed under the License is distributed on an "AS IS" basis,
12  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13  * for the specific language governing rights and limitations under the
14  * License.
15  *
16  * The Original Code is JavaScript Engine testing utilities.
17  *
18  * The Initial Developer of the Original Code is
19  * Mozilla Foundation.
20  * Portions created by the Initial Developer are Copyright (C) 2006
21  * the Initial Developer. All Rights Reserved.
22  *
23  * Contributor(s): Biju
24  *
25  * Alternatively, the contents of this file may be used under the terms of
26  * either the GNU General Public License Version 2 or later (the "GPL"), or
27  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
28  * in which case the provisions of the GPL or the LGPL are applicable instead
29  * of those above. If you wish to allow use of your version of this file only
30  * under the terms of either the GPL or the LGPL, and not to allow others to
31  * use your version of this file under the terms of the MPL, indicate your
32  * decision by deleting the provisions above and replace them with the notice
33  * and other provisions required by the GPL or the LGPL. If you do not delete
34  * the provisions above, a recipient may use your version of this file under
35  * the terms of any one of the MPL, the GPL or the LGPL.
36  *
37  * ***** END LICENSE BLOCK ***** */
38
39
40 var summary = "11.1.4 - XML Initializer - {} Expressions - 08";
41
42 var BUGNUMBER = 325750;
43 var actual = '';
44 var expect = '';
45
46 printBugNumber(BUGNUMBER);
47 START(summary);
48 printStatus('E4X: inconsistencies in the use of {} syntax Part Deux');
49
50 // https://bugzilla.mozilla.org/show_bug.cgi?id=318922
51 // https://bugzilla.mozilla.org/show_bug.cgi?id=321549
52
53 var exprs = [];
54 var iexpr;
55
56 exprs.push({expr: 'b=\'\\\'\';\na=<a>\n  <b c=\'c{b}>x</b>\n</a>;', valid: false});
57 exprs.push({expr: 'b=\'\\\'\';\na=<a>\n  <b c={b}c\'>x</b>\n</a>;', valid: false});
58 exprs.push({expr: 'b=\'b\';\na=<a xmlns:p=\'http://a.uri/\'>\n  <p:b{b}>x</p:bb>\n</a>;', valid: true});
59 exprs.push({expr: 'b=\'b\';\na=<a xmlns:p=\'http://a.uri/\'>\n  <p:b{b}>x</p:bb>\n</a>;', valid: true});
60 exprs.push({expr: 'b=\'b\';\na=<a xmlns:p=\'http://a.uri/\'>\n  <p:{b}b>x</p:bb>\n</a>;', valid: true});
61 exprs.push({expr: 'b=\'b\';\na=<a xmlns:p=\'http://a.uri/\'>\n  <p:{b}b>x</p:bb>\n</a>;', valid: true});
62 exprs.push({expr: 'b=\'b\';\na=<a xmlns:p=\'http://a.uri/\'>\n  <{b}b>x</bb>\n</a>;', valid: true});
63 exprs.push({expr: 'b=\'b\';\na=<a>\n  <b{b}>x</bb>\n</a>;', valid: true});
64 exprs.push({expr: 'b=\'b\';\na=<a>\n  <{b+\'b\'}>x</bb>\n</a>;', valid: true});
65 exprs.push({expr: 'b=\'b\';\na=<a>\n  <{b}b>x</bb>\n</a>;', valid: true});
66 exprs.push({expr: 'b=\'c\';\na=<a>\n  <b c=\'c\'{b}>x</b>\n</a>;', valid: false});
67 exprs.push({expr: 'b=\'c\';\na=<a>\n  <b c={b}>x</b>\n</a>;', valid: true});
68 exprs.push({expr: 'b=\'c\';\na=<a>\n  <b c={b}\'c\'>x</b>\n</a>;', valid: false});
69 exprs.push({expr: 'b=\'c\';\na=<a>\n  <b c{b}=\'c\'>x</b>\n</a>;', valid: true});
70 exprs.push({expr: 'b=\'c\';\na=<a>\n  <b {b+\'c\'}=\'c\'>x</b>\n</a>;', valid: true});
71 exprs.push({expr: 'b=\'c\';\na=<a>\n  <b {b}=\'c\'>x</b>\n</a>;', valid: true});
72 exprs.push({expr: 'b=\'c\';\na=<a>\n  <b {b}c=\'c\'>x</b>\n</a>;', valid: true});
73 exprs.push({expr: 'm=1;\na=<a>\n  x {m} z\n</a>;', valid: true});
74 exprs.push({expr: 'm=1;\na=new XML(m);', valid: true});
75 exprs.push({expr: 'm=<m><n>o</n></m>;\na=<a>\n  <b>x {m} z</b>\n</a>;', valid: true});
76 exprs.push({expr: 'm=<m><n>o</n></m>;\na=<a>\n  <{m}>x  z</{m}>\n</a>;', valid: false});
77 exprs.push({expr: 'm=<m>o</m>;\na=<a>\n  <{m}>x  z</{m}>\n</a>;', valid: true});
78 exprs.push({expr: 'm=[1,\'x\'];\na=<a>\n  x {m} z\n</a>;', valid: true});
79 exprs.push({expr: 'm=[1,\'x\'];\na=new XML(m);', valid: false});
80 exprs.push({expr: 'm=[1];\na=new XML(m);', valid: false});
81 exprs.push({expr: 'm=\'<m><n>o</n></m>\';\na=<a>\n  <b>x {m} z</b>\n</a>;', valid: true});
82 exprs.push({expr: 'm=\'<m><n>o</n></m>\';\na=<a>\n  x {m} z\n</a>;', valid: true});
83 exprs.push({expr: 'm=\'x\';\na=new XML(m);', valid: true});
84 exprs.push({expr: 'm=new Date();\na=new XML(m);', valid: false});
85 exprs.push({expr: 'm=new Number(\'1\');\na=new XML(m);', valid: true});
86 exprs.push({expr: 'm=new String(\'x\');\na=new XML(\'<a>\\n  {m}\\n</a>\');', valid: true});
87 exprs.push({expr: 'm=new String(\'x\');\na=new XML(m);', valid: true});
88 exprs.push({expr: 'm={a:1,b:\'x\'};\na=<a>\n  x {m} z\n</a>;', valid: true});
89 exprs.push({expr: 'm={a:1,b:\'x\'};\na=new XML(m);', valid: false});
90 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});
91 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});
92 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});
93 exprs.push({expr: 'u=\'http://a.uri/\';\na=<a xmlns:p={(function(){return u})()}>\n  <p:b>x</p:b>\n</a>;', valid: true});
94 exprs.push({expr: 'u=\'http://a.uri/\';\na=<a xmlns:p={\'x\',1,u}>\n  <p:b>x</p:b>\n</a>;', valid: true});
95 exprs.push({expr: 'u=\'http://a.uri/\';\na=<a xmlns:p={u}>\n  <{u}:b>x</p:b>\n</a>;', valid: false});
96 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});
97 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});
98 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});
99 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});
100 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});
101 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});
102 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});
103 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});
104 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});
105 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});
106 exprs.push({expr: 'u=\'http://a.uri/\';\np=\'p\';\na=<a xmlns:p={u}>\n  <{p}:b>x</p:b>\n</a>;', valid: true});
107 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});
108 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});
109 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});
110 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});
111 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});
112 exprs.push({expr: 'u=\'http://a.uri/\';\np=\'pp\';\na=<a xmlns:pp={u}>\n  <{p}:b>x</pp:b>\n</a>;', valid: true});
113 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
114
115 for (iexpr = 0; iexpr < exprs.length; ++iexpr)
116 {
117   evalStr(exprs, iexpr);
118 }
119
120 END();
121
122 function evalStr(exprs, iexpr)
123 {
124   var value;
125   var valid;
126   var passfail;
127   var obj = exprs[iexpr];
128
129   try
130   {
131     value = eval(obj.expr).toXMLString();
132     valid = true;
133   }
134   catch(ex)
135   {
136     value = ex + '';
137     valid = false;
138   }
139
140   passfail = (valid === obj.valid);
141
142   msg = iexpr + ': ' + (passfail ? 'PASS':'FAIL') +
143         ' expected: ' + (obj.valid ? 'valid':'invalid') +
144         ', actual: ' + (valid ? 'valid':'invalid') + '\n' +
145         'input: ' + '\n' +
146         obj.expr + '\n' +
147         'output: ' + '\n' +
148         value + '\n\n';
149  
150   printStatus(msg);
151
152   TEST(iexpr, obj.valid, valid);
153
154   return passfail;
155 }
156
157