// Copyright (c) 2012, 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.

import 'dart:html';

import 'package:expect/minitest.dart';

main() {
  test('createTBody', () {
    var table = new TableElement();
    var head = table.createTHead();
    expect(table.tHead, head);

    var headerRow =  head.addRow();
    var headerCell = headerRow.addCell();
    headerCell.text = 'Header Cell';

    var caption = table.createCaption();
    expect(table.caption, caption);

    var body = table.createTBody();
    expect(table.tBodies.length, 1);
    expect(table.tBodies[0], body);

    var bodyRow =  body.addRow();
    expect(body.rows.length, 1);
    expect(body.rows[0], bodyRow);

    var bodyCell = bodyRow.addCell();
    bodyCell.text = 'Body Cell';
    expect(bodyRow.cells.length, 1);
    expect(bodyRow.cells[0], bodyCell);

    var foot = table.createTFoot();
    expect(table.tFoot, foot);

    var footerRow =  foot.addRow();
    expect(foot.rows.length, 1);
    expect(foot.rows[0], footerRow);

    var footerCell = footerRow.addCell();
    footerCell.text = 'Footer Cell';
    expect(footerRow.cells.length, 1);
    expect(footerRow.cells[0], footerCell);

    var body2 = table.createTBody();
    var bodyRow2 =  body2.addRow();
    var bodyCell2 = bodyRow2.addCell();
    bodyCell2.text = 'Body Cell2';

    expect(body2.rows.length, 1);

    expect(table.tBodies.length, 2);
    expect(table.tBodies[1], body2);
  });
}

