| // Copyright 2012 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. |
| |
| /** |
| * @fileoverview Provides the built-in dictionary matcher methods like |
| * hasEntry, hasEntries, hasKey, hasValue, etc. |
| */ |
| |
| |
| |
| goog.provide('goog.labs.testing.HasEntriesMatcher'); |
| goog.provide('goog.labs.testing.HasEntryMatcher'); |
| goog.provide('goog.labs.testing.HasKeyMatcher'); |
| goog.provide('goog.labs.testing.HasValueMatcher'); |
| |
| |
| goog.require('goog.asserts'); |
| goog.require('goog.labs.testing.Matcher'); |
| goog.require('goog.object'); |
| |
| |
| |
| /** |
| * The HasEntries matcher. |
| * |
| * @param {!Object} entries The entries to check in the object. |
| * |
| * @constructor |
| * @struct |
| * @implements {goog.labs.testing.Matcher} |
| * @final |
| */ |
| goog.labs.testing.HasEntriesMatcher = function(entries) { |
| /** |
| * @type {Object} |
| * @private |
| */ |
| this.entries_ = entries; |
| }; |
| |
| |
| /** |
| * Determines if an object has particular entries. |
| * |
| * @override |
| */ |
| goog.labs.testing.HasEntriesMatcher.prototype.matches = |
| function(actualObject) { |
| goog.asserts.assertObject(actualObject, 'Expected an Object'); |
| var object = /** @type {!Object} */(actualObject); |
| return goog.object.every(this.entries_, function(value, key) { |
| return goog.object.containsKey(object, key) && |
| object[key] === value; |
| }); |
| }; |
| |
| |
| /** |
| * @override |
| */ |
| goog.labs.testing.HasEntriesMatcher.prototype.describe = |
| function(actualObject) { |
| goog.asserts.assertObject(actualObject, 'Expected an Object'); |
| var object = /** @type {!Object} */(actualObject); |
| var errorString = 'Input object did not contain the following entries:\n'; |
| goog.object.forEach(this.entries_, function(value, key) { |
| if (!goog.object.containsKey(object, key) || |
| object[key] !== value) { |
| errorString += key + ': ' + value + '\n'; |
| } |
| }); |
| return errorString; |
| }; |
| |
| |
| |
| /** |
| * The HasEntry matcher. |
| * |
| * @param {string} key The key for the entry. |
| * @param {*} value The value for the key. |
| * |
| * @constructor |
| * @struct |
| * @implements {goog.labs.testing.Matcher} |
| * @final |
| */ |
| goog.labs.testing.HasEntryMatcher = function(key, value) { |
| /** |
| * @type {string} |
| * @private |
| */ |
| this.key_ = key; |
| /** |
| * @type {*} |
| * @private |
| */ |
| this.value_ = value; |
| }; |
| |
| |
| /** |
| * Determines if an object has a particular entry. |
| * |
| * @override |
| */ |
| goog.labs.testing.HasEntryMatcher.prototype.matches = |
| function(actualObject) { |
| goog.asserts.assertObject(actualObject); |
| return goog.object.containsKey(actualObject, this.key_) && |
| actualObject[this.key_] === this.value_; |
| }; |
| |
| |
| /** |
| * @override |
| */ |
| goog.labs.testing.HasEntryMatcher.prototype.describe = |
| function(actualObject) { |
| goog.asserts.assertObject(actualObject); |
| var errorMsg; |
| if (goog.object.containsKey(actualObject, this.key_)) { |
| errorMsg = 'Input object did not contain key: ' + this.key_; |
| } else { |
| errorMsg = 'Value for key did not match value: ' + this.value_; |
| } |
| return errorMsg; |
| }; |
| |
| |
| |
| /** |
| * The HasKey matcher. |
| * |
| * @param {string} key The key to check in the object. |
| * |
| * @constructor |
| * @struct |
| * @implements {goog.labs.testing.Matcher} |
| * @final |
| */ |
| goog.labs.testing.HasKeyMatcher = function(key) { |
| /** |
| * @type {string} |
| * @private |
| */ |
| this.key_ = key; |
| }; |
| |
| |
| /** |
| * Determines if an object has a key. |
| * |
| * @override |
| */ |
| goog.labs.testing.HasKeyMatcher.prototype.matches = |
| function(actualObject) { |
| goog.asserts.assertObject(actualObject); |
| return goog.object.containsKey(actualObject, this.key_); |
| }; |
| |
| |
| /** |
| * @override |
| */ |
| goog.labs.testing.HasKeyMatcher.prototype.describe = |
| function(actualObject) { |
| goog.asserts.assertObject(actualObject); |
| return 'Input object did not contain the key: ' + this.key_; |
| }; |
| |
| |
| |
| /** |
| * The HasValue matcher. |
| * |
| * @param {*} value The value to check in the object. |
| * |
| * @constructor |
| * @struct |
| * @implements {goog.labs.testing.Matcher} |
| * @final |
| */ |
| goog.labs.testing.HasValueMatcher = function(value) { |
| /** |
| * @type {*} |
| * @private |
| */ |
| this.value_ = value; |
| }; |
| |
| |
| /** |
| * Determines if an object contains a value |
| * |
| * @override |
| */ |
| goog.labs.testing.HasValueMatcher.prototype.matches = |
| function(actualObject) { |
| goog.asserts.assertObject(actualObject, 'Expected an Object'); |
| var object = /** @type {!Object} */(actualObject); |
| return goog.object.containsValue(object, this.value_); |
| }; |
| |
| |
| /** |
| * @override |
| */ |
| goog.labs.testing.HasValueMatcher.prototype.describe = |
| function(actualObject) { |
| return 'Input object did not contain the value: ' + this.value_; |
| }; |
| |
| |
| /** |
| * Gives a matcher that asserts an object contains all the given key-value pairs |
| * in the input object. |
| * |
| * @param {!Object} entries The entries to check for presence in the object. |
| * |
| * @return {!goog.labs.testing.HasEntriesMatcher} A HasEntriesMatcher. |
| */ |
| function hasEntries(entries) { |
| return new goog.labs.testing.HasEntriesMatcher(entries); |
| } |
| |
| |
| /** |
| * Gives a matcher that asserts an object contains the given key-value pair. |
| * |
| * @param {string} key The key to check for presence in the object. |
| * @param {*} value The value to check for presence in the object. |
| * |
| * @return {!goog.labs.testing.HasEntryMatcher} A HasEntryMatcher. |
| */ |
| function hasEntry(key, value) { |
| return new goog.labs.testing.HasEntryMatcher(key, value); |
| } |
| |
| |
| /** |
| * Gives a matcher that asserts an object contains the given key. |
| * |
| * @param {string} key The key to check for presence in the object. |
| * |
| * @return {!goog.labs.testing.HasKeyMatcher} A HasKeyMatcher. |
| */ |
| function hasKey(key) { |
| return new goog.labs.testing.HasKeyMatcher(key); |
| } |
| |
| |
| /** |
| * Gives a matcher that asserts an object contains the given value. |
| * |
| * @param {*} value The value to check for presence in the object. |
| * |
| * @return {!goog.labs.testing.HasValueMatcher} A HasValueMatcher. |
| */ |
| function hasValue(value) { |
| return new goog.labs.testing.HasValueMatcher(value); |
| } |