diff --git a/lib/operators/index.js b/lib/operators/index.js index c2ad910..cca52d3 100644 --- a/lib/operators/index.js +++ b/lib/operators/index.js @@ -5,6 +5,7 @@ module.exports = { IsUndefined: require('./is-undefined'), IsNull: require('./is-null'), IsPresent: require('./is-present'), + IsString: require('./is-string'), NumericEquals: require('./numeric-equals'), NumericGreaterThan: require('./numeric-greater-than'), NumericGreaterThanEquals: require('./numeric-greater-than-equals'), diff --git a/lib/operators/is-string.js b/lib/operators/is-string.js new file mode 100644 index 0000000..32a8e70 --- /dev/null +++ b/lib/operators/is-string.js @@ -0,0 +1,13 @@ +'use strict' + +module.exports = function isStringOperator (inputValue, comparisonValue, candidateStateName, cache) { + const isString = typeof inputValue === 'string' + + if (isString && comparisonValue === true) { + return candidateStateName + } + + if (!isString && comparisonValue !== true) { + return candidateStateName + } +} diff --git a/test/data-test-expr-tests.js b/test/data-test-expr-tests.js index e5cac25..ecf266f 100644 --- a/test/data-test-expr-tests.js +++ b/test/data-test-expr-tests.js @@ -98,6 +98,19 @@ const tests = { ['nope', true, 'DefaultState'], [true, false, 'DefaultState'], [false, false, 'DefaultState'] + ], + IsString: [ + ['yep', true, 'NextState'], + [0, false, 'NextState'], + [true, false, 'NextState'], + [undefined, false, 'NextState'], + [null, false, 'NextState'], + + ['yep', false, 'DefaultState'], + [0, true, 'DefaultState'], + [true, true, 'DefaultState'], + [undefined, true, 'DefaultState'], + [null, true, 'DefaultState'] ] }