> json-transmute@0.1.10 test /var/www/public/json-transmute > mocha Scope Modifiers @path Reserved Key [ { "val": "Product.shipping.options", "pattern": "Product.shipping.options", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "@path", "pattern": "@path", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.shipping.options", "pattern": "Product.shipping.options", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "cheapestShippingCost", "pattern": "cheapestShippingCost", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "economy.cost", "pattern": "economy.cost", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "expeditedShippingOptions", "pattern": "expeditedShippingOptions", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "nextDay", "pattern": "'nextDay'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "nextDay", "pattern": "nextDay", "opts": [], "filters": [], "type": "lookup", "root": false } ] ✓ should update scope for sibling elements [ { "val": "Product.shipping.options", "pattern": "Product.shipping.options", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "@path", "pattern": "@path", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.shipping.options", "pattern": "Product.shipping.options", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "cheapestShippingCost", "pattern": "cheapestShippingCost", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "economy.cost", "pattern": "economy.cost", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "expeditedShippingOptions", "pattern": "expeditedShippingOptions", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "nextDay", "pattern": "'nextDay'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "nextDay", "pattern": "nextDay", "opts": [], "filters": [], "type": "lookup", "root": false } ] ✓ should update scope for child elements @root Reserved Key [ { "val": "Product.shipping.options", "pattern": "Product.shipping.options", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "@root", "pattern": "@root", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.shipping.options", "pattern": "Product.shipping.options", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "cheapestShippingCost", "pattern": "cheapestShippingCost", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "economy.cost", "pattern": "^economy.cost", "opts": [], "filters": [], "type": "lookup", "root": true } ] [ { "val": "expeditedShippingCosts", "pattern": "expeditedShippingCosts", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "nextDay", "pattern": "'nextDay'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "nextDay.cost", "pattern": "^nextDay.cost", "opts": [], "filters": [], "type": "lookup", "root": true } ] ✓ should update root scope for sibling elements [ { "val": "Product.shipping.options", "pattern": "Product.shipping.options", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "@root", "pattern": "@root", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.shipping.options", "pattern": "Product.shipping.options", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "cheapestShippingCost", "pattern": "cheapestShippingCost", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "economy.cost", "pattern": "^economy.cost", "opts": [], "filters": [], "type": "lookup", "root": true } ] [ { "val": "expeditedShippingCosts", "pattern": "expeditedShippingCosts", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "nextDay", "pattern": "'nextDay'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "nextDay.cost", "pattern": "^nextDay.cost", "opts": [], "filters": [], "type": "lookup", "root": true } ] ✓ should update root scope for child elements [] Bracket Reserved Key Pattern [ { "val": "variantColors", "pattern": "variantColors[Product.variants]", "opts": [ "Product.variants" ], "filters": [], "type": "array", "root": false } ] [ { "val": "Product.variants", "pattern": "Product.variants", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "color", "pattern": "'color'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "color", "pattern": "color", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "color", "pattern": "'color'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "color", "pattern": "color", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "color", "pattern": "'color'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "color", "pattern": "color", "opts": [], "filters": [], "type": "lookup", "root": false } ] ✓ should update child scope [ { "val": "variantColors", "pattern": "variantColors[Product.variants]", "opts": [ "Product.variants" ], "filters": [], "type": "array", "root": false } ] [ { "val": "Product.variants", "pattern": "Product.variants", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "color", "pattern": "'color'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "color", "pattern": "color", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "color", "pattern": "'color'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "color", "pattern": "color", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "color", "pattern": "'color'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "color", "pattern": "color", "opts": [], "filters": [], "type": "lookup", "root": false } ] ✓ should define result value as array {} Braces Reserved Key Pattern [ { "val": " variant ", "pattern": "{{' variant ' | trim | trim}}", "opts": [], "filters": [ { "val": "trim", "opts": [], "type": "filter" }, { "val": "trim", "opts": [], "type": "filter" } ], "type": "static", "root": false } ] [ { "val": "color", "pattern": "'color'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "color", "pattern": "color", "opts": [], "filters": [], "type": "lookup", "root": false } ] {} 1) should update child scope [ { "val": " variant ", "pattern": "{{' variant ' | trim | trim}}", "opts": [], "filters": [ { "val": "trim", "opts": [], "type": "filter" }, { "val": "trim", "opts": [], "type": "filter" } ], "type": "static", "root": false } ] [ { "val": "color", "pattern": "'color'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "color", "pattern": "color", "opts": [], "filters": [], "type": "lookup", "root": false } ] 2) should define result value as object Filters #add() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "25", "pattern": "'25' | add('1')", "opts": [], "filters": [ { "val": "add", "opts": [ "'1'" ], "type": "filter" } ], "type": "static", "root": false } ] [ { "val": "1", "pattern": "'1'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should add one or more values to a piped value #and() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "10", "pattern": "'10' | and('true', 'yes')", "opts": [], "filters": [ { "val": "and", "opts": [ "'true'", "'yes'" ], "type": "filter" } ], "type": "static", "root": false } ] [ { "val": "true", "pattern": "'true'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "yes", "pattern": "'yes'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should return the boolean AND result of a piped value and one or more additional parameter values #bool() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "true", "pattern": "'true' | bool", "opts": [], "filters": [ { "val": "bool", "opts": [], "type": "filter" } ], "type": "static", "root": false } ] ✓ should boolean format a piped value #concat() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "acme", "pattern": "'acme' | concat(' ','super',' ','soaker')", "opts": [], "filters": [ { "val": "concat", "opts": [ "' '", "'super'", "' '", "'soaker'" ], "type": "filter" } ], "type": "static", "root": false } ] [ { "val": " ", "pattern": "' '", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "super", "pattern": "'super'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": " ", "pattern": "' '", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "soaker", "pattern": "'soaker'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should return a string catenation of a piped value combined with one or more additional parameter values #count() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "acme super soaker", "pattern": "'acme super soaker' | count", "opts": [], "filters": [ { "val": "count", "opts": [], "type": "filter" } ], "type": "static", "root": false } ] ✓ should count the number of keys, values, or characters in a piped object, array, or string #date() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "04/11/2017", "pattern": "'04/11/2017' | date", "opts": [], "filters": [ { "val": "date", "opts": [], "type": "filter" } ], "type": "static", "root": false } ] ✓ should date format a piped value where x1 is one of: "unix", "javascript", "json" #decrement() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "1", "pattern": "'1' | decrement", "opts": [], "filters": [ { "val": "decrement", "opts": [], "type": "filter" } ], "type": "static", "root": false } ] ✓ should reduce piped value by 1 #default() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "false", "pattern": "'false' | default('ok')", "opts": [], "filters": [ { "val": "default", "opts": [ "'ok'" ], "type": "filter" } ], "type": "static", "root": false } ] [ { "val": "ok", "pattern": "'ok'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should return x1 if the piped value is falsey #divide() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "10", "pattern": "'10' | divide('2', '5')", "opts": [], "filters": [ { "val": "divide", "opts": [ "'2'", "'5'" ], "type": "filter" } ], "type": "static", "root": false } ] [ { "val": "2", "pattern": "'2'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "5", "pattern": "'5'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should divide a piped value by one or more additional parameter values #eq() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "1", "pattern": "'1' | eq('1')", "opts": [], "filters": [ { "val": "eq", "opts": [ "'1'" ], "type": "filter" } ], "type": "static", "root": false } ] [ { "val": "1", "pattern": "'1'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should return true if piped value == x1 #filter() [ { "val": "filter1", "pattern": "filter1", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.variants", "pattern": "Product.variants | filter('stock', '>', '0')", "opts": [], "filters": [ { "val": "filter", "opts": [ "'stock'", "'>'", "'0'" ], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "stock", "pattern": "'stock'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": ">", "pattern": "'>'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "0", "pattern": "'0'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "filter2", "pattern": "filter2", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.variants", "pattern": "Product.variants | filter('stock', '>=', '0')", "opts": [], "filters": [ { "val": "filter", "opts": [ "'stock'", "'>='", "'0'" ], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "stock", "pattern": "'stock'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": ">=", "pattern": "'>='", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "0", "pattern": "'0'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "filter3", "pattern": "filter3", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.variants", "pattern": "Product.variants | filter('stock', '=', '0')", "opts": [], "filters": [ { "val": "filter", "opts": [ "'stock'", "'='", "'0'" ], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "stock", "pattern": "'stock'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "=", "pattern": "'='", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "0", "pattern": "'0'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "filter4", "pattern": "filter4", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.variants", "pattern": "Product.variants | filter('stock', '<', '3')", "opts": [], "filters": [ { "val": "filter", "opts": [ "'stock'", "'<'", "'3'" ], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "stock", "pattern": "'stock'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "<", "pattern": "'<'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "3", "pattern": "'3'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "filter6", "pattern": "filter6", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.variants", "pattern": "Product.variants | filter('stock', '<=', '3')", "opts": [], "filters": [ { "val": "filter", "opts": [ "'stock'", "'<='", "'3'" ], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "stock", "pattern": "'stock'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "<=", "pattern": "'<='", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "3", "pattern": "'3'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should filter a piped array of objects to include only those elements having a key x1 value that is tested as x2 (">", ">=", "=", "<=", "!=") relative to x3 #float() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "1", "pattern": "'1' | float", "opts": [], "filters": [ { "val": "float", "opts": [], "type": "filter" } ], "type": "static", "root": false } ] ✓ should float format a piped value with precision x1 (or 2 if x1 is not specified) #get() [ { "val": "filter1", "pattern": "filter1", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.variants", "pattern": "Product.variants | get('2')", "opts": [], "filters": [ { "val": "get", "opts": [ "'2'" ], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "2", "pattern": "'2'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "filter2", "pattern": "filter2", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.title", "pattern": "Product.title | get('2')", "opts": [], "filters": [ { "val": "get", "opts": [ "'2'" ], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "2", "pattern": "'2'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "filter3", "pattern": "filter3", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product", "pattern": "Product | get('tags')", "opts": [], "filters": [ { "val": "get", "opts": [ "'tags'" ], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "tags", "pattern": "'tags'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should return element x1 from a piped array, object, or string #gt() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "1", "pattern": "'1' | gt('0')", "opts": [], "filters": [ { "val": "gt", "opts": [ "'0'" ], "type": "filter" } ], "type": "static", "root": false } ] [ { "val": "0", "pattern": "'0'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should return true if piped value is greater than value x1 #hash() [ { "val": "filter1", "pattern": "filter1", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.shipping.options", "pattern": "Product.shipping.options | hash", "opts": [], "filters": [ { "val": "hash", "opts": [], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "filter2", "pattern": "filter2", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.shipping.options", "pattern": "Product.shipping.options | hash", "opts": [], "filters": [ { "val": "hash", "opts": [], "type": "filter" } ], "type": "lookup", "root": false } ] ✓ should return an consistent md5 hash string #if() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "yes", "pattern": "'yes' | if('win', 'lose')", "opts": [], "filters": [ { "val": "if", "opts": [ "'win'", "'lose'" ], "type": "filter" } ], "type": "static", "root": false } ] [ { "val": "win", "pattern": "'win'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "lose", "pattern": "'lose'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should return x1 if piped value is true, otherwise returns x2 #increment() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "0", "pattern": "'0' | increment", "opts": [], "filters": [ { "val": "increment", "opts": [], "type": "filter" } ], "type": "static", "root": false } ] ✓ should increment piped value by 1 #int() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "010", "pattern": "'010' | int", "opts": [], "filters": [ { "val": "int", "opts": [], "type": "filter" } ], "type": "static", "root": false } ] ✓ should integer format a piped value #join() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.variants", "pattern": "Product.variants | pluck('color') | join", "opts": [], "filters": [ { "val": "pluck", "opts": [ "'color'" ], "type": "filter" }, { "val": "join", "opts": [], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "color", "pattern": "'color'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should join array elements from a piped value together into a string delimited by x1 (or `,` if x1 is not specified) #lt() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "1", "pattern": "'1' | lt('2')", "opts": [], "filters": [ { "val": "lt", "opts": [ "'2'" ], "type": "filter" } ], "type": "static", "root": false } ] [ { "val": "2", "pattern": "'2'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should return true if piped value is less than value x1 #lowercase() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "ACME", "pattern": "'ACME' | lowercase", "opts": [], "filters": [ { "val": "lowercase", "opts": [], "type": "filter" } ], "type": "static", "root": false } ] ✓ should return `.toLowerCase()` of the piped string #multiply() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "1", "pattern": "'1' | multiply('2', '5')", "opts": [], "filters": [ { "val": "multiply", "opts": [ "'2'", "'5'" ], "type": "filter" } ], "type": "static", "root": false } ] [ { "val": "2", "pattern": "'2'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "5", "pattern": "'5'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should multiply a piped value with one or more additional parameter values #not() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "not", "pattern": "not('true')", "opts": [ "'true'" ], "filters": [], "type": "filter", "root": false } ] [ { "val": "true", "pattern": "'true'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should return the boolean opposite of x1 #or() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "true", "pattern": "'true' | or('false') | bool", "opts": [], "filters": [ { "val": "or", "opts": [ "'false'" ], "type": "filter" }, { "val": "bool", "opts": [], "type": "filter" } ], "type": "static", "root": false } ] [ { "val": "false", "pattern": "'false'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should return the boolean OR result of a piped value and one or more additional parameter values #pluck() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.variants", "pattern": "Product.variants | pluck('color')", "opts": [], "filters": [ { "val": "pluck", "opts": [ "'color'" ], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "color", "pattern": "'color'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should return an array of key values from a piped array of objects having x1 as a key #pop() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.variants", "pattern": "Product.variants | pop", "opts": [], "filters": [ { "val": "pop", "opts": [], "type": "filter" } ], "type": "lookup", "root": false } ] ✓ should return the last element of an array #prune() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.shipping.options", "pattern": "Product.shipping.options | prune('nextDay', 'secondDay')", "opts": [], "filters": [ { "val": "prune", "opts": [ "'nextDay'", "'secondDay'" ], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "nextDay", "pattern": "'nextDay'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "secondDay", "pattern": "'secondDay'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should include only those key / value pairs specified as parameters #push() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "1", "pattern": "'1' | array | push('2')", "opts": [], "filters": [ { "val": "array", "opts": [], "type": "filter" }, { "val": "push", "opts": [ "'2'" ], "type": "filter" } ], "type": "static", "root": false } ] [ { "val": "2", "pattern": "'2'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should add one or more additional elements to a piped array, and ensure piped value is in array format. #replace() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "ACME super soakers are the worst", "pattern": "'ACME super soakers are the worst' | replace('worst', 'best')", "opts": [], "filters": [ { "val": "replace", "opts": [ "'worst'", "'best'" ], "type": "filter" } ], "type": "static", "root": false } ] [ { "val": "worst", "pattern": "'worst'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "best", "pattern": "'best'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should return `.replace(x1, x2)` of the piped string #reduce() [ { "val": "filter0", "pattern": "filter0", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.variants", "pattern": "Product.variants", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "filter1", "pattern": "filter1", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.variants", "pattern": "Product.variants | reduce('stock', 'largest')", "opts": [], "filters": [ { "val": "reduce", "opts": [ "'stock'", "'largest'" ], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "stock", "pattern": "'stock'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "largest", "pattern": "'largest'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "filter2", "pattern": "filter2", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.variants", "pattern": "Product.variants | pluck('color') | reduce('longest')", "opts": [], "filters": [ { "val": "pluck", "opts": [ "'color'" ], "type": "filter" }, { "val": "reduce", "opts": [ "'longest'" ], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "color", "pattern": "'color'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "longest", "pattern": "'longest'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "filter3", "pattern": "filter3", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.variants", "pattern": "Product.variants | pluck('color') | reduce('shortest')", "opts": [], "filters": [ { "val": "pluck", "opts": [ "'color'" ], "type": "filter" }, { "val": "reduce", "opts": [ "'shortest'" ], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "color", "pattern": "'color'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "shortest", "pattern": "'shortest'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "filter4", "pattern": "filter4", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.variants", "pattern": "Product.variants | reduce('stock', 'smallest')", "opts": [], "filters": [ { "val": "reduce", "opts": [ "'stock'", "'smallest'" ], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "stock", "pattern": "'stock'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "smallest", "pattern": "'smallest'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should reduce array of piped values to a single element where element key x1 has the "largest", "longest", "shortest", "smallest" (specified by x2) value. Elements must have a `.length` property for "longest" and "shortest" x2 values. Omit parameter x1 for non-object array elements (e.g. strings) #set() [ { "val": "filter1", "pattern": "filter1", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.variants", "pattern": "Product.variants | set('2', '2') | get('2')", "opts": [], "filters": [ { "val": "set", "opts": [ "'2'", "'2'" ], "type": "filter" }, { "val": "get", "opts": [ "'2'" ], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "2", "pattern": "'2'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "2", "pattern": "'2'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "2", "pattern": "'2'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "filter2", "pattern": "filter2", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.title", "pattern": "Product.title | set('2', '2') | get('2')", "opts": [], "filters": [ { "val": "set", "opts": [ "'2'", "'2'" ], "type": "filter" }, { "val": "get", "opts": [ "'2'" ], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "2", "pattern": "'2'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "2", "pattern": "'2'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "2", "pattern": "'2'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "filter3", "pattern": "filter3", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product", "pattern": "Product | set('tags', '2') | get('tags')", "opts": [], "filters": [ { "val": "set", "opts": [ "'tags'", "'2'" ], "type": "filter" }, { "val": "get", "opts": [ "'tags'" ], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "tags", "pattern": "'tags'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "2", "pattern": "'2'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "tags", "pattern": "'tags'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should return element x1 from a piped array, object, or string #slice() [ { "val": "filter1", "pattern": "filter1", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.variants", "pattern": "Product.variants | slice('2', '3')", "opts": [], "filters": [ { "val": "slice", "opts": [ "'2'", "'3'" ], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "2", "pattern": "'2'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "3", "pattern": "'3'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "filter2", "pattern": "filter2", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.tags", "pattern": "Product.tags | slice('0', '4')", "opts": [], "filters": [ { "val": "slice", "opts": [ "'0'", "'4'" ], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "0", "pattern": "'0'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "4", "pattern": "'4'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should return `.slice()` of the pipped array or string #split() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.tags", "pattern": "Product.tags | split", "opts": [], "filters": [ { "val": "split", "opts": [], "type": "filter" } ], "type": "lookup", "root": false } ] ✓ should return `.split()` of the pipped string #subtract() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "25", "pattern": "'25' | subtract('1')", "opts": [], "filters": [ { "val": "subtract", "opts": [ "'1'" ], "type": "filter" } ], "type": "static", "root": false } ] [ { "val": "1", "pattern": "'1'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should subtract one or more values from a piped value #trim() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": " hello ", "pattern": "' hello ' | trim", "opts": [], "filters": [ { "val": "trim", "opts": [], "type": "filter" } ], "type": "static", "root": false } ] ✓ should return `.trim()` of the piped string #uppercase() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "acme", "pattern": "'acme' | uppercase", "opts": [], "filters": [ { "val": "uppercase", "opts": [], "type": "filter" } ], "type": "static", "root": false } ] ✓ should return `.toUpperCase()` of the piped string #values() [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.shipping.options", "pattern": "Product.shipping.options | values", "opts": [], "filters": [ { "val": "values", "opts": [], "type": "filter" } ], "type": "lookup", "root": false } ] ✓ should format piped value as an array. Objects are converted to an array of key values References #Object [ { "val": "filter1", "pattern": "filter1", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.shipping", "pattern": "Product.shipping", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "filter2", "pattern": "filter2", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "Product.shipping", "pattern": "Product.shipping", "opts": [], "filters": [], "type": "lookup", "root": false } ] ✓ should ensure objects are passed by value, not by reference #Undefined [ { "val": "filter", "pattern": "filter", "opts": [], "filters": [], "type": "lookup", "root": false } ] [ { "val": "does.not.exist", "pattern": "does.not.exist | default('1') | int | add(also.does.not.exist | default('2') | int | divide(definitely.not.defined | default('2') | int))", "opts": [], "filters": [ { "val": "default", "opts": [ "'1'" ], "type": "filter" }, { "val": "int", "opts": [], "type": "filter" }, { "val": "add", "opts": [ "also.does.not.exist|default('2')|int|divide(definitely.not.defined | default('2') | int)" ], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "1", "pattern": "'1'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "also.does.not.exist", "pattern": "also.does.not.exist|default('2')|int|divide(definitely.not.defined | default('2') | int)", "opts": [], "filters": [ { "val": "default", "opts": [ "'2'" ], "type": "filter" }, { "val": "int", "opts": [], "type": "filter" }, { "val": "divide", "opts": [ "definitely.not.defined|default('2')|int" ], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "2", "pattern": "'2'", "opts": [], "filters": [], "type": "static", "root": false } ] [ { "val": "definitely.not.defined", "pattern": "definitely.not.defined|default('2')|int", "opts": [], "filters": [ { "val": "default", "opts": [ "'2'" ], "type": "filter" }, { "val": "int", "opts": [], "type": "filter" } ], "type": "lookup", "root": false } ] [ { "val": "2", "pattern": "'2'", "opts": [], "filters": [], "type": "static", "root": false } ] ✓ should handle undefined references gracefully 45 passing (433ms) 2 failing 1) Scope Modifiers {} Braces Reserved Key Pattern should update child scope: TypeError: Cannot read property 'color' of undefined at Context. (test/test.js:84:34) 2) Scope Modifiers {} Braces Reserved Key Pattern should define result value as object: AssertionError: expected undefined to be an object at Context. (test/test.js:88:42)