diff options
author | David Storch <david.storch@10gen.com> | 2016-12-02 13:48:23 -0500 |
---|---|---|
committer | David Storch <david.storch@10gen.com> | 2016-12-06 12:58:40 -0500 |
commit | 6f1824c8ff3b211f72e706de32b9637750cccf1e (patch) | |
tree | 0a4b2712bad469ace0ccef39b3496fa68ddf8bba /src/mongo/db/query/collation | |
parent | 6bee18129c27a82ebcbd316c7900afb04c6f69dc (diff) | |
download | mongo-6f1824c8ff3b211f72e706de32b9637750cccf1e.tar.gz |
SERVER-27197 fix BSONType::Code comparison to not use collator
Diffstat (limited to 'src/mongo/db/query/collation')
-rw-r--r-- | src/mongo/db/query/collation/collation_bson_comparison_test.cpp | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/src/mongo/db/query/collation/collation_bson_comparison_test.cpp b/src/mongo/db/query/collation/collation_bson_comparison_test.cpp index fc07f1ac244..1521af1f146 100644 --- a/src/mongo/db/query/collation/collation_bson_comparison_test.cpp +++ b/src/mongo/db/query/collation/collation_bson_comparison_test.cpp @@ -102,5 +102,108 @@ TEST(CollationBSONComparisonTest, HashingCodeWScopeObjWithCollationShouldNotResp ASSERT_NE(comparator.hash(obj1), comparator.hash(obj2)); } +TEST(CollationBSONComparisonTest, ElementStringComparisonShouldRespectCollation) { + const CollatorInterfaceMock collator(CollatorInterfaceMock::MockType::kAlwaysEqual); + const BSONElementComparator comparator(BSONElementComparator::FieldNamesMode::kConsider, + &collator); + BSONObj obj1 = BSON("a" + << "foo"); + BSONObj obj2 = BSON("a" + << "not foo"); + ASSERT(comparator.evaluate(obj1["a"] == obj2["a"])); +} + +TEST(CollationBSONComparisonTest, ElementStringHashShouldRespectCollation) { + const CollatorInterfaceMock collator(CollatorInterfaceMock::MockType::kAlwaysEqual); + const BSONElementComparator comparator(BSONElementComparator::FieldNamesMode::kConsider, + &collator); + BSONObj obj1 = BSON("a" + << "foo"); + BSONObj obj2 = BSON("a" + << "not foo"); + ASSERT_EQ(comparator.hash(obj1["a"]), comparator.hash(obj2["a"])); +} + +TEST(CollationBSONComparisonTest, ObjStringComparisonShouldRespectCollation) { + const CollatorInterfaceMock collator(CollatorInterfaceMock::MockType::kAlwaysEqual); + const BSONObjComparator comparator( + BSONObj(), BSONObjComparator::FieldNamesMode::kConsider, &collator); + BSONObj obj1 = BSON("a" + << "foo"); + BSONObj obj2 = BSON("a" + << "not foo"); + ASSERT(comparator.evaluate(obj1 == obj2)); +} + +TEST(CollationBSONComparisonTest, ObjStringHashShouldRespectCollation) { + const CollatorInterfaceMock collator(CollatorInterfaceMock::MockType::kAlwaysEqual); + const BSONObjComparator comparator( + BSONObj(), BSONObjComparator::FieldNamesMode::kConsider, &collator); + BSONObj obj1 = BSON("a" + << "foo"); + BSONObj obj2 = BSON("a" + << "not foo"); + ASSERT_EQ(comparator.hash(obj1), comparator.hash(obj2)); +} + +TEST(CollationBSONComparisonTest, ElementCodeComparisonShouldNotRespectCollation) { + const CollatorInterfaceMock collator(CollatorInterfaceMock::MockType::kAlwaysEqual); + const BSONElementComparator comparator(BSONElementComparator::FieldNamesMode::kConsider, + &collator); + BSONObj obj1 = BSON("a" << BSONCode("foo")); + BSONObj obj2 = BSON("a" << BSONCode("not foo")); + ASSERT(comparator.evaluate(obj1["a"] != obj2["a"])); +} + +TEST(CollationBSONComparisonTest, ElementCodeHashShouldNotRespectCollation) { + const CollatorInterfaceMock collator(CollatorInterfaceMock::MockType::kAlwaysEqual); + const BSONElementComparator comparator(BSONElementComparator::FieldNamesMode::kConsider, + &collator); + BSONObj obj1 = BSON("a" << BSONCode("foo")); + BSONObj obj2 = BSON("a" << BSONCode("not foo")); + ASSERT_NE(comparator.hash(obj1["a"]), comparator.hash(obj2["a"])); +} + +TEST(CollationBSONComparisonTest, ObjCodeComparisonShouldNotRespectCollation) { + const CollatorInterfaceMock collator(CollatorInterfaceMock::MockType::kAlwaysEqual); + const BSONObjComparator comparator( + BSONObj(), BSONObjComparator::FieldNamesMode::kConsider, &collator); + BSONObj obj1 = BSON("a" << BSONCode("foo")); + BSONObj obj2 = BSON("a" << BSONCode("not foo")); + ASSERT(comparator.evaluate(obj1 != obj2)); +} + +TEST(CollationBSONComparisonTest, ObjCodeHashShouldNotRespectCollation) { + const CollatorInterfaceMock collator(CollatorInterfaceMock::MockType::kAlwaysEqual); + const BSONObjComparator comparator( + BSONObj(), BSONObjComparator::FieldNamesMode::kConsider, &collator); + BSONObj obj1 = BSON("a" << BSONCode("foo")); + BSONObj obj2 = BSON("a" << BSONCode("not foo")); + ASSERT_NE(comparator.hash(obj1), comparator.hash(obj2)); +} + +TEST(CollationBSONComparisonTest, IdenticalCodeAndStringValuesAreNotEqual) { + const CollatorInterfaceMock collator(CollatorInterfaceMock::MockType::kAlwaysEqual); + const BSONObjComparator comparator( + BSONObj(), BSONObjComparator::FieldNamesMode::kConsider, &collator); + BSONObj obj1 = BSON("a" + << "foo"); + BSONObj obj2 = BSON("a" << BSONCode("foo")); + ASSERT_BSONOBJ_NE(obj1, obj2); + ASSERT(comparator.evaluate(obj1 != obj2)); +} + +TEST(CollationBSONComparisonTest, IdenticalCodeAndStringValuesDoNotHashEqually) { + const CollatorInterfaceMock collator(CollatorInterfaceMock::MockType::kAlwaysEqual); + const BSONObjComparator comparator( + BSONObj(), BSONObjComparator::FieldNamesMode::kConsider, &collator); + BSONObj obj1 = BSON("a" + << "foo"); + BSONObj obj2 = BSON("a" << BSONCode("foo")); + ASSERT_NE(comparator.hash(obj1), comparator.hash(obj2)); + ASSERT_NE(SimpleBSONObjComparator::kInstance.hash(obj1), + SimpleBSONObjComparator::kInstance.hash(obj2)); +} + } // namespace } // namespace mongo |