summaryrefslogtreecommitdiffstats
path: root/base/tracked_objects_unittest.cc
diff options
context:
space:
mode:
authordeanm@google.com <deanm@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-08-26 10:54:21 +0000
committerdeanm@google.com <deanm@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-08-26 10:54:21 +0000
commit224e009843c1a1996a05c35ff527f83d9ccd9445 (patch)
tree8b9eb08de0de6aae52dd04b885ba3e6f164f3f97 /base/tracked_objects_unittest.cc
parentccd0e110a34b9f7c6d5766a9cf7ea00e99027bac (diff)
downloadchromium_src-224e009843c1a1996a05c35ff527f83d9ccd9445.zip
chromium_src-224e009843c1a1996a05c35ff527f83d9ccd9445.tar.gz
chromium_src-224e009843c1a1996a05c35ff527f83d9ccd9445.tar.bz2
Move unittests that had a _test filename to _unittest. Update some missing tests in the SCons build.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@1375 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/tracked_objects_unittest.cc')
-rw-r--r--base/tracked_objects_unittest.cc97
1 files changed, 97 insertions, 0 deletions
diff --git a/base/tracked_objects_unittest.cc b/base/tracked_objects_unittest.cc
new file mode 100644
index 0000000..8106785
--- /dev/null
+++ b/base/tracked_objects_unittest.cc
@@ -0,0 +1,97 @@
+// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Test of classes in the tracked_objects.h classes.
+
+#include "base/tracked_objects.h"
+#include "base/logging.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace tracked_objects {
+
+class TrackedObjectsTest : public testing::Test {
+ public:
+ MessageLoop message_loop_;
+};
+
+TEST_F(TrackedObjectsTest, MinimalStartupShutdown) {
+ // Minimal test doesn't even create any tasks.
+ if (!ThreadData::StartTracking(true))
+ return;
+
+ EXPECT_FALSE(ThreadData::first()); // No activity even on this thread.
+ ThreadData* data = ThreadData::current();
+ EXPECT_TRUE(ThreadData::first()); // Now class was constructed.
+ EXPECT_TRUE(data);
+ EXPECT_TRUE(!data->next());
+ EXPECT_EQ(data, ThreadData::current());
+ ThreadData::BirthMap birth_map;
+ data->SnapshotBirthMap(&birth_map);
+ EXPECT_EQ(0u, birth_map.size());
+ ThreadData::DeathMap death_map;
+ data->SnapshotDeathMap(&death_map);
+ EXPECT_EQ(0u, death_map.size());
+ ThreadData::ShutdownSingleThreadedCleanup();
+
+ // Do it again, just to be sure we reset state completely.
+ ThreadData::StartTracking(true);
+ EXPECT_FALSE(ThreadData::first()); // No activity even on this thread.
+ data = ThreadData::current();
+ EXPECT_TRUE(ThreadData::first()); // Now class was constructed.
+ EXPECT_TRUE(data);
+ EXPECT_TRUE(!data->next());
+ EXPECT_EQ(data, ThreadData::current());
+ birth_map.clear();
+ data->SnapshotBirthMap(&birth_map);
+ EXPECT_EQ(0u, birth_map.size());
+ death_map.clear();
+ data->SnapshotDeathMap(&death_map);
+ EXPECT_EQ(0u, death_map.size());
+ ThreadData::ShutdownSingleThreadedCleanup();
+}
+
+class NoopTask : public Task {
+ public:
+ void Run() {}
+};
+
+TEST_F(TrackedObjectsTest, TinyStartupShutdown) {
+ if (!ThreadData::StartTracking(true))
+ return;
+
+ // Instigate tracking on a single task, or our thread.
+ NoopTask task;
+
+ const ThreadData* data = ThreadData::first();
+ EXPECT_TRUE(data);
+ EXPECT_TRUE(!data->next());
+ EXPECT_EQ(data, ThreadData::current());
+ ThreadData::BirthMap birth_map;
+ data->SnapshotBirthMap(&birth_map);
+ EXPECT_EQ(1u, birth_map.size()); // 1 birth location.
+ EXPECT_EQ(1, birth_map.begin()->second->birth_count()); // 1 birth.
+ ThreadData::DeathMap death_map;
+ data->SnapshotDeathMap(&death_map);
+ EXPECT_EQ(0u, death_map.size()); // No deaths.
+
+
+ // Now instigate a birth, and a death.
+ delete new NoopTask;
+
+ birth_map.clear();
+ data->SnapshotBirthMap(&birth_map);
+ EXPECT_EQ(1u, birth_map.size()); // 1 birth location.
+ EXPECT_EQ(2, birth_map.begin()->second->birth_count()); // 2 births.
+ death_map.clear();
+ data->SnapshotDeathMap(&death_map);
+ EXPECT_EQ(1u, death_map.size()); // 1 location.
+ EXPECT_EQ(1, death_map.begin()->second.count()); // 1 death.
+
+ // The births were at the same location as the one known death.
+ EXPECT_EQ(birth_map.begin()->second, death_map.begin()->first);
+
+ ThreadData::ShutdownSingleThreadedCleanup();
+}
+
+} // namespace tracked_objects \ No newline at end of file