diff options
author | Aaron <aaron@10gen.com> | 2012-07-30 22:04:05 -0700 |
---|---|---|
committer | Aaron <aaron@10gen.com> | 2012-07-31 20:09:17 -0700 |
commit | 2545a67d031b55a468239f6e2775ba5f4140a0a4 (patch) | |
tree | 26fdb021aef8b2857b9b37e8ef6d0347b89cce21 /jstests/aggregation | |
parent | 2baa7cc10942e5cf1d34c1f382195da268cdc0ab (diff) | |
download | mongo-2545a67d031b55a468239f6e2775ba5f4140a0a4.tar.gz |
$ifNull functional tests.
Diffstat (limited to 'jstests/aggregation')
-rw-r--r-- | jstests/aggregation/bugs/ifnull.js | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/jstests/aggregation/bugs/ifnull.js b/jstests/aggregation/bugs/ifnull.js new file mode 100644 index 00000000000..55af13bba62 --- /dev/null +++ b/jstests/aggregation/bugs/ifnull.js @@ -0,0 +1,61 @@ +// $ifNull returns the result of the first expression if not null or undefined, otherwise of the +// second expression. + +t = db.jstests_aggregation_ifnull; +t.drop(); + +t.save( {} ); + +function assertError( expectedErrorCode, ifNullSpec ) { + assert.eq( expectedErrorCode, + t.aggregate( { $project:{ a:{ $ifNull:ifNullSpec } } } ).code ); +} + +function assertResult( expectedResult, arg0, arg1 ) { + assert.eq( expectedResult, + t.aggregate( { $project:{ a:{ $ifNull:[ arg0, arg1 ] } } } ).result[ 0 ].a ); +} + +// Wrong number of args. +assertError( 16020, [] ); +assertError( 16020, [1] ); +assertError( 16020, [null] ); +assertError( 16020, [1,1,1] ); +assertError( 16020, [1,1,null] ); +assertError( 16020, [1,1,undefined] ); + +// First arg non null. +assertResult( 1, 1, 2 ); +assertResult( 2, 2, 1 ); +assertResult( false, false, 1 ); +assertResult( '', '', 1 ); +assertResult( [], [], 1 ); +assertResult( {}, {}, 1 ); +assertResult( 1, 1, null ); +assertResult( 2, 2, undefined ); + +// First arg null. +assertResult( 2, null, 2 ); +assertResult( 1, null, 1 ); +assertResult( null, null, null ); +assertResult( undefined, null, undefined ); + +// First arg undefined. +assertResult( 2, undefined, 2 ); +assertResult( 1, undefined, 1 ); +assertResult( null, undefined, null ); +assertResult( undefined, undefined, undefined ); + +// Computed expression. +assertResult( 3, { $add:[ 1, 2 ] }, 5 ); +assertResult( 20, '$missingField', { $multiply:[ 4, 5 ] } ); + +// Divide by 0. +assertResult( 'div0', { $divide:[ 1, 0 ] }, 'div0' ); + +// Nested. +t.drop(); +t.save( { d:'foo' } ); +assertResult( 'foo', '$a', { $ifNull:[ '$b', { $ifNull:[ '$c', '$d' ] } ] } ); +t.update( {}, { $set:{ b:'bar' } } ); +assertResult( 'bar', '$a', { $ifNull:[ '$b', { $ifNull:[ '$c', '$d' ] } ] } ); |