diff options
Diffstat (limited to 'jstests/aggregation/expressions/split.js')
-rw-r--r-- | jstests/aggregation/expressions/split.js | 118 |
1 files changed, 64 insertions, 54 deletions
diff --git a/jstests/aggregation/expressions/split.js b/jstests/aggregation/expressions/split.js index 7d3402bde4e..86200334395 100644 --- a/jstests/aggregation/expressions/split.js +++ b/jstests/aggregation/expressions/split.js @@ -3,58 +3,68 @@ load("jstests/aggregation/extras/utils.js"); // For assertErrorCode and testExpression. (function() { - "use strict"; - - var coll = db.split; - coll.drop(); - assert.writeOK(coll.insert({})); - - testExpression(coll, {$split: ["abc", "b"]}, ["a", "c"]); - testExpression(coll, {$split: ["aaa", "b"]}, ["aaa"]); - testExpression(coll, {$split: ["a b a", "b"]}, ["a ", " a"]); - testExpression(coll, {$split: ["a", "a"]}, ["", ""]); - testExpression(coll, {$split: ["aa", "a"]}, ["", "", ""]); - testExpression(coll, {$split: ["aaa", "a"]}, ["", "", "", ""]); - testExpression(coll, {$split: ["", "a"]}, [""]); - testExpression(coll, {$split: ["abc abc cba abc", "abc"]}, ["", " ", " cba ", ""]); - - // Ensure that $split operates correctly when the string has embedded null bytes. - testExpression(coll, {$split: ["a\0b\0c", "\0"]}, ["a", "b", "c"]); - testExpression(coll, {$split: ["\0a\0", "a"]}, ["\0", "\0"]); - testExpression(coll, {$split: ["\0\0\0", "a"]}, ["\0\0\0"]); - - // Ensure that $split operates correctly when the string has multi-byte tokens or input strings. - // Note that this expression is not unicode-aware; splitting is based wholly off of the byte - // sequence of the input and token. - testExpression(coll, {$split: ["∫a∫", "a"]}, ["∫", "∫"]); - testExpression(coll, {$split: ["a∫∫a", "∫"]}, ["a", "", "a"]); - - // Ensure that $split produces null when given null as input. - testExpression(coll, {$split: ["abc", null]}, null); - testExpression(coll, {$split: [null, "abc"]}, null); - - // Ensure that $split produces null when given missing fields as input. - testExpression(coll, {$split: ["$a", "a"]}, null); - testExpression(coll, {$split: ["a", "$a"]}, null); - - // Ensure that $split errors when given more or less than two arguments. - var pipeline = {$project: {split: {$split: []}}}; - assertErrorCode(coll, pipeline, 16020); - - pipeline = {$project: {split: {$split: ["a"]}}}; - assertErrorCode(coll, pipeline, 16020); - - pipeline = {$project: {split: {$split: ["a", "b", "c"]}}}; - assertErrorCode(coll, pipeline, 16020); - - // Ensure that $split errors when given non-string input. - pipeline = {$project: {split: {$split: [1, "abc"]}}}; - assertErrorCode(coll, pipeline, 40085); - - pipeline = {$project: {split: {$split: ["abc", 1]}}}; - assertErrorCode(coll, pipeline, 40086); - - // Ensure that $split errors when given an empty separator. - pipeline = {$project: {split: {$split: ["abc", ""]}}}; - assertErrorCode(coll, pipeline, 40087); +"use strict"; + +var coll = db.split; +coll.drop(); +assert.writeOK(coll.insert({})); + +testExpression(coll, {$split: ["abc", "b"]}, ["a", "c"]); +testExpression(coll, {$split: ["aaa", "b"]}, ["aaa"]); +testExpression(coll, {$split: ["a b a", "b"]}, ["a ", " a"]); +testExpression(coll, {$split: ["a", "a"]}, ["", ""]); +testExpression(coll, {$split: ["aa", "a"]}, ["", "", ""]); +testExpression(coll, {$split: ["aaa", "a"]}, ["", "", "", ""]); +testExpression(coll, {$split: ["", "a"]}, [""]); +testExpression(coll, {$split: ["abc abc cba abc", "abc"]}, ["", " ", " cba ", ""]); + +// Ensure that $split operates correctly when the string has embedded null bytes. +testExpression(coll, {$split: ["a\0b\0c", "\0"]}, ["a", "b", "c"]); +testExpression(coll, {$split: ["\0a\0", "a"]}, ["\0", "\0"]); +testExpression(coll, {$split: ["\0\0\0", "a"]}, ["\0\0\0"]); + +// Ensure that $split operates correctly when the string has multi-byte tokens or input strings. +// Note that this expression is not unicode-aware; splitting is based wholly off of the byte +// sequence of the input and token. +testExpression(coll, {$split: ["∫a∫", "a"]}, ["∫", "∫"]); +testExpression(coll, {$split: ["a∫∫a", "∫"]}, ["a", "", "a"]); + +// Ensure that $split produces null when given null as input. +testExpression(coll, {$split: ["abc", null]}, null); +testExpression(coll, {$split: [null, "abc"]}, null); + +// Ensure that $split produces null when given missing fields as input. +testExpression(coll, {$split: ["$a", "a"]}, null); +testExpression(coll, {$split: ["a", "$a"]}, null); + +// Ensure that $split errors when given more or less than two arguments. +var pipeline = {$project: {split: {$split: []}}}; +assertErrorCode(coll, pipeline, 16020); + +pipeline = { + $project: {split: {$split: ["a"]}} +}; +assertErrorCode(coll, pipeline, 16020); + +pipeline = { + $project: {split: {$split: ["a", "b", "c"]}} +}; +assertErrorCode(coll, pipeline, 16020); + +// Ensure that $split errors when given non-string input. +pipeline = { + $project: {split: {$split: [1, "abc"]}} +}; +assertErrorCode(coll, pipeline, 40085); + +pipeline = { + $project: {split: {$split: ["abc", 1]}} +}; +assertErrorCode(coll, pipeline, 40086); + +// Ensure that $split errors when given an empty separator. +pipeline = { + $project: {split: {$split: ["abc", ""]}} +}; +assertErrorCode(coll, pipeline, 40087); }()); |