} );
QUnit.test( 'escapeId', function ( assert ) {
- mw.config.set( 'wgExperimentalHtmlIds', false );
+ mw.config.set( 'wgFragmentMode', [ 'legacy' ] );
$.each( {
'+': '.2B',
'&': '.26',
} );
} );
+ QUnit.test( 'escapeIdForAttribute', function ( assert ) {
+ // Test cases are kept in sync with SanitizerTest.php
+ var text = 'foo тест_#%!\'()[]:<>',
+ legacyEncoded = 'foo_.D1.82.D0.B5.D1.81.D1.82_.23.25.21.27.28.29.5B.5D:.3C.3E',
+ html5Encoded = 'foo_тест_#%!\'()[]:<>',
+ html5Experimental = 'foo_тест_!_()[]:<>',
+ // Settings: this is $wgFragmentMode
+ legacy = [ 'legacy' ],
+ legacyNew = [ 'legacy', 'html5' ],
+ newLegacy = [ 'html5', 'legacy' ],
+ allNew = [ 'html5' ],
+ experimentalLegacy = [ 'html5-legacy', 'legacy' ],
+ newExperimental = [ 'html5', 'html5-legacy' ];
+
+ // Test cases are kept in sync with SanitizerTest.php
+ $.each( [
+ // Pure legacy: how MW worked before 2017
+ [ legacy, text, legacyEncoded ],
+ // Transition to a new world: legacy links with HTML5 fallback
+ [ legacyNew, text, legacyEncoded ],
+ // New world: HTML5 links, legacy fallbacks
+ [ newLegacy, text, html5Encoded ],
+ // Distant future: no legacy fallbacks
+ [ allNew, text, html5Encoded ],
+ // Someone flipped $wgExperimentalHtmlIds on
+ [ experimentalLegacy, text, html5Experimental ],
+ // Migration from $wgExperimentalHtmlIds to modern HTML5
+ [ newExperimental, text, html5Encoded ]
+ ], function ( index, testCase ) {
+ mw.config.set( 'wgFragmentMode', testCase[ 0 ] );
+
+ assert.equal( util.escapeIdForAttribute( testCase[ 1 ] ), testCase[ 2 ] );
+ } );
+ } );
+
+ QUnit.test( 'escapeIdForLink', function ( assert ) {
+ // Test cases are kept in sync with SanitizerTest.php
+ var text = 'foo тест_#%!\'()[]:<>',
+ legacyEncoded = 'foo_.D1.82.D0.B5.D1.81.D1.82_.23.25.21.27.28.29.5B.5D:.3C.3E',
+ html5Escaped = 'foo_%D1%82%D0%B5%D1%81%D1%82_%23%25!\'()%5B%5D:%3C%3E',
+ html5Experimental = 'foo_тест_!_()[]:<>',
+ // Settings: this is wgFragmentMode
+ legacy = [ 'legacy' ],
+ legacyNew = [ 'legacy', 'html5' ],
+ newLegacy = [ 'html5', 'legacy' ],
+ allNew = [ 'html5' ],
+ experimentalLegacy = [ 'html5-legacy', 'legacy' ],
+ newExperimental = [ 'html5', 'html5-legacy' ];
+
+ $.each( [
+ // Pure legacy: how MW worked before 2017
+ [ legacy, text, legacyEncoded ],
+ // Transition to a new world: legacy links with HTML5 fallback
+ [ legacyNew, text, legacyEncoded ],
+ // New world: HTML5 links, legacy fallbacks
+ [ newLegacy, text, html5Escaped ],
+ // Distant future: no legacy fallbacks
+ [ allNew, text, html5Escaped ],
+ // Someone flipped wgExperimentalHtmlIds on
+ [ experimentalLegacy, text, html5Experimental ],
+ // Migration from wgExperimentalHtmlIds to modern HTML5
+ [ newExperimental, text, html5Escaped ]
+ ], function ( index, testCase ) {
+ mw.config.set( 'wgFragmentMode', testCase[ 0 ] );
+
+ assert.equal( util.escapeIdForLink( testCase[ 1 ] ), testCase[ 2 ] );
+ } );
+ } );
+
QUnit.test( 'wikiUrlencode', function ( assert ) {
assert.equal( util.wikiUrlencode( 'Test:A & B/Here' ), 'Test:A_%26_B/Here' );
// See also wfUrlencodeTest.php#provideURLS