| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../resources/js-test-pre.js"></script> |
| <script src="resources/utilities.js"></script> |
| </head> |
| <body> |
| <script> |
| description("Canonicalization of IPv4 addresses."); |
| |
| cases = [ |
| [".", ""], |
| |
| // Regular IP addresses in different bases. |
| ["192.168.0.1", "192.168.0.1"], |
| ["0300.0250.00.01", "192.168.0.1"], |
| ["0xC0.0Xa8.0x0.0x1", "192.168.0.1"], |
| |
| // Non-IP addresses due to invalid characters. |
| ["192.168.9.com", ""], |
| |
| // Invalid characters for the base should be rejected. |
| ["19a.168.0.1", ""], |
| ["0308.0250.00.01", ""], |
| ["0xCG.0xA8.0x0.0x1", ""], |
| |
| // If there are not enough components, the last one should fill them out. |
| ["192", "0.0.0.192"], |
| ["0xC0a80001", "192.168.0.1"], |
| ["030052000001", "192.168.0.1"], |
| ["000030052000001", "192.168.0.1"], |
| ["192.168", "192.0.0.168"], |
| ["192.0x00A80001", "192.168.0.1"], |
| ["0xc0.052000001", "192.168.0.1"], |
| ["192.168.1", "192.168.0.1"], |
| |
| // Too many components means not an IP address. |
| ["192.168.0.0.1", ""], |
| |
| // We allow a single trailing dot. |
| ["192.168.0.1.", "192.168.0.1"], |
| ["192.168.0.1. hello", ""], |
| ["192.168.0.1..", ""], |
| |
| // Two dots in a row means not an IP address. |
| ["192.168..1", ""], |
| |
| // Any numerical overflow should be marked as BROKEN. |
| ["0x100.0", ""], |
| ["0x100.0.0", ""], |
| ["0x100.0.0.0", ""], |
| ["0.0x100.0.0", ""], |
| ["0.0.0x100.0", ""], |
| ["0.0.0.0x100", ""], |
| ["0.0.0x10000", ""], |
| ["0.0x1000000", ""], |
| ["0x100000000", ""], |
| |
| // Repeat the previous tests, minus 1, to verify boundaries. |
| ["0xFF.0", "255.0.0.0"], |
| ["0xFF.0.0", "255.0.0.0"], |
| ["0xFF.0.0.0", "255.0.0.0"], |
| ["0.0xFF.0.0", "0.255.0.0"], |
| ["0.0.0xFF.0", "0.0.255.0"], |
| ["0.0.0.0xFF", "0.0.0.255"], |
| ["0.0.0xFFFF", "0.0.255.255"], |
| ["0.0xFFFFFF", "0.255.255.255"], |
| ["0xFFFFFFFF", "255.255.255.255"], |
| |
| // Old trunctations tests. They're all "BROKEN" now. |
| ["276.256.0xf1a2.077777", ""], |
| ["192.168.0.257", ""], |
| ["192.168.0xa20001", ""], |
| ["192.015052000001", ""], |
| ["0X12C0a80001", ""], |
| ["276.1.2", ""], |
| |
| // Spaces should be rejected. |
| ["192.168.0.1 hello", ""], |
| |
| // Very large numbers. |
| ["0000000000000300.0x00000000000000fF.00000000000000001", "192.255.0.1"], |
| ["0000000000000300.0xffffffffFFFFFFFF.3022415481470977", ""], |
| |
| // A number has no length limit, but long numbers can still overflow. |
| ["00000000000000000001", "0.0.0.1"], |
| ["0000000000000000100000000000000001", ""], |
| |
| // If a long component is non-numeric, it's a hostname, *not* a broken IP. |
| ["0.0.0.000000000000000000z", ""], |
| ["0.0.0.100000000000000000z", ""], |
| |
| // Truncation of all zeros should still result in 0. |
| ["0.00.0x.0x0", "0.0.0.0"] |
| ]; |
| |
| for (var i = 0; i < cases.length; ++i) { |
| test_vector = cases[i][0]; |
| expected_result = cases[i][1]; |
| if (expected_result === "") |
| expected_result = test_vector.toLowerCase(); |
| shouldBe("canonicalize('http://" + test_vector + "/')", |
| "'http://" + expected_result + "/'"); |
| } |
| </script> |
| <script src="../../resources/js-test-post.js"></script> |
| </body> |
| </html> |