UNPKG

google-closure-library

Version:
60 lines (53 loc) 1.84 kB
/** * @license * Copyright The Closure Library Authors. * SPDX-License-Identifier: Apache-2.0 */ /** * @fileoverview This module simplifies testing code which uses stateful * singletons. `goog.testing.singleton.reset` resets all instances, so * next time when `getInstance` is called, a new instance is created. * It's recommended to reset the singletons in `tearDown` to prevent * interference between subsequent tests. * * The `goog.testing.singleton` functions expect that the goog.DEBUG flag * is enabled, and the tests are either uncompiled or compiled without renaming. */ goog.setTestOnly('goog.testing.singleton'); goog.provide('goog.testing.singleton'); goog.require('goog.singleton'); /** * Deletes all singleton instances, so `getInstance` will return a new * instance on next call. * @const */ goog.testing.singleton.resetAll = function() { 'use strict'; // Avoid concatenating arrays here - causes tests to perform poorly when there // are very large numbers of singletons to reset. const singletons1 = goog.getObjectByName('goog.instantiatedSingletons_'); const singletons2 = goog.singleton.instantiatedSingletons; let ctor; while (ctor = singletons1.pop()) { goog.testing.singleton.reset(ctor); } while (ctor = singletons2.pop()) { goog.testing.singleton.reset(ctor); } }; /** * Deletes a singleton's instance, so `getInstance` will return a new instance * on next call. * @param {function(new: Object)} singleton * @const * @suppress {missingProperties} 'instance_' isn't a property on any declared * type. */ goog.testing.singleton.reset = function(singleton) { 'use strict'; delete /** @type {?} */ (singleton).instance_; }; /** * @deprecated Please use `goog.singleton.getInstance()`. */ goog.testing.singleton.addSingletonGetter = goog.addSingletonGetter;