// Copyright (c) 2013, 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:polymer/polymer.dart';
import 'package:unittest/unittest.dart';
import 'package:unittest/html_config.dart';

/**
 * This test runs the news example and checks the state of the initial page.
 */
main() {
  useHtmlConfiguration();

  extractLinks(nodes) => nodes.where((n) => n is Element)
      .map((n) => n.query('a').href.split('/').last).toList();

  test('initial state', () {
    final listComp = query('ul');
    final items = listComp.queryAll('li');
    expect(items.length, 6);
    expect(extractLinks(items), ['1', '2', '3', '4', '4', '5']);
    expect(listComp.xtag is Polymer, true,
        reason: 'x-news should be created');

    final contents = listComp.shadowRoot.queryAll('content');
    expect(contents.length, 2, reason: 'news has 2 content tags');
    expect(extractLinks(contents[0].getDistributedNodes()),
        ['3', '5'], reason: 'breaking stories first');
    expect(extractLinks(contents[1].getDistributedNodes()),
        ['1', '2', '4', '4'], reason: 'other stories after breaking stories');
  });
}
