Skip to content

Commit 4bcf47e

Browse files
committed
Core: Add tests for jquery-patch, fix jQuery.escapeSelector
Fix jQuery.escapeSelector to work with no parameter passed, just like is tested in Core.
1 parent 84798aa commit 4bcf47e

File tree

8 files changed

+200
-1
lines changed

8 files changed

+200
-1
lines changed

build/tasks/testswarm.js

+1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ var versions = {
3535
"Droppable": "droppable/droppable.html",
3636
"Effects": "effects/effects.html",
3737
"Form Reset Mixin": "form-reset-mixin/form-reset-mixin.html",
38+
"jQuery Patch": "jquery-patch/jquery-patch.html",
3839
"Menu": "menu/menu.html",
3940
"Position": "position/position.html",
4041
"Progressbar": "progressbar/progressbar.html",

tests/runner/flags/suites.js

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export const suites = [
1111
"droppable",
1212
"effects",
1313
"form-reset-mixin",
14+
"jquery-patch",
1415
"menu",
1516
"position",
1617
"progressbar",

tests/unit/all.html

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"droppable/droppable.html",
2929
"effects/effects.html",
3030
"form-reset-mixin/form-reset-mixin.html",
31+
"jquery-patch/jquery-patch.html",
3132
"menu/menu.html",
3233
"position/position.html",
3334
"progressbar/progressbar.html",

tests/unit/index.html

+1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ <h2>Widgets</h2>
5555

5656
<h2>Utilities</h2>
5757
<ul>
58+
<li><a href="jquery-patch/jquery-patch.html">jQuery Patch</a></li>
5859
<li><a href="position/position.html">Position</a></li>
5960
</ul>
6061

tests/unit/jquery-patch/all.html

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8">
5+
<title>jQuery UI Form Reset Mixin Test Suite</title>
6+
7+
<script src="../../../external/jquery/jquery.js"></script>
8+
9+
<link rel="stylesheet" href="../../../external/qunit/qunit.css">
10+
<link rel="stylesheet" href="../../lib/vendor/qunit-composite/qunit-composite.css">
11+
<script src="../../../external/qunit/qunit.js"></script>
12+
<script src="../../lib/vendor/qunit-composite/qunit-composite.js"></script>
13+
<script src="../subsuite.js"></script>
14+
15+
<script>
16+
testAllVersions( "jquery-patch" );
17+
</script>
18+
</head>
19+
<body>
20+
21+
<div id="qunit"></div>
22+
<div id="qunit-fixture">
23+
24+
</div>
25+
</body>
26+
</html>

tests/unit/jquery-patch/core.js

+141
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
define( [
2+
"qunit",
3+
"jquery",
4+
"lib/helper",
5+
"ui/jquery-patch"
6+
], function( QUnit, $, helper ) {
7+
"use strict";
8+
9+
QUnit.module( "jquery-patch: core", { afterEach: helper.moduleAfterEach } );
10+
11+
QUnit.test( "jQuery.escapeSelector", function( assert ) {
12+
assert.expect( 58 );
13+
14+
// Edge cases
15+
assert.equal( jQuery.escapeSelector(), "undefined", "Converts undefined to string" );
16+
assert.equal( jQuery.escapeSelector( "-" ), "\\-", "Escapes standalone dash" );
17+
assert.equal( jQuery.escapeSelector( "-a" ), "-a", "Doesn't escape leading dash followed by non-number" );
18+
assert.equal( jQuery.escapeSelector( "--" ), "--", "Doesn't escape standalone double dash" );
19+
assert.equal( jQuery.escapeSelector( "\uFFFD" ), "\uFFFD",
20+
"Doesn't escape standalone replacement character" );
21+
assert.equal( jQuery.escapeSelector( "a\uFFFD" ), "a\uFFFD",
22+
"Doesn't escape trailing replacement character" );
23+
assert.equal( jQuery.escapeSelector( "\uFFFDb" ), "\uFFFDb",
24+
"Doesn't escape leading replacement character" );
25+
assert.equal( jQuery.escapeSelector( "a\uFFFDb" ), "a\uFFFDb",
26+
"Doesn't escape embedded replacement character" );
27+
28+
// Derived from CSSOM tests
29+
// https://test.csswg.org/harness/test/cssom-1_dev/section/7.1/
30+
31+
// String conversion
32+
assert.equal( jQuery.escapeSelector( true ), "true", "Converts boolean true to string" );
33+
assert.equal( jQuery.escapeSelector( false ), "false", "Converts boolean true to string" );
34+
assert.equal( jQuery.escapeSelector( null ), "null", "Converts null to string" );
35+
assert.equal( jQuery.escapeSelector( "" ), "", "Doesn't modify empty string" );
36+
37+
// Null bytes
38+
assert.equal( jQuery.escapeSelector( "\0" ), "\uFFFD",
39+
"Escapes null-character input as replacement character" );
40+
assert.equal( jQuery.escapeSelector( "a\0" ), "a\uFFFD",
41+
"Escapes trailing-null input as replacement character" );
42+
assert.equal( jQuery.escapeSelector( "\0b" ), "\uFFFDb",
43+
"Escapes leading-null input as replacement character" );
44+
assert.equal( jQuery.escapeSelector( "a\0b" ), "a\uFFFDb",
45+
"Escapes embedded-null input as replacement character" );
46+
47+
// Number prefix
48+
assert.equal( jQuery.escapeSelector( "0a" ), "\\30 a", "Escapes leading 0" );
49+
assert.equal( jQuery.escapeSelector( "1a" ), "\\31 a", "Escapes leading 1" );
50+
assert.equal( jQuery.escapeSelector( "2a" ), "\\32 a", "Escapes leading 2" );
51+
assert.equal( jQuery.escapeSelector( "3a" ), "\\33 a", "Escapes leading 3" );
52+
assert.equal( jQuery.escapeSelector( "4a" ), "\\34 a", "Escapes leading 4" );
53+
assert.equal( jQuery.escapeSelector( "5a" ), "\\35 a", "Escapes leading 5" );
54+
assert.equal( jQuery.escapeSelector( "6a" ), "\\36 a", "Escapes leading 6" );
55+
assert.equal( jQuery.escapeSelector( "7a" ), "\\37 a", "Escapes leading 7" );
56+
assert.equal( jQuery.escapeSelector( "8a" ), "\\38 a", "Escapes leading 8" );
57+
assert.equal( jQuery.escapeSelector( "9a" ), "\\39 a", "Escapes leading 9" );
58+
59+
// Letter-number prefix
60+
assert.equal( jQuery.escapeSelector( "a0b" ), "a0b", "Doesn't escape embedded 0" );
61+
assert.equal( jQuery.escapeSelector( "a1b" ), "a1b", "Doesn't escape embedded 1" );
62+
assert.equal( jQuery.escapeSelector( "a2b" ), "a2b", "Doesn't escape embedded 2" );
63+
assert.equal( jQuery.escapeSelector( "a3b" ), "a3b", "Doesn't escape embedded 3" );
64+
assert.equal( jQuery.escapeSelector( "a4b" ), "a4b", "Doesn't escape embedded 4" );
65+
assert.equal( jQuery.escapeSelector( "a5b" ), "a5b", "Doesn't escape embedded 5" );
66+
assert.equal( jQuery.escapeSelector( "a6b" ), "a6b", "Doesn't escape embedded 6" );
67+
assert.equal( jQuery.escapeSelector( "a7b" ), "a7b", "Doesn't escape embedded 7" );
68+
assert.equal( jQuery.escapeSelector( "a8b" ), "a8b", "Doesn't escape embedded 8" );
69+
assert.equal( jQuery.escapeSelector( "a9b" ), "a9b", "Doesn't escape embedded 9" );
70+
71+
// Dash-number prefix
72+
assert.equal( jQuery.escapeSelector( "-0a" ), "-\\30 a", "Escapes 0 after leading dash" );
73+
assert.equal( jQuery.escapeSelector( "-1a" ), "-\\31 a", "Escapes 1 after leading dash" );
74+
assert.equal( jQuery.escapeSelector( "-2a" ), "-\\32 a", "Escapes 2 after leading dash" );
75+
assert.equal( jQuery.escapeSelector( "-3a" ), "-\\33 a", "Escapes 3 after leading dash" );
76+
assert.equal( jQuery.escapeSelector( "-4a" ), "-\\34 a", "Escapes 4 after leading dash" );
77+
assert.equal( jQuery.escapeSelector( "-5a" ), "-\\35 a", "Escapes 5 after leading dash" );
78+
assert.equal( jQuery.escapeSelector( "-6a" ), "-\\36 a", "Escapes 6 after leading dash" );
79+
assert.equal( jQuery.escapeSelector( "-7a" ), "-\\37 a", "Escapes 7 after leading dash" );
80+
assert.equal( jQuery.escapeSelector( "-8a" ), "-\\38 a", "Escapes 8 after leading dash" );
81+
assert.equal( jQuery.escapeSelector( "-9a" ), "-\\39 a", "Escapes 9 after leading dash" );
82+
83+
// Double dash prefix
84+
assert.equal( jQuery.escapeSelector( "--a" ), "--a", "Doesn't escape leading double dash" );
85+
86+
// Miscellany
87+
assert.equal( jQuery.escapeSelector( "\x01\x02\x1E\x1F" ), "\\1 \\2 \\1e \\1f ",
88+
"Escapes C0 control characters" );
89+
assert.equal( jQuery.escapeSelector( "\x80\x2D\x5F\xA9" ), "\x80\x2D\x5F\xA9",
90+
"Doesn't escape general punctuation or non-ASCII ISO-8859-1 characters" );
91+
assert.equal(
92+
jQuery.escapeSelector( "\x7F\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90" +
93+
"\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F" ),
94+
"\\7f \x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90" +
95+
"\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F",
96+
"Escapes DEL control character"
97+
);
98+
assert.equal( jQuery.escapeSelector( "\xA0\xA1\xA2" ), "\xA0\xA1\xA2",
99+
"Doesn't escape non-ASCII ISO-8859-1 characters" );
100+
assert.equal( jQuery.escapeSelector( "a0123456789b" ), "a0123456789b",
101+
"Doesn't escape embedded numbers" );
102+
assert.equal( jQuery.escapeSelector( "abcdefghijklmnopqrstuvwxyz" ), "abcdefghijklmnopqrstuvwxyz",
103+
"Doesn't escape lowercase ASCII letters" );
104+
assert.equal( jQuery.escapeSelector( "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ), "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
105+
"Doesn't escape uppercase ASCII letters" );
106+
assert.equal( jQuery.escapeSelector( "\x20\x21\x78\x79" ), "\\ \\!xy",
107+
"Escapes non-word ASCII characters" );
108+
109+
// Astral symbol (U+1D306 TETRAGRAM FOR CENTRE)
110+
assert.equal( jQuery.escapeSelector( "\uD834\uDF06" ), "\uD834\uDF06",
111+
"Doesn't escape astral characters" );
112+
113+
// Lone surrogates
114+
assert.equal( jQuery.escapeSelector( "\uDF06" ), "\uDF06", "Doesn't escape lone low surrogate" );
115+
assert.equal( jQuery.escapeSelector( "\uD834" ), "\uD834", "Doesn't escape lone high surrogate" );
116+
} );
117+
118+
QUnit.test( "even()/odd()", function( assert ) {
119+
assert.expect( 8 );
120+
121+
var lis,
122+
ul = jQuery( "<ul><li>One</li><li>Two</li><li>Three</li><li>Four</li></ul>" ),
123+
none = jQuery();
124+
125+
ul.appendTo( "#qunit-fixture" );
126+
127+
lis = ul.find( "li" );
128+
129+
assert.strictEqual( lis.even().length, 2, "even() length" );
130+
assert.strictEqual( lis.even().eq( 0 ).text(), "One", "even(): 1st" );
131+
assert.strictEqual( lis.even().eq( 1 ).text(), "Three", "even(): 2nd" );
132+
133+
assert.strictEqual( lis.odd().length, 2, "odd() length" );
134+
assert.strictEqual( lis.odd().eq( 0 ).text(), "Two", "odd(): 1st" );
135+
assert.strictEqual( lis.odd().eq( 1 ).text(), "Four", "odd(): 2nd" );
136+
137+
assert.deepEqual( none.even().get(), [], "even() none" );
138+
assert.deepEqual( none.odd().get(), [], "odd() none" );
139+
} );
140+
141+
} );
+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8">
5+
<title>jQuery UI Form Reset Mixin Test Suite</title>
6+
7+
<script src="../../../external/requirejs/require.js"></script>
8+
<script src="../../lib/css.js"></script>
9+
<script src="../../lib/bootstrap.js" data-modules="core">
10+
</script>
11+
</head>
12+
<body>
13+
14+
<div id="qunit"></div>
15+
<div id="qunit-fixture">
16+
17+
<form id="main">
18+
<input id="input1">
19+
<input id="input2">
20+
<input id="input3">
21+
<input id="input4">
22+
</form>
23+
24+
</div>
25+
</body>
26+
</html>

ui/jquery-patch.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@
3131
// This method has been defined in jQuery 3.0.0.
3232
// Code from https://github.com/jquery/jquery/blob/e539bac79e666bba95bba86d690b4e609dca2286/src/selector/escapeSelector.js
3333
if ( !$.escapeSelector ) {
34-
$.escapeSelector = CSS.escape;
34+
$.escapeSelector = function( id ) {
35+
return CSS.escape( id + "" );
36+
};
3537
}
3638

3739
// Support: jQuery 3.4.x or older

0 commit comments

Comments
 (0)