// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
base.require('ui.drag_handle');
base.unittest.testSuite('ui.drag_handle', function() {
var createDragHandle = function() {
var el = document.createElement('div');
el.style.border = '1px solid black';
el.style.width = '200px';
el.style.height = '200px';
el.style.display = '-webkit-flex';
el.style.webkitFlexDirection = 'column';
var upperEl = document.createElement('div');
upperEl.style.webkitFlex = '1 1 auto';
var lowerEl = document.createElement('div');
lowerEl.style.height = '100px';
var dragHandle = new ui.DragHandle();
dragHandle.target = lowerEl;
el.appendChild(upperEl);
el.appendChild(dragHandle);
el.appendChild(lowerEl);
el.upperEl = upperEl;
el.dragHandle = dragHandle;
el.lowerEl = lowerEl;
el.getLowerElHeight = function() {
return parseInt(getComputedStyle(this.lowerEl).height);
};
return el;
};
test('instantiate', function() {
this.addHTMLOutput(createDragHandle());
});
test('applyDelta', function() {
var el = createDragHandle();
document.body.appendChild(el);
var dragHandle = el.dragHandle;
var oldHeight = el.getLowerElHeight();
dragHandle.applyDelta_(10);
assertEquals(oldHeight + 10, el.getLowerElHeight());
document.body.removeChild(el);
});
test('classNameMutation', function() {
var el = createDragHandle();
var styleEl = document.createElement('style');
styleEl.textContent =
'.mode-a { height: 100px; } .mode-b { height: 50px; }';
document.head.appendChild(styleEl);
document.body.appendChild(el);
var dragHandle = el.dragHandle;
el.lowerEl.className = 'mode-a';
assertEquals(100, el.getLowerElHeight());
dragHandle.applyDelta_(10);
assertEquals(110, el.getLowerElHeight());
// Change the class, which should restore the layout
// to the default sizing for mode-b
el.lowerEl.className = 'mode-b';
dragHandle.forceMutationObserverFlush_();
assertEquals(50, el.getLowerElHeight());
dragHandle.applyDelta_(10);
assertEquals(60, el.getLowerElHeight());
// Restore the class-a, which should restore the layout
// to sizing when we were changed.
el.lowerEl.className = 'mode-a';
dragHandle.forceMutationObserverFlush_();
assertEquals(110, el.getLowerElHeight());
document.head.removeChild(styleEl);
document.body.removeChild(el);
});
});