<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script>
function test()
{
    let suite = InspectorTest.createSyncSuite("StringUtilities");

    suite.addTestCase({
        name: "String.format",
        test() {
            InspectorTest.expectThat("%f".format(1.23456789) === "1.234568", "float format specifier with no sub-specifier should show 6 decimal digits");
            InspectorTest.expectThat("%.0f".format(1.23456789) === "1", "float format specifier with precision 0 should show 0 decimal digits");
            InspectorTest.expectThat("%.1f".format(1.23456789) === "1.2", "float format specifier with precision 1 should show 1 decimal digit");
            InspectorTest.expectThat("%.2f".format(1.23456789) === "1.23", "float format specifier with precision 2 should show 2 decimal digits");
            InspectorTest.expectThat("%.3f".format(1.23456789) === "1.235", "float format specifier with precision 3 should show 3 decimal digits");
            InspectorTest.expectThat("%.4f".format(1.23456789) === "1.2346", "float format specifier with precision 4 should show 4 decimal digits");
            InspectorTest.expectThat("%.5f".format(1.23456789) === "1.23457", "float format specifier with precision 5 should show 5 decimal digits");
            InspectorTest.expectThat("%.6f".format(1.23456789) === "1.234568", "float format specifier with precision 6 should show 6 decimal digits");
            InspectorTest.expectThat("%.7f".format(1.23456789) === "1.2345679", "float format specifier with precision 7 should show 7 decimal digits");
            InspectorTest.expectThat("%.8f".format(1.23456789) === "1.23456789", "float format specifier with precision 8 should show 8 decimal digits");
            InspectorTest.expectThat("%.9f".format(1.23456789) === "1.234567890", "float format specifier with precision 9 should show 9 decimal digits");
            InspectorTest.expectThat("%f".format("1.23456789") === "1.234568", "float format specifier with string argument should attempt conversion to float");
            InspectorTest.expectThat("%f".format(Infinity) === "\u221E", "float format specifier with Infinity argument should show \"\u221E\"");
            InspectorTest.expectThat("%f".format(NaN) === "NaN", "float format specifier with NaN argument should show \"NaN\"");

            InspectorTest.expectThat("%d".format(137.1) === "137", "integer format specifier with float argument should convert to integer");
            InspectorTest.expectThat("%d".format("137") === "137", "integer format specifier with string argument should attempt conversion to integer");
            InspectorTest.expectThat("%d".format(Infinity) === "NaN", "integer format specifier with Infinity argument should show \"NaN\"");
            InspectorTest.expectThat("%d".format(NaN) === "NaN", "integer format specifier with NaN argument should show \"NaN\"");
            return true;
        }
    });

    suite.addTestCase({
        name: "String.prototype.extendedLocaleCompare",
        test() {
            InspectorTest.expectEqual("1".extendedLocaleCompare("2"), -1, `"1" < "2"`);
            InspectorTest.expectEqual("2".extendedLocaleCompare("1"), 1, `"2" > "1"`);
            InspectorTest.expectEqual("2".extendedLocaleCompare("10"), -1, `"2" < "10"`);
            InspectorTest.expectEqual("10".extendedLocaleCompare("2"), 1, `"10" > "2"`);
            InspectorTest.expectEqual("1".extendedLocaleCompare("10"), -1, `"1" < "10"`);
            InspectorTest.expectEqual("10".extendedLocaleCompare("1"), 1, `"10" > "1"`);

            InspectorTest.expectEqual("a1".extendedLocaleCompare("a2"), -1, `"a1" < "a2"`);
            InspectorTest.expectEqual("a2".extendedLocaleCompare("a1"), 1, `"a2" > "a1"`);
            InspectorTest.expectEqual("a2".extendedLocaleCompare("a10"), -1, `"a2" < "a10"`);
            InspectorTest.expectEqual("a10".extendedLocaleCompare("a2"), 1, `"a10" > "a2"`);
            InspectorTest.expectEqual("a1".extendedLocaleCompare("a10"), -1, `"a1" < "a10"`);
            InspectorTest.expectEqual("a10".extendedLocaleCompare("a1"), 1, `"a10" > "a1"`);
            return true;
        }
    });

    suite.addTestCase({
        name: "String.prototype.get lineCount",
        test() {
            InspectorTest.expectEqual("1\n2\n3".lineCount, 3, "A string with two line breaks should have three lines.");
            InspectorTest.expectEqual("1\n\n3".lineCount, 3, "A string with two consecutive line breaks should have three lines.");
            InspectorTest.expectEqual("1\n".lineCount, 2, "A string with a traling line breaks should have two lines.");
            InspectorTest.expectEqual("".lineCount, 1, "An empty string is one line.");

            return true;
        }
    });

    suite.addTestCase({
        name: "String.prototype.get lastLine",
        test() {
            InspectorTest.expectEqual("single line".lastLine, "single line", "Last line of one line string is the same string.");
            InspectorTest.expectEqual("1\n2\n3".lastLine, "3", "Last line of a three line string should be the third line.");
            InspectorTest.expectEqual("1\n".lastLine, "", "Last line of a string with a traling line break should be empty.");
            InspectorTest.expectEqual("".lastLine, "", "Last line of an empty string is the same empty string.");

            return true;
        }
    });

    suite.addTestCase({
        name: "String.prototype.truncateStart",
        test() {
            const ellipsis = "\u2026";
            InspectorTest.expectEqual("abcdef".truncateStart(6), "abcdef", "String stays the same.");
            InspectorTest.expectEqual("abcdef".truncateStart(5), ellipsis + "cdef", "Ellipsis is inserted before the third character.");
            InspectorTest.expectEqual("abcdef".truncateStart(4), ellipsis + "def", "Ellipsis is inserted before the fourth character.");
            return true;
        }
    });

    suite.addTestCase({
        name: "String.prototype.truncateMiddle",
        test() {
            const ellipsis = "\u2026";
            InspectorTest.expectEqual("abcdef".truncateMiddle(6), "abcdef", "String stays the same.");
            InspectorTest.expectEqual("abcdef".truncateMiddle(5), `ab${ellipsis}ef`, "Ellipsis is inserted in the middle.");
            InspectorTest.expectEqual("abcdef".truncateMiddle(4), `ab${ellipsis}f`, "Ellipsis is inserted after the second character.");
            return true;
        }
    });

    suite.addTestCase({
        name: "String.prototype.truncateEnd",
        test() {
            const ellipsis = "\u2026";
            InspectorTest.expectEqual("abcdef".truncateEnd(6), "abcdef", "String stays the same.");
            InspectorTest.expectEqual("abcdef".truncateEnd(5), "abcd" + ellipsis, "Ellipsis is inserted after the fourth character.");
            InspectorTest.expectEqual("abcdef".truncateEnd(4), "abc" + ellipsis, "Ellipsis is inserted after the third character.");
            return true;
        }
    });

    suite.addTestCase({
        name: "String.prototype.escapeCharacters",
        test() {
            InspectorTest.expectEqual("abcdef".escapeCharacters(), "abcdef", "String stays the same with no escape characters.");
            InspectorTest.expectEqual("abcdef".escapeCharacters(""), "abcdef", "String stays the same with empty escape characters.");
            InspectorTest.expectEqual("abcdef".escapeCharacters("g"), "abcdef", "String stays the same with no matching escape characters.");
            InspectorTest.expectEqual("abcdef".escapeCharacters("c"), "ab\\cdef", "The letter 'c' is escaped.");
            InspectorTest.expectEqual("abcdef".escapeCharacters("ce"), "ab\\cd\\ef", "The letter 'c' and 'e' are escaped.");
            InspectorTest.expectEqual("abcdef".escapeCharacters("cee"), "ab\\cd\\ef", "The letter 'c' and 'e' are escaped.");
            InspectorTest.expectEqual("abcdef".escapeCharacters("ced"), "ab\\c\\d\\ef", "The letter 'c', 'd', and 'e' are escaped.");
            return true;
        }
    });

    suite.addTestCase({
        name: "String.prototype.isLowerCase",
        test() {
            InspectorTest.expectTrue("a".isLowerCase(), "String with single lowercase character should be lowercase.");
            InspectorTest.expectTrue("abc".isLowerCase(), "String with multiple lowercase characters should be lowercase.");
            InspectorTest.expectFalse("A".isLowerCase(), "String with single uppercase character should not be lowercase.");
            InspectorTest.expectFalse("aBc".isLowerCase(), "String with mixed case characters should not be lowercase.");
            InspectorTest.expectFalse("".isLowerCase(), "Empty string should not be lowercase.");
            InspectorTest.expectFalse(".".isLowerCase(), "String with non-alpha character should not be lowercase.");
            InspectorTest.expectFalse("1".isLowerCase(), "String with numeric character should not be lowercase.");

            return true;
        }
    });

    suite.addTestCase({
        name: "String.prototype.isUpperCase",
        test() {
            InspectorTest.expectTrue("A".isUpperCase(), "String with single uppercase character should be uppercase.");
            InspectorTest.expectTrue("ABC".isUpperCase(), "String with multiple uppercase characters should be uppercase.");
            InspectorTest.expectFalse("a".isUpperCase(), "String with single lowercase character should not be uppercase.");
            InspectorTest.expectFalse("AbC".isUpperCase(), "String with mixed case characters should not be uppercase.");
            InspectorTest.expectFalse("".isUpperCase(), "Empty string should not be uppercase.");
            InspectorTest.expectFalse(".".isUpperCase(), "String with non-alpha character should not be uppercase.");
            InspectorTest.expectFalse("1".isUpperCase(), "String with numeric character should not be uppercase.");

            return true;
        }
    });

    suite.runTestCasesAndFinish();
}
</script>
</head>
<body onLoad="runTest()">
</body>
</html>
