Files
gerrit/polygerrit-ui/app/elements/shared/gr-fixed-panel/gr-fixed-panel_test.html
Becky Siegel 6c16e97d52 Update gr-fixed-panel
Previously, when keepOnScroll was set to true, and the header was not
yet to the top, there was a miscalculation in the 'top' number, casuing
the header to scroll up higher than its gr-fixed-panel parent.

This occurred because calculations for '_topLast' became inaccurate, and
compounded on one another.

This change fixes the problem by utilizing the position of the
gr-fixed-panel element itself to get a top offset, since it is reatively
positioned, this can be computed.

gr-fixed-panel tests were not being run, and they were already failing.
The tests have been updated to relfect how they should behave.

Change-Id: If0156cc7b009498ee63dddf0cef1b7e8d786b17c
2018-04-09 10:28:35 -07:00

116 lines
3.5 KiB
HTML

<!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>gr-fixed-panel</title>
<script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
<script src="../../../bower_components/web-component-tester/browser.js"></script>
<link rel="import" href="../../../test/common-test-setup.html"/>
<link rel="import" href="gr-fixed-panel.html">
<script>void(0);</script>
<test-fixture id="basic">
<template>
<gr-fixed-panel>
<div style="height: 100px"></div>
</gr-fixed-panel>
</template>
</test-fixture>
<script>
suite('gr-fixed-panel', () => {
let element;
let sandbox;
setup(() => {
sandbox = sinon.sandbox.create();
element = fixture('basic');
element.readyForMeasure = true;
});
teardown(() => {
sandbox.restore();
});
test('can be disabled with floatingDisabled', () => {
element.floatingDisabled = true;
sandbox.stub(element, '_reposition');
window.dispatchEvent(new CustomEvent('resize'));
element.flushDebouncer('update');
assert.isFalse(element._reposition.called);
});
test('header is the height of the content', () => {
assert.equal(element.getBoundingClientRect().height, 100);
});
test('scroll triggers _reposition', () => {
sandbox.stub(element, '_reposition');
window.dispatchEvent(new CustomEvent('scroll'));
element.flushDebouncer('update');
assert.isTrue(element._reposition.called);
});
suite('_reposition', () => {
const getHeaderTop = function() {
return element.$.header.style.top;
};
const emulateScrollY = function(distance) {
element._getElementTop.returns(element._headerTopInitial - distance);
element._updateDebounced();
element.flushDebouncer('scroll');
};
setup(() => {
element._headerTopInitial = 10;
sandbox.stub(element, '_getElementTop')
.returns(element._headerTopInitial);
});
test('scrolls header along with document', () => {
emulateScrollY(20);
// No top property is set when !_headerFloating.
assert.equal(getHeaderTop(), '');
});
test('does not stick to the top by default', () => {
emulateScrollY(150);
// No top property is set when !_headerFloating.
assert.equal(getHeaderTop(), '');
});
test('sticks to the top if enabled', () => {
element.keepOnScroll = true;
emulateScrollY(120);
assert.equal(getHeaderTop(), '0px');
});
test('drops a shadow when fixed to the top', () => {
element.keepOnScroll = true;
emulateScrollY(5);
assert.isFalse(element.$.header.classList.contains('fixedAtTop'));
emulateScrollY(120);
assert.isTrue(element.$.header.classList.contains('fixedAtTop'));
});
});
});
</script>