/*
 * Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
 * for details. All rights reserved. Use of this source code is governed by a
 * BSD-style license that can be found in the LICENSE file.
 */
/**
 * @assertion
 * @description
 */
import "dart:html";
import "../../testharness.dart";

const String htmlEL1 = r'''
<meta name="viewport" content="width=800">
<style>
body, html {
    overflow: hidden;
}
html {
    font-size: small;
}
.inline {
    display: inline;
    font-weight: normal;
    font-style: normal;
    background-color: green;
}
i.inline {
    background-color: blue;
}
b {
    font-weight: normal;
    font-style: normal;
    background-color: purple;
}
</style>
''';

const String htmlEL2 = r'''
This test passes if all lines have the same width.<br/>
<table>
    <tr>
        <td>a</td>
        <td>
            <div class="inline">
                AutosizeAutosizeAutosizeAutosize<br/>
                AutosizeAutosizeAutosizeAutosize<br/>
                AutosizeAutosizeAutosizeAutosize<br/>
                AutosizeAutosizeAutosizeAutosize<br/>
            </div>
            <i class="inline">AutosizeAutosizeAutosizeAutosize</i><br/>
            AutosizeAutosizeAutosizeAutosize<br/>
            AutosizeAutosizeAutosizeAutosize<br/>
            AutosizeAutosizeAutosizeAutosize<br/>
            <b><b><b><i class="inline"><b><b><b>AutosizeAutosizeAutosizeAutosize</b></b></b></i></b></b></b><br/>
            AutosizeAutosizeAutosizeAutosize<br/>
            AutosizeAutosizeAutosizeAutosize<br/>
            AutosizeAutosizeAutosizeAutosize<br/>
            AutosizeAutosizeAutosizeAutosize<br/>
            AutosizeAutosizeAutosizeAutosize<br/>
            AutosizeAutosizeAutosizeAutosize<br/>
            AutosizeAutosizeAutosizeAutosize<br/>
            AutosizeAutosizeAutosizeAutosize<br/>
            AutosizeAutosizeAutosizeAutosize
        </td>
    </tr>
</table>
''';

void main() {
    document.head.appendHtml(htmlEL1, treeSanitizer: new NullTreeSanitizer());
    document.body.appendHtml(htmlEL2, treeSanitizer: new NullTreeSanitizer());

    var inlines = document.getElementsByClassName('inline');
    var referenceWidth = inlines[0].offsetWidth;
    for (var i = 1; i < inlines.length; i++) {
        shouldBe(inlines[i].offsetWidth, referenceWidth, "$i");
    }
    checkTestFailures();
}
