| <!DOCTYPE html> |
| <!-- |
| Copyright 2016 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. |
| --> |
| |
| <link rel="import" href="/tracing/ui/analysis/rebuildable_behavior.html"> |
| |
| <script> |
| 'use strict'; |
| |
| tr.b.unittest.testSuite(function() { |
| Polymer({ |
| is: 'tr-ui-analysis-rebuildable-test-element', |
| behaviors: [tr.ui.analysis.RebuildableBehavior] |
| }); |
| |
| test('rebuild', function() { |
| var el = document.createElement('tr-ui-analysis-rebuildable-test-element'); |
| var didFireOnRebuild; |
| el.onRebuild_ = function() { |
| assert.strictEqual(this, el); |
| didFireOnRebuild = true; |
| }; |
| |
| function checkManualRebuild(expectedDidFireOnRebuild) { |
| didFireOnRebuild = false; |
| el.rebuild(); |
| assert.strictEqual(didFireOnRebuild, expectedDidFireOnRebuild); |
| } |
| |
| function checkRAFRebuild(expectedDidFireOnRebuild) { |
| didFireOnRebuild = false; |
| tr.b.forcePendingRAFTasksToRun(); |
| assert.strictEqual(didFireOnRebuild, expectedDidFireOnRebuild); |
| } |
| |
| // No rebuilds should occur when not scheduled. |
| checkManualRebuild(false); |
| checkRAFRebuild(false); |
| |
| // Single rebuild should occur when scheduled once. |
| el.scheduleRebuild_(); |
| checkManualRebuild(true); |
| checkManualRebuild(false); |
| |
| el.scheduleRebuild_(); |
| checkRAFRebuild(true); |
| checkRAFRebuild(false); |
| |
| // Only a single rebuild should occur even when scheduled multiple times. |
| el.scheduleRebuild_(); |
| el.scheduleRebuild_(); |
| checkManualRebuild(true); |
| checkRAFRebuild(false); |
| checkManualRebuild(false); |
| |
| el.scheduleRebuild_(); |
| el.scheduleRebuild_(); |
| checkRAFRebuild(true); |
| checkRAFRebuild(false); |
| checkManualRebuild(false); |
| }); |
| }); |
| </script> |