diff options
author | Alberto Lerner <alerner@10gen.com> | 2013-07-05 10:35:20 -0400 |
---|---|---|
committer | Alberto Lerner <alerner@10gen.com> | 2013-07-05 10:35:20 -0400 |
commit | 1961a5d66cee7d9bc102cc2ff6f189c4c4306895 (patch) | |
tree | 5afc1c935a7bf81a0edc3ef0e0da32f150429858 /src/mongo/db/field_ref_test.cpp | |
parent | 5f949c19a26099320f1040e875b3841d4a362b26 (diff) | |
download | mongo-1961a5d66cee7d9bc102cc2ff6f189c4c4306895.tar.gz |
SERVER-7175 Support for catching conflicting mods in the update driver.
Diffstat (limited to 'src/mongo/db/field_ref_test.cpp')
-rw-r--r-- | src/mongo/db/field_ref_test.cpp | 133 |
1 files changed, 105 insertions, 28 deletions
diff --git a/src/mongo/db/field_ref_test.cpp b/src/mongo/db/field_ref_test.cpp index 007af16c103..b33cf44fbb4 100644 --- a/src/mongo/db/field_ref_test.cpp +++ b/src/mongo/db/field_ref_test.cpp @@ -139,42 +139,74 @@ namespace { ASSERT_EQUALS(fieldRef.numReplaced(), 1U); } - TEST(Prefix, Normal) { - FieldRef prefix; - FieldRef other; + TEST( Prefix, Normal ) { + FieldRef prefix, base; + base.parse( "a.b.c" ); - // Positive case prefix.parse( "a.b" ); - other.parse( "a.b.c" ); - ASSERT( prefix.isPrefixOf( other ) ); + ASSERT_TRUE( prefix.isPrefixOf( base ) ); + prefix.parse( "a" ); - ASSERT( prefix.isPrefixOf( other ) ); + ASSERT_TRUE( prefix.isPrefixOf( base ) ); + } + + TEST( Prefix, Dotted ) { + FieldRef prefix, base; + base.parse( "a.0.c" ); prefix.parse( "a.0" ); - other.parse( "a.0.c" ); - ASSERT( prefix.isPrefixOf( other ) ); + ASSERT_TRUE( prefix.isPrefixOf( base ) ); + } - // All these tests are for a prefix of "a.b" in other - // Negative cases + TEST( Prefix, NoPrefixes ) { + FieldRef prefix, base; prefix.parse( "a.b" ); - other.parse( "a.b" ); - ASSERT( !prefix.isPrefixOf( other ) ); - other.parse( "a" ); - ASSERT( !prefix.isPrefixOf( other ) ); - other.parse( "b" ); - ASSERT( !prefix.isPrefixOf( other ) ); - other.parse( "" ); - ASSERT( !prefix.isPrefixOf( other ) ); + base.parse( "a.b" ); + ASSERT_FALSE( prefix.isPrefixOf( base ) ); + + base.parse( "a" ); + ASSERT_FALSE( prefix.isPrefixOf( base ) ); + + base.parse( "b" ); + ASSERT_FALSE( prefix.isPrefixOf( base ) ); + } - // Change to no prefix, empty string, and other is "" also - prefix.parse( "" ); - ASSERT( !prefix.isPrefixOf( other ) ); + TEST( Prefix, EmptyBase ) { + FieldRef field, empty; + field.parse( "a" ); + ASSERT_FALSE( field.isPrefixOf( empty ) ); + ASSERT_FALSE( empty.isPrefixOf( field ) ); + ASSERT_FALSE( empty.isPrefixOf( empty ) ); + } + + TEST( PrefixSize, Normal ) { + FieldRef fieldA, fieldB; + fieldA.parse( "a.b" ); + + fieldB.parse( "a" ); + ASSERT_EQUALS( fieldA.commonPrefixSize( fieldB ), 1U ); + + fieldB.parse( "a.b" ); + ASSERT_EQUALS( fieldA.commonPrefixSize( fieldB ), 2U ); + + fieldB.parse( "a.b.c" ); + ASSERT_EQUALS( fieldA.commonPrefixSize( fieldB ), 2U ); + } - // Change other to "a", leave prefix at "" - other.parse( "a" ); - ASSERT( !prefix.isPrefixOf( other ) ); + TEST( PrefixSize, NoCommonatility ) { + FieldRef fieldA, fieldB; + fieldA.parse( "a" ); + fieldB.parse( "b" ); + ASSERT_EQUALS( fieldA.commonPrefixSize( fieldB ), 0U ); } - TEST(Equality, Simple1 ) { + TEST( PrefixSize, Empty ) { + FieldRef fieldA, empty; + fieldA.parse( "a" ); + ASSERT_EQUALS( fieldA.commonPrefixSize( empty ), 0U ); + ASSERT_EQUALS( empty.commonPrefixSize( fieldA ), 0U ); + } + + TEST( Equality, Simple1 ) { FieldRef a; a.parse( "a.b" ); ASSERT( a.equalsDottedField( "a.b" ) ); @@ -183,7 +215,7 @@ namespace { ASSERT( !a.equalsDottedField( "a.b.c" ) ); } - TEST(Equality, Simple2 ) { + TEST( Equality, Simple2 ) { FieldRef a; a.parse( "a" ); ASSERT( !a.equalsDottedField( "a.b" ) ); @@ -192,6 +224,51 @@ namespace { ASSERT( !a.equalsDottedField( "a.b.c" ) ); } + TEST( Comparison, BothEmpty ) { + FieldRef a; + ASSERT_TRUE( a == a ); + ASSERT_FALSE( a != a ); + ASSERT_FALSE( a < a ); + ASSERT_TRUE( a <= a ); + ASSERT_FALSE( a > a ); + ASSERT_TRUE( a >= a ); + } + + TEST( Comparison, EqualInSize ) { + FieldRef a, b; + a.parse( "a.b.c" ); + b.parse( "a.d.c" ); + ASSERT_FALSE( a == b ); + ASSERT_TRUE( a != b ); + ASSERT_TRUE( a < b ); + ASSERT_TRUE( a <= b ); + ASSERT_FALSE( a > b ); + ASSERT_FALSE( a >= b ); + } + + TEST( Comparison, NonEqual ) { + FieldRef a, b; + a.parse( "a.b.c" ); + b.parse( "b.d" ); + ASSERT_FALSE( a == b ); + ASSERT_TRUE( a != b ); + ASSERT_TRUE( a < b ); + ASSERT_TRUE( a <= b ); + ASSERT_FALSE( a > b ); + ASSERT_FALSE( a >= b ); + } + + TEST( Comparison, MixedEmtpyAndNot ) { + FieldRef a, b; + a.parse( "a" ); + ASSERT_FALSE( a == b ); + ASSERT_TRUE( a != b ); + ASSERT_FALSE( a < b ); + ASSERT_FALSE( a <= b ); + ASSERT_TRUE( a > b ); + ASSERT_TRUE( a >= b ); + } + TEST( DottedField, Simple1 ) { FieldRef a; a.parse( "a.b.c.d.e" ); @@ -205,4 +282,4 @@ namespace { ASSERT_EQUALS( "", a.dottedField(6) ); } -} // namespace mongo +} // namespace |