96 lines
2.8 KiB
HTML
96 lines
2.8 KiB
HTML
![]() |
<!DOCTYPE html>
|
||
|
<!--
|
||
|
Copyright (C) 2016 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-syntax-lib-loader</title>
|
||
|
|
||
|
<script src="../../../bower_components/webcomponentsjs/webcomponents.min.js"></script>
|
||
|
<script src="../../../bower_components/web-component-tester/browser.js"></script>
|
||
|
|
||
|
<link rel="import" href="gr-syntax-lib-loader.html">
|
||
|
|
||
|
<test-fixture id="basic">
|
||
|
<template>
|
||
|
<gr-syntax-lib-loader></gr-syntax-lib-loader>
|
||
|
</template>
|
||
|
</test-fixture>
|
||
|
|
||
|
<script>
|
||
|
suite('gr-syntax-lib-loader tests', function() {
|
||
|
var element;
|
||
|
var resolveLoad;
|
||
|
var loadStub;
|
||
|
|
||
|
setup(function() {
|
||
|
element = fixture('basic');
|
||
|
|
||
|
loadStub = sinon.stub(element, '_loadHLJS', function() {
|
||
|
return new Promise(function(resolve) {
|
||
|
resolveLoad = resolve;
|
||
|
});
|
||
|
});
|
||
|
|
||
|
// Assert preconditions:
|
||
|
assert.isFalse(element._state.loaded);
|
||
|
assert.isFalse(element._state.loading);
|
||
|
});
|
||
|
|
||
|
teardown(function() {
|
||
|
if (window.hljs) {
|
||
|
delete window.hljs;
|
||
|
}
|
||
|
loadStub.restore();
|
||
|
|
||
|
// Because the element state is a singleton, clean it up.
|
||
|
element._state.loading = false;
|
||
|
element._state.loaded = false;
|
||
|
element._state.callbacks = [];
|
||
|
});
|
||
|
|
||
|
test('only load once', function(done) {
|
||
|
var firstCallHandler = sinon.stub();
|
||
|
element.get().then(firstCallHandler);
|
||
|
|
||
|
// It should now be in the loading state.
|
||
|
assert.isTrue(loadStub.called);
|
||
|
assert.isTrue(element._state.loading);
|
||
|
assert.isFalse(element._state.loaded);
|
||
|
assert.isFalse(firstCallHandler.called);
|
||
|
|
||
|
var secondCallHandler = sinon.stub();
|
||
|
element.get().then(secondCallHandler);
|
||
|
|
||
|
// No change in state.
|
||
|
assert.isTrue(element._state.loading);
|
||
|
assert.isFalse(element._state.loaded);
|
||
|
assert.isFalse(firstCallHandler.called);
|
||
|
assert.isFalse(secondCallHandler.called);
|
||
|
|
||
|
// Now load the library.
|
||
|
resolveLoad();
|
||
|
flush(function() {
|
||
|
// The state should be loaded and both handlers called.
|
||
|
assert.isFalse(element._state.loading);
|
||
|
assert.isTrue(element._state.loaded);
|
||
|
assert.isTrue(firstCallHandler.called);
|
||
|
assert.isTrue(secondCallHandler.called);
|
||
|
done();
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
</script>
|