* @before <img src="test1.jpg"/> <img src="test2.jpg"/>
* @result 2
*
- * @test cmpOK( $("div").length, "==", 2, "Get Number of Elements Found" );
+ * @test ok( $("div").length == 2, "Get Number of Elements Found" );
*
* @property
* @name length
* @before <img src="test1.jpg"/> <img src="test2.jpg"/>
* @result 2
*
- * @test cmpOK( $("div").size(), "==", 2, "Get Number of Elements Found" );
+ * @test ok( $("div").size() == 2, "Get Number of Elements Found" );
*
* @name size
* @type Number
* @before <img src="test1.jpg"/> <img src="test2.jpg"/>
* @result [ <img src="test1.jpg"/> ]
*
- * @test cmpOK( $("div").get(0), "==", document.getElementById("main"), "Get A Single Element" );
+ * @test ok( $("div").get(0) == document.getElementById("main"), "Get A Single Element" );
*
* @name get
* @type Element
* @example $("p").not("#selected")
* @before <p>Hello</p><p id="selected">Hello Again</p>
* @result [ <p>Hello</p> ]
- * @test cmpOK($("#main > p#ap > a").not("#google").length, "==", 2, ".not")
+ * @test ok($("#main > p#ap > a").not("#google").length == 2, ".not")
*
* @name not
* @type jQuery
"@": {
"=": "z==m[4]",
"!=": "z!=m[4]",
- "^=": "!z.indexOf(m[4])",
- "$=": "z.substr(z.length - m[4].length,m[4].length)==m[4]",
- "*=": "z.indexOf(m[4])>=0",
+ "^=": "z && !z.indexOf(m[4])",
+ "$=": "z && z.substr(z.length - m[4].length,m[4].length)==m[4]",
+ "*=": "z && z.indexOf(m[4])>=0",
"": "z"
},
"[": "jQuery.find(m[2],a).length"
* @test t( "Element Selector", "div", ["main","foo"] );
* @test t( "Element Selector", "body", ["body"] );
* @test t( "Element Selector", "html", ["html"] );
- * @test cmpOK( $("*").size(), ">=", 30, "Element Selector" );
+ * @test ok( $("*").size() >= 30, "Element Selector" );
* @test t( "Parent Element", "div div", ["foo"] );
*
* @test t( "ID Selector", "#body", ["body"] );
* @test t( "Attribute Exists", "a[@title]", ["google"] );
* @test t( "Attribute Exists", "*[@title]", ["google"] );
* @test t( "Attribute Exists", "[@title]", ["google"] );
+ *
+ * @test t( "Non-existing part of attribute [@name*=bla]", "[@name*=bla]", [] );
+ * @test t( "Non-existing start of attribute [@name^=bla]", "[@name^=bla]", [] );
+ * @test t( "Non-existing end of attribute [@name$=bla]", "[@name$=bla]", [] );
+ *
* @test t( "Attribute Equals", "a[@rel='bookmark']", ["simon1"] );
* @test t( "Attribute Equals", 'a[@rel="bookmark"]', ["simon1"] );
* @test t( "Attribute Equals", "a[@rel=bookmark]", ["simon1"] );
* @test t( "Element Preceded By", "p ~ div", ["foo"] );
* @test t( "Not", "a.blog:not(.link)", ["mark"] );
*
- * @test cmpOK( jQuery.find("//*").length, ">=", 30, "All Elements (//*)" );
+ * @test ok( jQuery.find("//*").length >= 30, "All Elements (//*)" );
* @test t( "All Div Elements", "//div", ["main","foo"] );
* @test t( "Absolute Path", "/html/body", ["body"] );
* @test t( "Absolute Path w/ *", "/* /body", ["body"] );
// The regular expressions that power the parsing engine
parse: [
// Match: [@value='test'], [@foo]
- [ "\\[ *(@)S *([!*$^=]*) *Q\\]", 1 ],
+ "\\[ *(@)S *([!*$^=]*)Q\\]",
// Match: [div], [div p]
- [ "(\\[)Q\\]", 0 ],
+ "(\\[)Q\\]",
// Match: :contains('foo')
- [ "(:)S\\(Q\\)", 0 ],
+ "(:)S\\(Q\\)",
// Match: :even, :last-chlid
- [ "([:.#]*)S", 0 ]
+ "([:.#]*)S"
],
filter: function(t,r,not) {
var p = jQuery.parse;
for ( var i = 0; i < p.length; i++ ) {
- var re = new RegExp( "^" + p[i][0]
-
+ // get number for backreference
+ var br = 0;
+ if(p[i].indexOf('Q') != -1){
+ br = p[i].replace(/\\\(/g,'').match(/\(|S/g).length+1;
+ }
+ var re = new RegExp( "^" + p[i]
+
// Look for a string-like sequence
.replace( 'S', "([a-z*_-][a-z0-9_-]*)" )
// Look for something (optionally) enclosed with quotes
- .replace( 'Q', " *'?\"?([^'\"]*?)'?\"? *" ), "i" );
+ .replace( 'Q', " *('|\"|)([^'\"]*?)\\"+br+" *" ), "i" );
var m = re.exec( t );
if ( m ) {
// Re-organize the match
- if ( p[i][1] )
- m = ["", m[1], m[3], m[2], m[4]];
-
+ if(br == 4){
+ m = ["",m[1], m[3], m[2], m[5]];
+ } else if(br != 0) {
+ m.splice(br,1);
+ }
// Remove what we just matched
t = t.replace( re, "" );