Refactored test suite: All tests are now compiled into one file, runs much faster...
[jquery.git] / src / jquery / jquery.js
index c4ed21b..11cd56e 100644 (file)
@@ -28,7 +28,7 @@ window.undefined = window.undefined;
  * @name jQuery
  * @cat Core
  */
-function jQuery(a,c) {
+jQuery = function(a,c) {
 
        // Shortcut for document ready (because $(document).each() is silly)
        if ( a && a.constructor == Function && jQuery.fn.ready )
@@ -67,7 +67,7 @@ function jQuery(a,c) {
        // If so, execute it in context
        if ( fn && fn.constructor == Function )
                this.each(fn);
-}
+};
 
 // Map over the $ in case of overwrite
 if ( typeof $ != "undefined" )
@@ -203,7 +203,7 @@ jQuery.fn = jQuery.prototype = {
         * @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
@@ -218,7 +218,7 @@ jQuery.fn = jQuery.prototype = {
         * @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
@@ -252,7 +252,7 @@ jQuery.fn = jQuery.prototype = {
         * @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
@@ -390,6 +390,8 @@ jQuery.fn = jQuery.prototype = {
         * @test ok( $('#en').attr('lang') == "en", 'Check for lang attribute' );
         * @test ok( $('#simon').attr('class') == "blog link", 'Check for class attribute' );
         * @test ok( $('#name').attr('name') == "name", 'Check for name attribute' );
+        * @test ok( $('#text1').attr('name') == "action", 'Check for name attribute' );
+        * @test ok( $('#form').attr('action') == "formaction", 'Check for action attribute' );
         * 
         * @name attr
         * @type Object
@@ -1033,7 +1035,7 @@ jQuery.fn = jQuery.prototype = {
         * @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
@@ -1547,7 +1549,7 @@ jQuery.extend({
         * @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"] );
@@ -1604,7 +1606,7 @@ jQuery.extend({
         * @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"] );
@@ -1631,6 +1633,8 @@ jQuery.extend({
         * @test t( "Is Visible", "input:visible", ["text1","text2","radio1","radio2","check1","check2","name"] );
         * @test t( "Is Hidden", "input:hidden", ["hidden1","hidden2"] );
         *
+        * @test t( "Grouped Form Elements", "input[@name='foo[bar]']", ["hidden2"] );
+        *
         * @test t( "All Children of ID", "#foo/*", ["sndp", "en", "sap"]  );
         * @test t( "All Children of ID with no children", "#firstUL/*", []  );
         *
@@ -1766,16 +1770,16 @@ jQuery.extend({
        // 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) {
@@ -1788,21 +1792,28 @@ jQuery.extend({
                        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, "" );
 
@@ -2127,8 +2138,11 @@ jQuery.extend({
 
                        var c = this.events[event.type];
 
+                       var args = [].slice.call( arguments, 1 );
+                       args.unshift( event );
+
                        for ( var j in c ) {
-                               if ( c[j].apply( this, [event] ) === false ) {
+                               if ( c[j].apply( this, args ) === false ) {
                                        event.preventDefault();
                                        event.stopPropagation();
                                        returnValue = false;