summaryrefslogtreecommitdiff
path: root/jstests/aggregation/expressions/split.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/aggregation/expressions/split.js')
-rw-r--r--jstests/aggregation/expressions/split.js118
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);
}());