[ { "name": "an ordinary substring match on one field", "args": [ [{ "name": "Ada Lovelace", "role": "Engineer" }, { "name": "Grace Hopper", "role": "Admiral" }, { "name": "Linus Torvalds", "role": "engineer" }], ["name"], "hopper" ], "expect": [{ "name": "Grace Hopper", "role": "Admiral" }] }, { "name": "matching is case-insensitive in both directions", "args": [ [{ "name": "Ada Lovelace", "role": "Engineer" }, { "name": "Grace Hopper", "role": "Admiral" }, { "name": "Linus Torvalds", "role": "engineer" }], ["role"], "ENGINEER" ], "expect": [{ "name": "Ada Lovelace", "role": "Engineer" }, { "name": "Linus Torvalds", "role": "engineer" }] }, { "name": "an empty query means show me everything, not show me nothing", "args": [[{ "name": "Ada" }, { "name": "Grace" }], ["name"], ""], "expect": [{ "name": "Ada" }, { "name": "Grace" }] }, { "name": "an empty query returns records that carry none of the searched fields", "args": [[{ "other": 1 }, { "name": "Grace" }], ["name"], ""], "expect": [{ "other": 1 }, { "name": "Grace" }] }, { "name": "nothing matching is an empty list, not an error", "args": [[{ "name": "Ada" }, { "name": "Grace" }], ["name"], "zebra"], "expect": [] }, { "name": "matches come back in input order, never in relevance order", "args": [ [{ "seq": 1, "name": "Ada Lovelace" }, { "seq": 2, "name": "Grace Hopper" }, { "seq": 3, "name": "Linus Torvalds" }], ["name"], "L" ], "expect": [{ "seq": 1, "name": "Ada Lovelace" }, { "seq": 3, "name": "Linus Torvalds" }] }, { "name": "any of the named fields can match", "args": [ [{ "name": "Ada Lovelace", "role": "Engineer" }, { "name": "Grace Hopper", "role": "Admiral" }], ["name", "role"], "admiral" ], "expect": [{ "name": "Grace Hopper", "role": "Admiral" }] }, { "name": "a record that is missing a searched field is skipped, not an error", "args": [ [{ "name": "Ada" }, { "name": "Grace", "role": "Admiral" }, { "role": "Admiral" }], ["role"], "admiral" ], "expect": [{ "name": "Grace", "role": "Admiral" }, { "role": "Admiral" }] }, { "name": "a null field matches nothing", "args": [[{ "name": "Ada", "role": null }, { "name": "Grace", "role": "Admiral" }], ["role"], "a"], "expect": [{ "name": "Grace", "role": "Admiral" }] }, { "name": "integers are searchable by their digits, so an id can be typed into the box", "args": [[{ "id": 17, "name": "Ada" }, { "id": 42, "name": "Grace" }, { "id": 170, "name": "Linus" }], ["id"], "17"], "expect": [{ "id": 17, "name": "Ada" }, { "id": 170, "name": "Linus" }] }, { "name": "booleans are searchable as true and false in every language", "args": [[{ "n": "a", "active": true }, { "n": "b", "active": false }, { "n": "c", "active": true }], ["active"], "TRUE"], "expect": [{ "n": "a", "active": true }, { "n": "c", "active": true }] }, { "name": "case folding is ASCII only, so an unaccented query does not find an accented word", "args": [[{ "t": "Café" }, { "t": "CAFÉ" }, { "t": "Cafe" }], ["t"], "cafe"], "expect": [{ "t": "Cafe" }] }, { "name": "an accented query matches the same accented letters, unfolded", "args": [[{ "t": "Café" }, { "t": "CAFÉ" }, { "t": "Cafe" }], ["t"], "Café"], "expect": [{ "t": "Café" }] }, { "name": "a fraction is not searchable: no decimal rendering of it is the same in three languages", "args": [[{ "rate": 1.5, "n": "a" }, { "rate": "1.5", "n": "b" }], ["rate"], "1.5"], "expect": [{ "rate": "1.5", "n": "b" }] }, { "name": "an integer too large to survive a JavaScript round trip is not searchable", "args": [[{ "id": 9007199254740993 }, { "id": 9007 }], ["id"], "9007"], "expect": [{ "id": 9007 }] }, { "name": "a list or a map in a searched field matches nothing", "args": [[{ "tags": ["alpha", "beta"] }, { "tags": { "first": "alpha" } }, { "tags": "alpha beta" }], ["tags"], "alpha"], "expect": [{ "tags": "alpha beta" }] }, { "name": "one record, one match", "args": [[{ "name": "Ada" }], ["name"], "ada"], "expect": [{ "name": "Ada" }] }, { "name": "no records is no matches", "args": [[], ["name"], "ada"], "expect": [] }, { "name": "searching no fields at all is a caller bug, not a silent empty result", "args": [[{ "name": "Ada" }], [], "ada"], "expectError": "at least one field" }, { "name": "a non-string query is a caller bug", "args": [[{ "id": 17 }], ["id"], 17], "expectError": "query must be a string" } ]