linuxwindowsinboxwhatsappicloudtweetdeckhipchattelegramhangoutsslackgmailskypefacebook-workplaceoutlookemailmicrosoft-teamsdiscordmessengercustom-servicesmacos
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
183 lines
5.2 KiB
183 lines
5.2 KiB
// @define Ext.lang.Assert |
|
// @define Ext.Assert |
|
// @require Ext.lang.Error |
|
//<debug> |
|
/** |
|
* This class provides help value testing methods useful for diagnostics. These are often |
|
* used in `debugHooks`: |
|
* |
|
* Ext.define('Foo.bar.Class', { |
|
* |
|
* debugHooks: { |
|
* method: function (a) { |
|
* Ext.Assert.truthy(a, 'Expected "a" to be truthy"); |
|
* }, |
|
* |
|
* foo: function (object) { |
|
* Ext.Assert.isFunctionProp(object, 'doSomething'); |
|
* } |
|
* } |
|
* }); |
|
* |
|
* **NOTE:** This class is entirely removed in production builds so all uses of it should |
|
* be either in `debug` conditional comments or `debugHooks`. |
|
* |
|
* The following type detection methods from the `Ext` object are wrapped as assertions |
|
* by this class: |
|
* |
|
* * `isEmpty` |
|
* * `isArray` |
|
* * `isDate` |
|
* * `isObject` |
|
* * `isSimpleObject` |
|
* * `isPrimitive` |
|
* * `isFunction` |
|
* * `isNumber` |
|
* * `isNumeric` |
|
* * `isString` |
|
* * `isBoolean` |
|
* * `isElement` |
|
* * `isTextNode` |
|
* * `isDefined` |
|
* * `isIterable` |
|
* |
|
* These appear both their exact name and with a "Prop" suffix for checking a property on |
|
* an object. For example, these are almost identical: |
|
* |
|
* Ext.Assert.isFunction(object.foo); |
|
* |
|
* Ext.Assert.isFunctionProp(object, 'foo'); |
|
* |
|
* The difference is the default error message generated is better in the second use case |
|
* than the first. |
|
* |
|
* The above list are also expanded for "Not" flavors (and "Not...Prop"): |
|
* |
|
* * `isNotEmpty` |
|
* * `isNotArray` |
|
* * `isNotDate` |
|
* * `isNotObject` |
|
* * `isNotSimpleObject` |
|
* * `isNotPrimitive` |
|
* * `isNotFunction` |
|
* * `isNotNumber` |
|
* * `isNotNumeric` |
|
* * `isNotString` |
|
* * `isNotBoolean` |
|
* * `isNotElement` |
|
* * `isNotTextNode` |
|
* * `isNotDefined` |
|
* * `isNotIterable` |
|
*/ |
|
Ext.Assert = { |
|
|
|
/** |
|
* Checks that the first argument is falsey and throws an `Error` if it is not. |
|
*/ |
|
falsey: function (b, msg) { |
|
if (b) { |
|
Ext.Error.raise(msg || ('Expected a falsey value but was ' + b)); |
|
} |
|
}, |
|
|
|
/** |
|
* Checks that the first argument is falsey and throws an `Error` if it is not. |
|
*/ |
|
falseyProp: function (object, property) { |
|
Ext.Assert.truthy(object); |
|
var b = object[property]; |
|
if (b) { |
|
if (object.$className) { |
|
property = object.$className + '#' + property; |
|
} |
|
Ext.Error.raise('Expected a falsey value for ' + property + |
|
' but was ' + b); |
|
} |
|
}, |
|
|
|
/** |
|
* Checks that the first argument is truthy and throws an `Error` if it is not. |
|
*/ |
|
truthy: function (b, msg) { |
|
if (!b) { |
|
Ext.Error.raise(msg || ('Expected a truthy value but was ' + typeof b)); |
|
} |
|
}, |
|
|
|
/** |
|
* Checks that the first argument is truthy and throws an `Error` if it is not. |
|
*/ |
|
truthyProp: function (object, property) { |
|
Ext.Assert.truthy(object); |
|
var b = object[property]; |
|
if (!b) { |
|
if (object.$className) { |
|
property = object.$className + '#' + property; |
|
} |
|
Ext.Error.raise('Expected a truthy value for ' + property + |
|
' but was ' + typeof b); |
|
} |
|
} |
|
}; |
|
|
|
(function () { |
|
function makeAssert (name, kind) { |
|
var testFn = Ext[name], |
|
def; |
|
return function (value, msg) { |
|
if (!testFn(value)) { |
|
Ext.Error.raise(msg || def || |
|
(def = 'Expected value to be ' + kind)); |
|
} |
|
}; |
|
} |
|
|
|
function makeAssertProp (name, kind) { |
|
var testFn = Ext[name], |
|
def; |
|
return function (object, prop) { |
|
Ext.Assert.truthy(object); |
|
if (!testFn(object[prop])) { |
|
Ext.Error.raise(def || (def = 'Expected ' + |
|
(object.$className ? object.$className + '#' : '') + |
|
prop + ' to be ' + kind)); |
|
} |
|
}; |
|
} |
|
|
|
function makeNotAssert (name, kind) { |
|
var testFn = Ext[name], |
|
def; |
|
return function (value, msg) { |
|
if (testFn(value)) { |
|
Ext.Error.raise(msg || def || |
|
(def = 'Expected value to NOT be ' + kind)); |
|
} |
|
}; |
|
} |
|
|
|
function makeNotAssertProp (name, kind) { |
|
var testFn = Ext[name], |
|
def; |
|
return function (object, prop) { |
|
Ext.Assert.truthy(object); |
|
if (testFn(object[prop])) { |
|
Ext.Error.raise(def || (def = 'Expected ' + |
|
(object.$className ? object.$className + '#' : '') + |
|
prop + ' to NOT be ' + kind)); |
|
} |
|
}; |
|
} |
|
|
|
for (var name in Ext) { |
|
if (name.substring(0,2) == "is" && Ext.isFunction(Ext[name])) { |
|
var kind = name.substring(2); |
|
Ext.Assert[name] = makeAssert(name, kind); |
|
Ext.Assert[name + 'Prop'] = makeAssertProp(name, kind); |
|
Ext.Assert['isNot' + kind] = makeNotAssert(name, kind); |
|
Ext.Assert['isNot' + kind + 'Prop'] = makeNotAssertProp(name, kind); |
|
} |
|
} |
|
}()); |
|
|
|
//</debug>
|
|
|