( function ( mw, $ ) {
+ var
+ // Based on IPTest.php > testisIPv4
+ IPV4_CASES = [
+ [false, false, 'Boolean false is not an IP'],
+ [false, true, 'Boolean true is not an IP'],
+ [false, '', 'Empty string is not an IP'],
+ [false, 'abc', '"abc" is not an IP'],
+ [false, ':', 'Colon is not an IP'],
+ [false, '124.24.52', 'IPv4 not enough quads'],
+ [false, '24.324.52.13', 'IPv4 out of range'],
+ [false, '.24.52.13', 'IPv4 starts with period'],
+
+ [true, '124.24.52.13', '124.24.52.134 is a valid IP'],
+ [true, '1.24.52.13', '1.24.52.13 is a valid IP'],
+ [false, '74.24.52.13/20', 'IPv4 ranges are not recognized as valid IPs']
+ ],
+
+ // Based on IPTest.php > testisIPv6
+ IPV6_CASES = [
+ [false, ':fc:100::', 'IPv6 starting with lone ":"'],
+ [false, 'fc:100:::', 'IPv6 ending with a ":::"'],
+ [false, 'fc:300', 'IPv6 with only 2 words'],
+ [false, 'fc:100:300', 'IPv6 with only 3 words'],
+
+ [false, 'fc:100:a:d:1:e:ac:0::', 'IPv6 with 8 words ending with "::"'],
+ [false, 'fc:100:a:d:1:e:ac:0:1::', 'IPv6 with 9 words ending with "::"'],
+
+ [false, ':::'],
+ [false, '::0:', 'IPv6 ending in a lone ":"'],
+
+ [true, '::', 'IPv6 zero address'],
+
+ [false, '::fc:100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words'],
+ [false, '::fc:100:a:d:1:e:ac:0:1', 'IPv6 with 9 words'],
+
+ [false, ':fc::100', 'IPv6 starting with lone ":"'],
+ [false, 'fc::100:', 'IPv6 ending with lone ":"'],
+ [false, 'fc:::100', 'IPv6 with ":::" in the middle'],
+
+ [true, 'fc::100', 'IPv6 with "::" and 2 words'],
+ [true, 'fc::100:a', 'IPv6 with "::" and 3 words'],
+ [true, 'fc::100:a:d', 'IPv6 with "::" and 4 words'],
+ [true, 'fc::100:a:d:1', 'IPv6 with "::" and 5 words'],
+ [true, 'fc::100:a:d:1:e', 'IPv6 with "::" and 6 words'],
+ [true, 'fc::100:a:d:1:e:ac', 'IPv6 with "::" and 7 words'],
+ [true, '2001::df', 'IPv6 with "::" and 2 words'],
+ [true, '2001:5c0:1400:a::df', 'IPv6 with "::" and 5 words'],
+ [true, '2001:5c0:1400:a::df:2', 'IPv6 with "::" and 6 words'],
+
+ [false, 'fc::100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words'],
+ [false, 'fc::100:a:d:1:e:ac:0:1', 'IPv6 with 9 words']
+ ];
+
+ Array.prototype.push.apply( IPV6_CASES,
+ $.map( [
+ 'fc:100::',
+ 'fc:100:a::',
+ 'fc:100:a:d::',
+ 'fc:100:a:d:1::',
+ 'fc:100:a:d:1:e::',
+ 'fc:100:a:d:1:e:ac::',
+ '::0',
+ '::fc',
+ '::fc:100',
+ '::fc:100:a',
+ '::fc:100:a:d',
+ '::fc:100:a:d:1',
+ '::fc:100:a:d:1:e',
+ '::fc:100:a:d:1:e:ac',
+ 'fc:100:a:d:1:e:ac:0'
+ ], function ( el ) {
+ return [[ true, el, el + ' is a valid IP' ]];
+ } )
+ );
+
QUnit.module( 'mediawiki.util', QUnit.newMwEnvironment( {
setup: function () {
$.fn.updateTooltipAccessKeys.setTestMode( true );
} );
QUnit.test( 'isIPv6Address', 40, function ( assert ) {
- // Shortcuts
- function assertFalseIPv6( addy, summary ) {
- return assert.strictEqual( mw.util.isIPv6Address( addy ), false, summary );
- }
-
- function assertTrueIPv6( addy, summary ) {
- return assert.strictEqual( mw.util.isIPv6Address( addy ), true, summary );
- }
-
- // Based on IPTest.php > testisIPv6
- assertFalseIPv6( ':fc:100::', 'IPv6 starting with lone ":"' );
- assertFalseIPv6( 'fc:100:::', 'IPv6 ending with a ":::"' );
- assertFalseIPv6( 'fc:300', 'IPv6 with only 2 words' );
- assertFalseIPv6( 'fc:100:300', 'IPv6 with only 3 words' );
-
- $.each(
- ['fc:100::',
- 'fc:100:a::',
- 'fc:100:a:d::',
- 'fc:100:a:d:1::',
- 'fc:100:a:d:1:e::',
- 'fc:100:a:d:1:e:ac::'], function ( i, addy ) {
- assertTrueIPv6( addy, addy + ' is a valid IP' );
- } );
-
- assertFalseIPv6( 'fc:100:a:d:1:e:ac:0::', 'IPv6 with 8 words ending with "::"' );
- assertFalseIPv6( 'fc:100:a:d:1:e:ac:0:1::', 'IPv6 with 9 words ending with "::"' );
-
- assertFalseIPv6( ':::' );
- assertFalseIPv6( '::0:', 'IPv6 ending in a lone ":"' );
-
- assertTrueIPv6( '::', 'IPv6 zero address' );
- $.each(
- ['::0',
- '::fc',
- '::fc:100',
- '::fc:100:a',
- '::fc:100:a:d',
- '::fc:100:a:d:1',
- '::fc:100:a:d:1:e',
- '::fc:100:a:d:1:e:ac',
-
- 'fc:100:a:d:1:e:ac:0'], function ( i, addy ) {
- assertTrueIPv6( addy, addy + ' is a valid IP' );
- } );
-
- assertFalseIPv6( '::fc:100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words' );
- assertFalseIPv6( '::fc:100:a:d:1:e:ac:0:1', 'IPv6 with 9 words' );
-
- assertFalseIPv6( ':fc::100', 'IPv6 starting with lone ":"' );
- assertFalseIPv6( 'fc::100:', 'IPv6 ending with lone ":"' );
- assertFalseIPv6( 'fc:::100', 'IPv6 with ":::" in the middle' );
-
- assertTrueIPv6( 'fc::100', 'IPv6 with "::" and 2 words' );
- assertTrueIPv6( 'fc::100:a', 'IPv6 with "::" and 3 words' );
- assertTrueIPv6( 'fc::100:a:d', 'IPv6 with "::" and 4 words' );
- assertTrueIPv6( 'fc::100:a:d:1', 'IPv6 with "::" and 5 words' );
- assertTrueIPv6( 'fc::100:a:d:1:e', 'IPv6 with "::" and 6 words' );
- assertTrueIPv6( 'fc::100:a:d:1:e:ac', 'IPv6 with "::" and 7 words' );
- assertTrueIPv6( '2001::df', 'IPv6 with "::" and 2 words' );
- assertTrueIPv6( '2001:5c0:1400:a::df', 'IPv6 with "::" and 5 words' );
- assertTrueIPv6( '2001:5c0:1400:a::df:2', 'IPv6 with "::" and 6 words' );
-
- assertFalseIPv6( 'fc::100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words' );
- assertFalseIPv6( 'fc::100:a:d:1:e:ac:0:1', 'IPv6 with 9 words' );
+ $.each( IPV6_CASES, function ( i, ipCase ) {
+ assert.strictEqual( mw.util.isIPv6Address( ipCase[1] ), ipCase[0], ipCase[2] );
+ } );
} );
QUnit.test( 'isIPv4Address', 11, function ( assert ) {
- // Shortcuts
- function assertFalseIPv4( addy, summary ) {
- assert.strictEqual( mw.util.isIPv4Address( addy ), false, summary );
- }
+ $.each( IPV4_CASES, function ( i, ipCase ) {
+ assert.strictEqual( mw.util.isIPv4Address( ipCase[1] ), ipCase[0], ipCase[2] );
+ } );
+ } );
- function assertTrueIPv4( addy, summary ) {
- assert.strictEqual( mw.util.isIPv4Address( addy ), true, summary );
- }
+ QUnit.test( 'isIPAddress', 51, function ( assert ) {
+ $.each( IPV4_CASES, function ( i, ipCase ) {
+ assert.strictEqual( mw.util.isIPv4Address( ipCase[1] ), ipCase[0], ipCase[2] );
+ } );
- // Based on IPTest.php > testisIPv4
- assertFalseIPv4( false, 'Boolean false is not an IP' );
- assertFalseIPv4( true, 'Boolean true is not an IP' );
- assertFalseIPv4( '', 'Empty string is not an IP' );
- assertFalseIPv4( 'abc', '"abc" is not an IP' );
- assertFalseIPv4( ':', 'Colon is not an IP' );
- assertFalseIPv4( '124.24.52', 'IPv4 not enough quads' );
- assertFalseIPv4( '24.324.52.13', 'IPv4 out of range' );
- assertFalseIPv4( '.24.52.13', 'IPv4 starts with period' );
-
- assertTrueIPv4( '124.24.52.13', '124.24.52.134 is a valid IP' );
- assertTrueIPv4( '1.24.52.13', '1.24.52.13 is a valid IP' );
- assertFalseIPv4( '74.24.52.13/20', 'IPv4 ranges are not recogzized as valid IPs' );
+ $.each( IPV6_CASES, function ( i, ipCase ) {
+ assert.strictEqual( mw.util.isIPv6Address( ipCase[1] ), ipCase[0], ipCase[2] );
+ } );
} );
}( mediaWiki, jQuery ) );