Skip to content

Commit

Permalink
Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ryanhamley committed Oct 26, 2019
1 parent 2060260 commit 1eb592a
Show file tree
Hide file tree
Showing 8 changed files with 156 additions and 3 deletions.
3 changes: 1 addition & 2 deletions src/style-spec/expression/definitions/in.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import type EvaluationContext from '../evaluation_context';
import type {Type} from '../types';
import type {Value} from '../values';

// haystack should only be able to be a string or an array
function isComparableType(type: Type) {
return type.kind === 'boolean' ||
type.kind === 'string' ||
Expand Down Expand Up @@ -53,7 +52,7 @@ class In implements Expression {
if (!needle || !haystack) return null;

if (!isComparableType(needle.type)) {
return context.error(`Expected first argument to be of type boolean, string, number or null, but found ${toString(needle.type)}`);
return context.error(`Expected first argument to be of type boolean, string, number or null, but found ${toString(needle.type)} instead`);
}

return new In(needle, haystack);
Expand Down
2 changes: 1 addition & 1 deletion src/style-spec/reference/v8.json
Original file line number Diff line number Diff line change
Expand Up @@ -2607,7 +2607,7 @@
}
},
"in": {
"doc": "Determines whether an item exists in an array.",
"doc": "Determines whether an item exists in an array or a substring exists in a string.",
"group": "Lookup",
"sdk-support": {
"basic functionality": {
Expand Down
30 changes: 30 additions & 0 deletions test/integration/expression-tests/in/assert-string/test.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"expression": [
"boolean",
["in", ["get", "substr"], ["string", ["get", "str"]]]
],
"inputs": [
[{}, {"properties": {"substr": null, "str": "helloworld"}}],
[{}, {"properties": {"substr": "foo", "str": "helloworld"}}],
[{}, {"properties": {"substr": "low", "str": "helloworld"}}],
[{}, {"properties": {"substr": "low", "str": null}}]
],
"expected": {
"compiled": {
"result": "success",
"isFeatureConstant": false,
"isZoomConstant": true,
"type": "boolean"
},
"outputs": [
false,
false,
true,
{"error":"Expected value to be of type string, but found null instead."}
],
"serialized": [
"boolean",
["in", ["get", "substr"], ["string", ["get", "str"]]]
]
}
}
34 changes: 34 additions & 0 deletions test/integration/expression-tests/in/basic-array/test.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{
"expression": [
"boolean",
["in", ["get", "i"], ["get", "arr"]]
],
"inputs": [
[{}, {"properties": {"i": null, "arr": [9, 8, 7]}}],
[{}, {"properties": {"i": 1, "arr": [9, 8, 7]}}],
[{}, {"properties": {"i": 9, "arr": [9, 8, 7]}}],
[{}, {"properties": {"i": "foo", "arr": ["baz", "bar", "hello", "foo", "world"]}}],
[{}, {"properties": {"i": true, "arr": ["foo", 123, null, 456, false, {}, true]}}],
[{}, {"properties": {"i": 1, "arr": null}}]
],
"expected": {
"compiled": {
"result": "success",
"isFeatureConstant": false,
"isZoomConstant": true,
"type": "boolean"
},
"outputs": [
false,
false,
true,
true,
true,
false
],
"serialized": [
"boolean",
["in", ["get", "i"], ["get", "arr"]]
]
}
}
36 changes: 36 additions & 0 deletions test/integration/expression-tests/in/basic-string/test.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"expression": [
"boolean",
["in", ["get", "substr"], ["get", "str"]]
],
"inputs": [
[{}, {"properties": {"substr": null, "str": "helloworld"}}],
[{}, {"properties": {"substr": "foo", "str": "helloworld"}}],
[{}, {"properties": {"substr": "low", "str": "helloworld"}}],
[{}, {"properties": {"substr": true, "str": "falsetrue"}}],
[{}, {"properties": {"substr": false, "str": "falsetrue"}}],
[{}, {"properties": {"substr": 123, "str": "hello123world"}}],
[{}, {"properties": {"substr": "low", "str": null}}]
],
"expected": {
"compiled": {
"result": "success",
"isFeatureConstant": false,
"isZoomConstant": true,
"type": "boolean"
},
"outputs": [
false,
false,
true,
true,
false,
true,
false
],
"serialized": [
"boolean",
["in", ["get", "substr"], ["get", "str"]]
]
}
}
28 changes: 28 additions & 0 deletions test/integration/expression-tests/in/invalid-haystack/test.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"expression": [
"boolean",
["in", ["get", "needle"], ["get", "haystack"]]
],
"inputs": [
[{}, {"properties": {"needle": 1, "haystack": 123}}],
[{}, {"properties": {"needle": "foo", "haystack": {}}}],
[{}, {"properties": {"needle": "foo", "haystack": null}}]
],
"expected": {
"compiled": {
"result": "success",
"isFeatureConstant": false,
"isZoomConstant": true,
"type": "boolean"
},
"outputs": [
{"error":"Expected second argument to be of type array or string, but found number instead."},
{"error":"Expected second argument to be of type array or string, but found object instead."},
false
],
"serialized": [
"boolean",
["in", ["get", "needle"], ["get", "haystack"]]
]
}
}
26 changes: 26 additions & 0 deletions test/integration/expression-tests/in/invalid-needle/test.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"expression": [
"boolean",
["in", ["get", "needle"], ["get", "haystack"]]
],
"inputs": [
[{}, {"properties": {"needle": {}, "haystack": [9, 8, 7]}}],
[{}, {"properties": {"needle": {}, "haystack": "helloworld"}}]
],
"expected": {
"compiled": {
"result": "success",
"isFeatureConstant": false,
"isZoomConstant": true,
"type": "boolean"
},
"outputs": [
{"error":"Expected first argument to be of type boolean, string or number, but found object instead."},
{"error":"Expected first argument to be of type boolean, string or number, but found object instead."}
],
"serialized": [
"boolean",
["in", ["get", "needle"], ["get", "haystack"]]
]
}
}

0 comments on commit 1eb592a

Please sign in to comment.