aboutsummaryrefslogtreecommitdiff
path: root/contexts/data/lib/closure-library/closure/goog/ui/menuitemrenderer_test.html
blob: 0529e1a3fd56af1b04295f0adb9c7df248b767d2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
<!DOCTYPE html>
<html>
<!--
Copyright 2008 The Closure Library Authors. All Rights Reserved.

Use of this source code is governed by the Apache License, Version 2.0.
See the COPYING file for details.
-->
<!--
Author: attila@google.com (Attila Bodis)
-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>Closure Unit Tests - goog.ui.MenuItemRenderer</title>
  <script src="../base.js"></script>
  <script>
    goog.require('goog.dom');
    goog.require('goog.dom.classes');
    goog.require('goog.testing.jsunit');
    goog.require('goog.ui.MenuItem');
    goog.require('goog.ui.MenuItemRenderer');
    goog.require('goog.testing.ui.rendererasserts');
  </script>
</head>
<body>
  <div id="sandbox"></div>
  <script>
    var sandbox = goog.dom.getElement('sandbox');
    var item, renderer;

    function setUp() {
      item = new goog.ui.MenuItem('Hello');
      renderer = goog.ui.MenuItemRenderer.getInstance();
    }
    
    function tearDown() {
      item.dispose();
      goog.dom.removeChildren(sandbox);
    }

    function testMenuItemRenderer() {
      assertNotNull('Instance must not be null', renderer);
      assertEquals('Singleton getter must always return same instance',
          renderer, goog.ui.MenuItemRenderer.getInstance());
    }

    function testCreateDom() {
      var element = renderer.createDom(item);
      assertNotNull('Element must not be null', element);
      assertSameElements('Element must have the expected class names',
          ['goog-menuitem'], goog.dom.classes.get(element));
      assertEquals('Element must have exactly one child element', 1,
          element.childNodes.length);
      assertHTMLEquals('Child element must have the expected structure',
          '<div class="goog-menuitem-content">Hello</div>',
          element.innerHTML);
    }

    function testCreateDomWithHoverState() {
      item.setHighlighted(true);
      var element = renderer.createDom(item);
      assertSameElements('Element must have the expected class names',
          ['goog-menuitem', 'goog-menuitem-highlight'],
          goog.dom.classes.get(element));
    }

    function testCreateDomForCheckableItem() {
      item.setSupportedState(goog.ui.Component.State.CHECKED, true);
      var element = renderer.createDom(item);
      assertSameElements('Element must have the expected class names',
          ['goog-menuitem', 'goog-option'],
          goog.dom.classes.get(element));
      assertHTMLEquals('Child element must have the expected structure',
          '<div class="goog-menuitem-content">' +
              '<div class="goog-menuitem-checkbox"></div>Hello</div>',
          element.innerHTML);

      item.setChecked(true);
      element = renderer.createDom(item);
      assertSameElements('Checked item must have the expected class names',
          ['goog-menuitem', 'goog-option', 'goog-option-selected'],
          goog.dom.classes.get(element));
    }

    function testCreateDomForSelectableItem() {
      item.setSupportedState(goog.ui.Component.State.SELECTED, true);
      var element = renderer.createDom(item);
      assertSameElements('Element must have the expected class names',
          ['goog-menuitem', 'goog-option'],
          goog.dom.classes.get(element));
      assertHTMLEquals('Child element must have the expected structure',
          '<div class="goog-menuitem-content">' +
              '<div class="goog-menuitem-checkbox"></div>Hello</div>',
          element.innerHTML);

      item.setSelected(true);
      element = renderer.createDom(item);
      assertSameElements('Selected item must have the expected class names',
          ['goog-menuitem', 'goog-option', 'goog-option-selected'],
          goog.dom.classes.get(element));
    }

    function testGetContentElement() {
      assertNull('Content element must be the null initially',
          item.getContentElement());
      item.createDom();
      assertEquals('Content element must be the element\'s first child',
          item.getElement().firstChild, item.getContentElement());
    }

    function testDecorate() {
      sandbox.innerHTML = '<div id="foo">Hello</div>';
      var foo = goog.dom.getElement('foo');

      var element = renderer.decorate(item, foo);
      assertSameElements('Element must have the expected class names',
          ['goog-menuitem'], goog.dom.classes.get(element));
      assertEquals('Element must have exactly one child element', 1,
          element.childNodes.length);
      assertHTMLEquals('Child element must have the expected structure',
          '<div class="goog-menuitem-content">Hello</div>',
          element.innerHTML);
    }

    function testDecorateWithContentStructure() {
      sandbox.innerHTML =
          '<div id="foo"><div class="goog-menuitem-content">Hello</div></div>';
      var foo = goog.dom.getElement('foo');

      var element = renderer.decorate(item, foo);
      assertSameElements('Element must have the expected class names',
          ['goog-menuitem'], goog.dom.classes.get(element));
      assertEquals('Element must have exactly one child element', 1,
          element.childNodes.length);
      assertHTMLEquals('Child element must have the expected structure',
          '<div class="goog-menuitem-content">Hello</div>',
          element.innerHTML);
    }

    function testDecorateWithHoverState() {
      sandbox.innerHTML =
          '<div id="foo" class="goog-menuitem-highlight">Hello</div>';
      var foo = goog.dom.getElement('foo');

      assertFalse('Item must not be highlighted', item.isHighlighted());
      var element = renderer.decorate(item, foo);
      assertSameElements('Element must have the expected class names',
          ['goog-menuitem', 'goog-menuitem-highlight'],
          goog.dom.classes.get(element));
      assertTrue('Item must be highlighted', item.isHighlighted());
    }

    function testDecorateCheckableItem() {
      sandbox.innerHTML = '<div id="foo" class="goog-option">Hello</div>';
      var foo = goog.dom.getElement('foo');

      assertFalse('Item must not be checkable',
          item.isSupportedState(goog.ui.Component.State.CHECKED));
      var element = renderer.decorate(item, foo);
      assertSameElements('Element must have the expected class names',
          ['goog-menuitem', 'goog-option'], goog.dom.classes.get(element));
      assertTrue('Item must be checkable',
          item.isSupportedState(goog.ui.Component.State.CHECKED));
      assertHTMLEquals('Child element must have the expected structure',
          '<div class="goog-menuitem-content">' +
              '<div class="goog-menuitem-checkbox"></div>Hello</div>',
          element.innerHTML);
    }

    function testSetContent() {
      item.setSupportedState(goog.ui.Component.State.CHECKED, true);
      var element = renderer.createDom(item);
      assertHTMLEquals('Child element must have the expected structure',
          '<div class="goog-menuitem-content">' +
              '<div class="goog-menuitem-checkbox"></div>Hello</div>',
          element.innerHTML);

      renderer.setContent(element, 'Goodbye');
      assertHTMLEquals('Child element must have the expected structure',
          '<div class="goog-menuitem-content">' +
              '<div class="goog-menuitem-checkbox"></div>Goodbye</div>',
          element.innerHTML);
    }

    function testDoesntCallGetCssClassInConstructor() {
      goog.testing.ui.rendererasserts.
          assertNoGetCssClassCallsInConstructor(goog.ui.MenuItemRenderer);
    }
  </script>
</body>
</html>