|
| 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 | +} ); |
0 commit comments