Index: tests/qunit/wp-includes/js/shortcode.js
===================================================================
--- tests/qunit/wp-includes/js/shortcode.js	(revision 26844)
+++ tests/qunit/wp-includes/js/shortcode.js	(working copy)
@@ -134,7 +134,36 @@
 		equal( result, 'this has the [foo] shortcode', 'stub not replaced' );
 	});
 
+    // A callback function for the replace tests
 	function shortcodeReplaceCallback( ) {
 		return 'bar';
 	}
+
+    test( 'attrs() should return named attributes created with single, double, and no quotes', function() {
+        var expected = {
+            'named': {
+                'param': 'foo',
+                'another': 'bar',
+                'andagain': 'baz'
+            }, 'numeric' : []
+        };
+
+        deepEqual( wp.shortcode.attrs('param="foo" another=\'bar\' andagain=baz'), expected, 'attr parsed all three named types');
+    });
+
+    test( 'attrs() should return numeric attributes in the order they are used', function() {
+        var expected = {
+            'named': {}, 'numeric' : ['foo', 'bar', 'baz']
+        };
+
+        deepEqual( wp.shortcode.attrs('foo bar baz'), expected, 'attr parsed numeric attributes');
+    });
+
+    test( 'attrs() should return numeric attributes in the order they are used when they have named attributes in between', function() {
+        var expected = {
+            'named': { 'not': 'a blocker'  }, 'numeric' : ['foo', 'bar', 'baz']
+        };
+
+        deepEqual( wp.shortcode.attrs('foo not="a blocker" bar baz'), expected, 'attr parsed numeric attributes');
+    });
 });
