<html>
<head>
<style>
body {
    margin: 0;
}
.shape {
    float: left;
    width: 200px;
    height: 200px;
    margin-right: -200px;
    box-sizing: border-box;
}
.padded {
    padding: 25px 75px 75px 25px;
}
.vertical-lr, .vertical-rl {
    float: left;
}
.vertical-lr {
    -webkit-writing-mode: vertical-lr;
}
.vertical-rl {
    -webkit-writing-mode: vertical-rl;
}
.inset {
    -webkit-shape-outside: inset(50px 50px 100px 50px) content-box;
}
.inset.padded {
    -webkit-shape-outside: inset(5px 5px 10px 5px) content-box;
}
.inset.padded.border-box {
    -webkit-shape-outside: inset(50px 50px 100px 50px) border-box;
}
.polygon {
    -webkit-shape-outside: polygon(50px 50px, 150px 50px, 150px 100px, 50px 100px) content-box;
}
.polygon.border-box {
    -webkit-shape-outside: polygon(50px 50px, 150px 50px, 150px 100px, 50px 100px) border-box;
}
.content-box {
    -webkit-shape-outside: content-box;
}
.raster-svg {
    -webkit-shape-outside: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100' preserveAspectRatio='none' width='100px' height='100px'><rect x='25' y='25' width='50' height='50' fill='blue' /></svg>");
}
.raster-svg-complex {
    -webkit-shape-outside: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100' preserveAspectRatio='none' width='100px' height='100px'><rect x='10' y='10' width='30' height='30' fill='blue' /><rect x='60' y='10' width='30' height='30' fill='blue' /><rect x='10' y='60' width='30' height='30' fill='blue' /><rect x='60' y='60' width='30' height='30' fill='blue' /></svg>");
}
.raster-png {
    /* png version of raster-svg */
   -webkit-shape-outside: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRFAAD/////e9yZLAAAAAJ0Uk5T/wDltzBKAAAASUlEQVR42uzYsQ0AMAgEsWf/pTMDBURIvgXcX2qhQCAQCAQCgUA+I2kHgUAgEAgEAoFAIBAIBAKBQOYRoxMCgUAgEAjkHPIEGAA2ih1NVnaDGgAAAABJRU5ErkJggg==");
}
</style>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script src="../../http/tests/inspector/dom/shapes-test.js"></script>
<script>
function test() {
    var testcases = [
    {
        'selector' : '.inset',
        'path' : ['M', 50, 50, 'L', 150, 50, 'L', 150, 100, 'L', 50, 100, 'L', 50, 50, 'Z']
    },
    {
        'selector' : '.inset.padded',
        'path' : ['M', 30, 30, 'L', 120, 30, 'L', 120, 115, 'L', 30, 115, 'L', 30, 30, 'Z']
    },
    {
        'selector' : '.inset.padded.border-box',
        'path' : ['M', 50, 50, 'L', 150, 50, 'L', 150, 100, 'L', 50, 100, 'L', 50, 50, 'Z']
    },
    {
        'selector' : '.polygon',
        'path' : ['M', 50, 50, 'L', 150, 50, 'L', 150, 100, 'L', 50, 100, 'Z']
    },
    {
        'selector' : '.polygon.padded.border-box',
        'path' : ['M', 50, 50, 'L', 150, 50, 'L', 150, 100, 'L', 50, 100, 'L', 50, 50, 'Z']
    },
    {
        'selector' : '.vertical-lr > .inset',
        'path' : ['M', 50, 50, 'L', 50, 100, 'L', 150, 100, 'L', 150, 50, 'L', 50, 50, 'Z']
    },
    {
        'selector' : '.vertical-lr > .inset.padded',
        'path' : ['M', 30, 30, 'L', 30, 115, 'L', 120, 115, 'L', 120, 30, 'L', 30, 30, 'Z']
    },
    {
        'selector' : '.vertical-lr > .inset.padded.border-box',
        'path' : ['M', 50, 50, 'L', 50, 100, 'L', 150, 100, 'L', 150, 50, 'L', 50, 50, 'Z']
    },
    {
        'selector' : '.vertical-rl > .inset',
        'path' : ['M', 150, 50, 'L', 150, 100, 'L', 50, 100, 'L', 50, 50, 'L', 150, 50, 'Z']
    },
    {
        'selector' : '.vertical-rl > .inset.padded',
        'path' : ['M', 120, 30, 'L', 120, 115, 'L', 30, 115, 'L', 30, 30, 'L', 120, 30, 'Z']
    },
    {
        'selector' : '.vertical-rl > .inset.padded.border-box',
        'path' : ['M', 150, 50, 'L', 150, 100, 'L', 50, 100, 'L', 50, 50, 'L', 150, 50, 'Z']
    },
    {
        'selector' : '.content-box.padded',
        'path' : ['M', 25, 25, 'L', 125, 25, 'L', 125, 125, 'L', 25, 125, 'L', 25, 25, 'Z']
    },
    {
        'selector' : '.raster-svg.padded',
        'path' : ['M', 50, 50, 'L', 100, 50, 'L', 100, 100, 'L', 50, 100, 'Z']
    },
    {
        'selector' : '.raster-svg-complex.padded',
        'path' : ['M', 35, 35, 'L', 115, 35, 'L', 115, 65, 'L', 35, 65, 'Z', 'M', 35, 85, 'L', 115, 85, 'L', 115, 115, 'L', 35, 115, 'Z']
    },
    {
        'selector' : '.raster-png.padded',
        'path' : ['M', 50, 50, 'L', 100, 50, 'L', 100, 100, 'L', 50, 100, 'Z']
    }
    ];

    function runNextTest(tests) {
        var testcase = tests[0];

        InspectorTest.Shapes.getShapeOutsideInfoForSelector(testcase.selector, function(payload) {
            if (!InspectorTest.Shapes.assertPathsAreRoughlyEqual(payload.shape, testcase.path, "Selector: \'" + testcase.selector + "\' Shape information was not roughly equal."))
                 InspectorTest.log("PASS: " + testcase.selector);

            if (tests.length > 1)
                runNextTest(tests.splice(1));
            else
                InspectorTest.completeTest();
        });
    }

    runNextTest(testcases);
}
</script>
</head>
<body onload="runTest()">
    <div class='shape inset'></div>
    <div class='shape padded inset'></div>
    <div class='shape padded inset border-box'></div>
    <div class='shape polygon'></div>
    <div class='shape padded polygon border-box'></div>
    <div class='vertical-lr'>
        <div class='shape inset'></div>
        <div class='shape padded inset'></div>
        <div class='shape padded inset border-box'></div>
    </div>
    <div class='vertical-rl'>
        <div class='shape inset'></div>
        <div class='shape padded inset'></div>
        <div class='shape padded inset border-box'></div>
    </div>
    <div class='shape padded content-box'></div>
    <div class='shape padded raster-svg'></div>
    <div class='shape padded raster-svg-complex'></div>
    <div class='shape padded raster-png'></div>
</body>
</html>
