2007-03-22 10:30:00 -07:00
/* -*- Mode: java; tab-width:8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/ * * * * * * B E G I N L I C E N S E B L O C K * * * * *
* Version : MPL 1.1 / GPL 2.0 / LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 ( the "License" ) ; you may not use this file except in compliance with
* the License . You may obtain a copy of the License at
* http : //www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis ,
* WITHOUT WARRANTY OF ANY KIND , either express or implied . See the License
* for the specific language governing rights and limitations under the
* License .
*
* The Original Code is JavaScript Engine testing utilities .
*
* The Initial Developer of the Original Code is
* Mozilla Foundation .
* Portions created by the Initial Developer are Copyright ( C ) 2006
* the Initial Developer . All Rights Reserved .
*
* Contributor ( s ) : Biju
*
* Alternatively , the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later ( the "GPL" ) , or
* the GNU Lesser General Public License Version 2.1 or later ( the "LGPL" ) ,
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above . If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL , and not to allow others to
* use your version of this file under the terms of the MPL , indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL . If you do not delete
* the provisions above , a recipient may use your version of this file under
* the terms of any one of the MPL , the GPL or the LGPL .
*
* * * * * * END LICENSE BLOCK * * * * * * /
2007-05-25 17:19:18 -07:00
gTestfile = '11.1.4-08.js' ;
2007-03-22 10:30:00 -07:00
2007-05-25 17:19:18 -07:00
var summary = "11.1.4 - XML Initializer - {} Expressions - 08" ;
var BUGNUMBER = 325750 ;
2007-03-22 10:30:00 -07:00
var actual = '' ;
var expect = '' ;
2007-05-25 17:19:18 -07:00
printBugNumber ( BUGNUMBER ) ;
START ( summary ) ;
printStatus ( 'E4X: inconsistencies in the use of {} syntax Part Deux' ) ;
2007-03-22 10:30:00 -07:00
// https://bugzilla.mozilla.org/show_bug.cgi?id=318922
// https://bugzilla.mozilla.org/show_bug.cgi?id=321549
var exprs = [ ] ;
var iexpr ;
exprs . push ( { expr : 'b=\'\\\'\';\na=<a>\n <b c=\'c{b}>x</b>\n</a>;' , valid : false } ) ;
exprs . push ( { expr : 'b=\'\\\'\';\na=<a>\n <b c={b}c\'>x</b>\n</a>;' , valid : false } ) ;
exprs . push ( { expr : 'b=\'b\';\na=<a xmlns:p=\'http://a.uri/\'>\n <p:b{b}>x</p:bb>\n</a>;' , valid : true } ) ;
exprs . push ( { expr : 'b=\'b\';\na=<a xmlns:p=\'http://a.uri/\'>\n <p:b{b}>x</p:bb>\n</a>;' , valid : true } ) ;
exprs . push ( { expr : 'b=\'b\';\na=<a xmlns:p=\'http://a.uri/\'>\n <p:{b}b>x</p:bb>\n</a>;' , valid : true } ) ;
exprs . push ( { expr : 'b=\'b\';\na=<a xmlns:p=\'http://a.uri/\'>\n <p:{b}b>x</p:bb>\n</a>;' , valid : true } ) ;
exprs . push ( { expr : 'b=\'b\';\na=<a xmlns:p=\'http://a.uri/\'>\n <{b}b>x</bb>\n</a>;' , valid : true } ) ;
exprs . push ( { expr : 'b=\'b\';\na=<a>\n <b{b}>x</bb>\n</a>;' , valid : true } ) ;
exprs . push ( { expr : 'b=\'b\';\na=<a>\n <{b+\'b\'}>x</bb>\n</a>;' , valid : true } ) ;
exprs . push ( { expr : 'b=\'b\';\na=<a>\n <{b}b>x</bb>\n</a>;' , valid : true } ) ;
exprs . push ( { expr : 'b=\'c\';\na=<a>\n <b c=\'c\'{b}>x</b>\n</a>;' , valid : false } ) ;
exprs . push ( { expr : 'b=\'c\';\na=<a>\n <b c={b}>x</b>\n</a>;' , valid : true } ) ;
exprs . push ( { expr : 'b=\'c\';\na=<a>\n <b c={b}\'c\'>x</b>\n</a>;' , valid : false } ) ;
exprs . push ( { expr : 'b=\'c\';\na=<a>\n <b c{b}=\'c\'>x</b>\n</a>;' , valid : true } ) ;
exprs . push ( { expr : 'b=\'c\';\na=<a>\n <b {b+\'c\'}=\'c\'>x</b>\n</a>;' , valid : true } ) ;
exprs . push ( { expr : 'b=\'c\';\na=<a>\n <b {b}=\'c\'>x</b>\n</a>;' , valid : true } ) ;
exprs . push ( { expr : 'b=\'c\';\na=<a>\n <b {b}c=\'c\'>x</b>\n</a>;' , valid : true } ) ;
exprs . push ( { expr : 'm=1;\na=<a>\n x {m} z\n</a>;' , valid : true } ) ;
exprs . push ( { expr : 'm=1;\na=new XML(m);' , valid : true } ) ;
exprs . push ( { expr : 'm=<m><n>o</n></m>;\na=<a>\n <b>x {m} z</b>\n</a>;' , valid : true } ) ;
exprs . push ( { expr : 'm=<m><n>o</n></m>;\na=<a>\n <{m}>x z</{m}>\n</a>;' , valid : false } ) ;
exprs . push ( { expr : 'm=<m>o</m>;\na=<a>\n <{m}>x z</{m}>\n</a>;' , valid : true } ) ;
exprs . push ( { expr : 'm=[1,\'x\'];\na=<a>\n x {m} z\n</a>;' , valid : true } ) ;
exprs . push ( { expr : 'm=[1,\'x\'];\na=new XML(m);' , valid : false } ) ;
exprs . push ( { expr : 'm=[1];\na=new XML(m);' , valid : false } ) ;
exprs . push ( { expr : 'm=\'<m><n>o</n></m>\';\na=<a>\n <b>x {m} z</b>\n</a>;' , valid : true } ) ;
exprs . push ( { expr : 'm=\'<m><n>o</n></m>\';\na=<a>\n x {m} z\n</a>;' , valid : true } ) ;
exprs . push ( { expr : 'm=\'x\';\na=new XML(m);' , valid : true } ) ;
exprs . push ( { expr : 'm=new Date();\na=new XML(m);' , valid : false } ) ;
exprs . push ( { expr : 'm=new Number(\'1\');\na=new XML(m);' , valid : true } ) ;
exprs . push ( { expr : 'm=new String(\'x\');\na=new XML(\'<a>\\n {m}\\n</a>\');' , valid : true } ) ;
exprs . push ( { expr : 'm=new String(\'x\');\na=new XML(m);' , valid : true } ) ;
exprs . push ( { expr : 'm={a:1,b:\'x\'};\na=<a>\n x {m} z\n</a>;' , valid : true } ) ;
exprs . push ( { expr : 'm={a:1,b:\'x\'};\na=new XML(m);' , valid : false } ) ;
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 } ) ;
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 } ) ;
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 } ) ;
exprs . push ( { expr : 'u=\'http://a.uri/\';\na=<a xmlns:p={(function(){return u})()}>\n <p:b>x</p:b>\n</a>;' , valid : true } ) ;
exprs . push ( { expr : 'u=\'http://a.uri/\';\na=<a xmlns:p={\'x\',1,u}>\n <p:b>x</p:b>\n</a>;' , valid : true } ) ;
exprs . push ( { expr : 'u=\'http://a.uri/\';\na=<a xmlns:p={u}>\n <{u}:b>x</p:b>\n</a>;' , valid : false } ) ;
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 } ) ;
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 } ) ;
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 } ) ;
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 } ) ;
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 } ) ;
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 } ) ;
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 } ) ;
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 } ) ;
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 } ) ;
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 } ) ;
exprs . push ( { expr : 'u=\'http://a.uri/\';\np=\'p\';\na=<a xmlns:p={u}>\n <{p}:b>x</p:b>\n</a>;' , valid : true } ) ;
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 } ) ;
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 } ) ;
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 } ) ;
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 } ) ;
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 } ) ;
exprs . push ( { expr : 'u=\'http://a.uri/\';\np=\'pp\';\na=<a xmlns:pp={u}>\n <{p}:b>x</pp:b>\n</a>;' , valid : true } ) ;
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
for ( iexpr = 0 ; iexpr < exprs . length ; ++ iexpr )
{
evalStr ( exprs , iexpr ) ;
}
END ( ) ;
function evalStr ( exprs , iexpr )
{
var value ;
var valid ;
var passfail ;
var obj = exprs [ iexpr ] ;
try
{
value = eval ( obj . expr ) . toXMLString ( ) ;
valid = true ;
}
catch ( ex )
{
value = ex + '' ;
valid = false ;
}
passfail = ( valid === obj . valid ) ;
2007-05-25 17:19:18 -07:00
msg = iexpr + ': ' + ( passfail ? 'PASS' : 'FAIL' ) +
' expected: ' + ( obj . valid ? 'valid' : 'invalid' ) +
', actual: ' + ( valid ? 'valid' : 'invalid' ) + '\n' +
'input: ' + '\n' +
obj . expr + '\n' +
2007-03-22 10:30:00 -07:00
'output: ' + '\n' +
value + '\n\n' ;
2007-05-25 17:19:18 -07:00
2007-03-22 10:30:00 -07:00
printStatus ( msg ) ;
TEST ( iexpr , obj . valid , valid ) ;
return passfail ;
}