<!DOCTYPE html>
<!--
@license
Copyright (C) 2017 The Android Open Source Project

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
<title>embed_test</title>

<script src="/bower_components/webcomponentsjs/custom-elements-es5-adapter.js"></script>

<script src="/bower_components/webcomponentsjs/webcomponents-lite.js"></script>
<script src="/bower_components/web-component-tester/browser.js"></script>
<link rel="import" href="embed.html"/>

<script>void(0);</script>

<test-fixture id="change-view">
  <template>
    <gr-change-view></gr-change-view>
  </template>
</test-fixture>

<test-fixture id="diff-view">
  <template>
    <gr-diff-view></gr-diff-view>
  </template>
</test-fixture>

<test-fixture id="dashboard-view">
  <template>
    <gr-dashboard-view></gr-dashboard-view>
  </template>
</test-fixture>

<test-fixture id="change-list-view">
  <template>
    <gr-change-list-view></gr-change-list-view>
  </template>
</test-fixture>

<test-fixture id="change-list">
  <template>
    <gr-change-list></gr-change-list>
  </template>
</test-fixture>

<test-fixture id="search-bar">
  <template>
    <gr-search-bar></gr-search-bar>
  </template>
</test-fixture>

<script>
  suite('embed test', () => {
    test('gr-change-view is embedded', () => {
      const element = fixture('change-view');
      assert.equal(element.tagName.toLowerCase(), 'gr-change-view');
    });

    test('diff-view is embedded', () => {
      const element = fixture('diff-view');
      assert.equal(element.tagName.toLowerCase(), 'gr-diff-view');
    });

    test('dashboard-view is embedded', () => {
      const element = fixture('dashboard-view');
      assert.equal(element.tagName.toLowerCase(), 'gr-dashboard-view');
    });

    test('change-list-view is embedded', () => {
      const element = fixture('change-list-view');
      assert.equal(element.tagName.toLowerCase(), 'gr-change-list-view');
    });

    test('change-list is embedded', () => {
      const element = fixture('change-list');
      assert.equal(element.tagName.toLowerCase(), 'gr-change-list');
    });

    test('search-bar is embedded', () => {
      const element = fixture('search-bar');
      assert.equal(element.tagName.toLowerCase(), 'gr-search-bar');
    });
  });
</script>
