1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5(function() {
6
7'use strict';
8
9var onShow = null;
10var onHide = null;
11var menuButton = null;
12
13module('MenuButton', {
14  setup: function() {
15    var fixture = document.getElementById('qunit-fixture');
16    fixture.innerHTML =
17        '<span class="menu-button" id="menu-button-container">' +
18          '<button class="menu-button-activator">Click me</button>' +
19          '<ul>' +
20            '<li id="menu-option-1">Option 1</li>' +
21          '</ul>' +
22        '</span>';
23    onShow = sinon.spy();
24    onHide = sinon.spy();
25    menuButton = new remoting.MenuButton(
26        document.getElementById('menu-button-container'),
27        onShow, onHide);
28  },
29  teardown: function() {
30    onShow = null;
31    onHide = null;
32    menuButton = null;
33  }
34});
35
36test('should display on click', function() {
37  var menu = menuButton.menu();
38  ok(menu.offsetWidth == 0 && menu.offsetHeight == 0);
39  menuButton.button().click();
40  ok(menu.offsetWidth != 0 && menu.offsetHeight != 0);
41});
42
43test('should dismiss when the menu is clicked', function() {
44  var menu = menuButton.menu();
45  menuButton.button().click();
46  menu.click();
47  ok(menu.offsetWidth == 0 && menu.offsetHeight == 0);
48});
49
50test('should dismiss when anything outside the menu is clicked', function() {
51  var menu = menuButton.menu();
52  menuButton.button().click();
53  var x = menu.offsetRight + 1;
54  var y = menu.offsetBottom + 1;
55  var notMenu = document.elementFromPoint(x, y);
56  base.debug.assert(notMenu != menu);
57  notMenu.click();
58  ok(menu.offsetWidth == 0 && menu.offsetHeight == 0);
59});
60
61test('should dismiss when menu item is clicked', function() {
62  var menu = menuButton.menu();
63  menuButton.button().click();
64  var element = document.getElementById('menu-option-1');
65  element.click();
66  ok(menu.offsetWidth == 0 && menu.offsetHeight == 0);
67});
68
69test('should invoke callbacks', function() {
70  ok(!onShow.called);
71  menuButton.button().click();
72  ok(onShow.called);
73  ok(!onHide.called);
74  menuButton.menu().click();
75  ok(onHide.called);
76});
77
78test('select method should set/unset background image', function() {
79  var element = document.getElementById('menu-option-1');
80  var style = window.getComputedStyle(element);
81  ok(style.backgroundImage == 'none');
82  remoting.MenuButton.select(element, true);
83  style = window.getComputedStyle(element);
84  ok(style.backgroundImage != 'none');
85  remoting.MenuButton.select(element, false);
86  style = window.getComputedStyle(element);
87  ok(style.backgroundImage == 'none');
88});
89
90}());