<!doctype html>
<html>
 <head>
  <title>The table cell width calculation quirk</title>
  <script src="/resources/testharness.js"></script>
  <script src="/resources/testharnessreport.js"></script>
  <style> iframe { width:200px; height:20px; } </style>
 </head>
 <body>
  <div id=log></div>
  <iframe id=quirks></iframe>
  <iframe id=almost></iframe>
  <iframe id=standards></iframe>
  <script>
    setup({explicit_done:true});
    onload = function() {
        var html = "<style id=style></style><table><tr><td id=test></table><table><tr><td id=ref></table><table><tr><td id=s_ref></table>";
        var png = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg==";
        var preload = new Image();
        preload.src = png;
        var a_doctype = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">';
        var s_doctype = '<!DOCTYPE HTML>';
        var q = document.getElementById('quirks').contentWindow;
        var a = document.getElementById('almost').contentWindow;
        var s = document.getElementById('standards').contentWindow;
        q.document.open();
        q.document.write(html);
        q.document.close();
        a.document.open();
        a.document.write(a_doctype + html);
        a.document.close();
        s.document.open();
        s.document.write(s_doctype + html);
        s.document.close();
        [q, a, s].forEach(function(win) {
            ['style', 'test', 'ref', 's_ref'].forEach(function(id) {
                win.__proto__.__defineGetter__(id, function() { return win.document.getElementById(id); });
            });
        });
        q.title = 'quirks mode';
        a.title = 'almost standards mode';
        s.title = 'standards mode';

        var tests = [
        {desc:"baseline",
        style:'table { width:8px }', // cell content width should be 2px (2px cell-spacing, 1px padding)
        test:'<img src="{png}">',
        ref:'<img src="{png}">',
        s_ref:'<img src="{png}">'},

        {desc:"basic",
        style:'table { width:8px }',
        test:'<img src="{png}"><img src="{png}"><img src="{png}">',
        ref:'<nobr><img src="{png}"><img src="{png}"><img src="{png}"></nobr>',
        s_ref:'<nobr><img src="{png}"><img src="{png}"><br><img src="{png}"></nobr>'},

        {desc:"inline-block",
        style:'table { width:8px } img { display:inline-block }',
        test:'<img src="{png}"><img src="{png}"><img src="{png}">',
        ref:'<nobr><img src="{png}"><img src="{png}"><img src="{png}"></nobr>',
        s_ref:'<nobr><img src="{png}"><img src="{png}"><br><img src="{png}"></nobr>'},

        {desc:"img in span",
        style:'table { width:8px }',
        test:'<span><img src="{png}"><img src="{png}"><img src="{png}"></span>',
        ref:'<nobr><img src="{png}"><img src="{png}"><img src="{png}"></nobr>',
        s_ref:'<nobr><img src="{png}"><img src="{png}"><br><img src="{png}"></nobr>'},

        {desc:"the don't-wrap rule is only for the purpose of calculating the width of the cell",
        style:'table { width:8px }',
        test:'<img src="{png}"><wbr><img src="{png}"><img src="{png}"><img src="{png}">',
        ref:'<nobr><img src="{png}"><img src="{png}"><img src="{png}"><br><img src="{png}"></nobr>',
        s_ref:'<nobr><img src="{png}"><img src="{png}"><br><img src="{png}"><img src="{png}"></nobr>'},

        {desc:"the quirk only applies when the cell is the containing block",
        style:'table { width:8px }',
        test:'<div><img src="{png}"><img src="{png}"><img src="{png}"></div>',
        ref:'<nobr><img src="{png}"><img src="{png}"><br><img src="{png}"><img src="{png}"></nobr>',
        s_ref:'<nobr><img src="{png}"><img src="{png}"><br><img src="{png}"><img src="{png}"></nobr>'},

        {desc:"the quirk shouldn't apply for generated content",
        style:'table { width:8px } #test::before { content:url("{png}") url("{png}") url("{png}") }',
        test:'',
        ref:'<nobr><img src="{png}"><img src="{png}"><br><img src="{png}"></nobr>',
        s_ref:'<nobr><img src="{png}"><img src="{png}"><br><img src="{png}"></nobr>'},

        {desc:"the quirk shouldn't apply for <input>",
        style:'table { width:8px }',
        test:'<input type=image src="{png}"><input type=image src="{png}"><input type=image src="{png}">',
        ref:'<nobr><img src="{png}"><img src="{png}"><br><img src="{png}"></nobr>',
        s_ref:'<nobr><img src="{png}"><img src="{png}"><br><img src="{png}"></nobr>'},

        {desc:"the quirk shouldn't apply for <object>",
        style:'table { width:8px }',
        test:'<object data="{png}"></object><object data="{png}"></object><object data="{png}"></object>',
        ref:'<nobr><img src="{png}"><img src="{png}"><br><img src="{png}"></nobr>',
        s_ref:'<nobr><img src="{png}"><img src="{png}"><br><img src="{png}"></nobr>'},

        {desc:"the quirk shouldn't apply for <embed>",
        style:'table { width:8px }',
        test:'<embed src="{png}"><embed src="{png}"><embed src="{png}">',
        ref:'<nobr><img src="{png}"><img src="{png}"><br><img src="{png}"></nobr>',
        s_ref:'<nobr><img src="{png}"><img src="{png}"><br><img src="{png}"></nobr>'},

        {desc:"the quirk shouldn't apply for <video poster>",
        style:'table { width:8px }',
        test:'<video poster="{png}"></video><video poster="{png}"></video><video poster="{png}"></video>',
        ref:'<nobr><img src="{png}"><img src="{png}"><br><img src="{png}"></nobr>',
        s_ref:'<nobr><img src="{png}"><img src="{png}"><br><img src="{png}"></nobr>'},

        {desc:"non-auto width on cell",
        style:'td { width:2px }',
        test:'<img src="{png}"><img src="{png}"><img src="{png}">',
        ref:'<nobr><img src="{png}"><img src="{png}"><br><img src="{png}"></nobr>',
        s_ref:'<nobr><img src="{png}"><img src="{png}"><br><img src="{png}"></nobr>'},

        {desc:"zero width on cell, specified with on table",
        style:'table { width:8px } td { width:0 }',
        test:'<img src="{png}"><img src="{png}"><img src="{png}">',
        ref:'<nobr><img src="{png}"><img src="{png}"><br><img src="{png}"></nobr>',
        s_ref:'<nobr><img src="{png}"><img src="{png}"><br><img src="{png}"></nobr>'},

        // tests below use overwrite body.innerHTML so tests using test/ref/s_ref props need to be above
        {desc:"display:table-cell on span",
        style:'div { display:table; width:2px } span { display:table-cell }',
        body:'<div><span id=test><img src="{png}"><img src="{png}"><img src="{png}"></span></div>'+
        '<div><span id=ref><nobr><img src="{png}"><img src="{png}"><img src="{png}"></nobr></span></div>'+
        '<div><span id=s_ref><nobr><img src="{png}"><img src="{png}"><br><img src="{png}"></nobr></span></div>'},

        {desc:"display:table-cell on span, wbr",
        style:'div { display:table; width:2px } span { display:table-cell }',
        body:'<div><span id=test><img src="{png}"><wbr><img src="{png}"><img src="{png}"><img src="{png}"></span></div>'+
        '<div><span id=ref><nobr><img src="{png}"><img src="{png}"><img src="{png}"><br><img src="{png}"></nobr></span></div>'+
        '<div><span id=s_ref><nobr><img src="{png}"><img src="{png}"><br><img src="{png}"><img src="{png}"></nobr></span></div>'},
        ];

        tests.forEach(function(t) {
            test(function() {
                var style = t.style.replace(/\{png\}/g, png);
                var test = t.test && t.test.replace(/\{png\}/g, png);
                var ref = t.ref && t.ref.replace(/\{png\}/g, png);
                var s_ref = t.s_ref && t.s_ref.replace(/\{png\}/g, png);
                var body = t.body && t.body.replace(/\{png\}/g, png);
                [q, a, s].forEach(function(win) {
                    win.style.textContent = style;
                    if (body !== undefined) {
                        win.document.body.innerHTML = body;
                    } else {
                        win.test.innerHTML = test;
                        win.ref.innerHTML = ref;
                        win.s_ref.innerHTML = s_ref;
                    }
                    assert_equals(win.getComputedStyle(win.test).width,
                                  win.getComputedStyle(win == q ? win.ref : win.s_ref).width,
                                  'cell width, '+win.title);
                    var test_imgs = win.test.querySelectorAll('img');
                    var ref_imgs = win.ref.querySelectorAll('img');
                    var s_ref_imgs = win.s_ref.querySelectorAll('img');
                    for (var i = 0; i < test_imgs.length; ++i) {
                        assert_equals(test_imgs[i].offsetLeft,
                                      win == q ? ref_imgs[i].offsetLeft : s_ref_imgs[i].offsetLeft,
                                      'img '+i+' offsetLeft, '+win.title);
                    }
                });
            }, document.title+', '+t.desc);
        });

        done();
    }
  </script>
 </body>
</html>
