@@ -15,14 +15,23 @@ TEST_GROUP(ScopedStorageTestGroup)
1515TEST_GROUP (StorageTestGroup)
1616{
1717void setup () {
18- buildcc::Storage::Init ();
18+ MemoryLeakWarningPlugin::saveAndDisableNewDeleteOverloads ();
1919 }
2020void teardown () {
21- buildcc::Storage::Deinit ();
21+ buildcc::Storage::Clear ();
22+ MemoryLeakWarningPlugin::restoreNewDeleteOverloads ();
2223 }
2324};
2425// clang-format on
2526
27+ class MyScopedStorage :public buildcc ::ScopedStorage {
28+ public:
29+ // We want to unit test this
30+ template <typename T>void Remove (T *ptr) {
31+ this ->ScopedStorage ::Remove<T>(ptr);
32+ }
33+ };
34+
2635class BigObj {};
2736
2837class BigObjWithParameters {
@@ -42,19 +51,29 @@ class BigObjWithParameters {
4251static BigObj obj;
4352
4453TEST (ScopedStorageTestGroup, BasicUsage) {
45- buildcc::ScopedStorage storage;
54+ MyScopedStorage storage;
4655 storage.Add <BigObjWithParameters>(" identifier" ," name" ,10 , obj);
4756 storage.Add <BigObjWithParameters>(" identifier2" ," name2" ,12 , obj);
4857
4958// Usage
5059 storage.ConstRef <BigObjWithParameters>(" identifier" ).GetName ();
5160 storage.Ref <BigObjWithParameters>(" identifier2" ).GetName ();
5261
62+ CHECK_TRUE (storage.Contains (" identifier" ));
63+ CHECK_FALSE (storage.Contains (" identifier_does_not_exist" ));
64+
65+ CHECK_TRUE (storage.Valid <BigObjWithParameters>(" identifier" ));
66+ CHECK_FALSE (storage.Valid <BigObjWithParameters>(" wrong_identifier" ));
67+ CHECK_FALSE (storage.Valid <int >(" identifier" ));
68+
69+ storage.Clear ();
70+ CHECK_FALSE (storage.Contains (" identifier" ));
71+
5372// Automatic cleanup here
5473}
5574
5675TEST (ScopedStorageTestGroup, IncorrectUsage) {
57- buildcc::ScopedStorage storage;
76+ MyScopedStorage storage;
5877 storage.Add <BigObjWithParameters>(" identifier" ," name" ,10 , obj);
5978
6079// We try to cast to a different type!
@@ -65,13 +84,13 @@ TEST(ScopedStorageTestGroup, IncorrectUsage) {
6584 storage.Ref <BigObjWithParameters>(" identifier2" ));
6685}
6786
68- std::string &toReference (std::string *pointer) {return *pointer; }
69-
7087TEST (ScopedStorageTestGroup, NullptrDelete) {
71- buildcc::ScopedStorage storage;
88+ MyScopedStorage storage;
7289 storage.Remove <std::string>(nullptr );
7390}
7491
92+ //
93+
7594TEST (StorageTestGroup, BasicUsage) {
7695 buildcc::Storage::Add<BigObjWithParameters>(" identifier" ," name" ,10 , obj);
7796 buildcc::Storage::Add<BigObjWithParameters>(" identifier2" ," name2" ,12 , obj);
@@ -84,14 +103,14 @@ TEST(StorageTestGroup, BasicUsage) {
84103
85104STRCMP_EQUAL (bigobj.c_str ()," name" );
86105STRCMP_EQUAL (bigobj2.c_str ()," name2" );
87- }
88106
89- TEST (StorageTestGroup, UsageWithoutInit) {
90- buildcc::Storage::Deinit ( );
107+ CHECK_TRUE ( buildcc::Storage::Contains ( " identifier " ));
108+ CHECK_FALSE ( buildcc::Storage::Contains ( " identifier_does_not_exist " ) );
91109
92- CHECK_THROWS (std::exception, buildcc::Storage::Add<int >(" integer" ));
93- CHECK_THROWS (std::exception, buildcc::Storage::Ref<int >(" integer" ));
94- CHECK_THROWS (std::exception, buildcc::Storage::ConstRef<int >(" integer" ));
110+ CHECK_TRUE (buildcc::Storage::Valid<BigObjWithParameters>(" identifier" ));
111+ CHECK_FALSE (
112+ buildcc::Storage::Valid<BigObjWithParameters>(" wrong_identifier" ));
113+ CHECK_FALSE (buildcc::Storage::Valid<BigObj>(" identifier" ));
95114}
96115
97116int main (int ac,char **av) {