123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- // Copyright 2009 The Closure Library Authors. All Rights Reserved.
- //
- // 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.
- // All Rights Reserved
- /**
- * @fileoverview A driver for testing renderers.
- *
- * @author nicksantos@google.com (Nick Santos)
- */
- goog.setTestOnly('goog.testing.ui.RendererHarness');
- goog.provide('goog.testing.ui.RendererHarness');
- goog.require('goog.Disposable');
- goog.require('goog.dom.NodeType');
- goog.require('goog.testing.asserts');
- goog.require('goog.testing.dom');
- /**
- * A driver for testing renderers.
- *
- * @param {goog.ui.ControlRenderer} renderer A renderer to test.
- * @param {Element} renderParent The parent of the element where controls will
- * be rendered.
- * @param {Element} decorateParent The parent of the element where controls will
- * be decorated.
- * @constructor
- * @extends {goog.Disposable}
- * @final
- */
- goog.testing.ui.RendererHarness = function(
- renderer, renderParent, decorateParent) {
- goog.Disposable.call(this);
- /**
- * The renderer under test.
- * @type {goog.ui.ControlRenderer}
- * @private
- */
- this.renderer_ = renderer;
- /**
- * The parent of the element where controls will be rendered.
- * @type {Element}
- * @private
- */
- this.renderParent_ = renderParent;
- /**
- * The original HTML of the render element.
- * @type {string}
- * @private
- */
- this.renderHtml_ = renderParent.innerHTML;
- /**
- * The parent of the element where controls will be decorated.
- * @type {Element}
- * @private
- */
- this.decorateParent_ = decorateParent;
- /**
- * The original HTML of the decorated element.
- * @type {string}
- * @private
- */
- this.decorateHtml_ = decorateParent.innerHTML;
- };
- goog.inherits(goog.testing.ui.RendererHarness, goog.Disposable);
- /**
- * A control to create by decoration.
- * @type {goog.ui.Control}
- * @private
- */
- goog.testing.ui.RendererHarness.prototype.decorateControl_;
- /**
- * A control to create by rendering.
- * @type {goog.ui.Control}
- * @private
- */
- goog.testing.ui.RendererHarness.prototype.renderControl_;
- /**
- * Whether all the necessary assert methods have been called.
- * @type {boolean}
- * @private
- */
- goog.testing.ui.RendererHarness.prototype.verified_ = false;
- /**
- * Attach a control and render its DOM.
- * @param {goog.ui.Control} control A control.
- * @return {Element} The element created.
- */
- goog.testing.ui.RendererHarness.prototype.attachControlAndRender = function(
- control) {
- this.renderControl_ = control;
- control.setRenderer(this.renderer_);
- control.render(this.renderParent_);
- return control.getElement();
- };
- /**
- * Attach a control and decorate the element given in the constructor.
- * @param {goog.ui.Control} control A control.
- * @return {Element} The element created.
- */
- goog.testing.ui.RendererHarness.prototype.attachControlAndDecorate = function(
- control) {
- this.decorateControl_ = control;
- control.setRenderer(this.renderer_);
- var child = this.decorateParent_.firstChild;
- assertEquals(
- 'The decorated node must be an element', goog.dom.NodeType.ELEMENT,
- child.nodeType);
- control.decorate(/** @type {!Element} */ (child));
- return control.getElement();
- };
- /**
- * Assert that the rendered element and the decorated element match.
- */
- goog.testing.ui.RendererHarness.prototype.assertDomMatches = function() {
- assert(
- 'Both elements were not generated',
- !!(this.renderControl_ && this.decorateControl_));
- goog.testing.dom.assertHtmlMatches(
- this.renderControl_.getElement().innerHTML,
- this.decorateControl_.getElement().innerHTML);
- this.verified_ = true;
- };
- /**
- * Destroy the harness, verifying that all assertions had been checked.
- * @override
- * @protected
- */
- goog.testing.ui.RendererHarness.prototype.disposeInternal = function() {
- // If the harness was not verified appropriately, throw an exception.
- assert(
- 'Expected assertDomMatches to be called',
- this.verified_ || !this.renderControl_ || !this.decorateControl_);
- if (this.decorateControl_) {
- this.decorateControl_.dispose();
- }
- if (this.renderControl_) {
- this.renderControl_.dispose();
- }
- this.renderParent_.innerHTML = this.renderHtml_;
- this.decorateParent_.innerHTML = this.decorateHtml_;
- goog.testing.ui.RendererHarness.superClass_.disposeInternal.call(this);
- };
|