diff options
author | deanm@google.com <deanm@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-08-26 10:54:21 +0000 |
---|---|---|
committer | deanm@google.com <deanm@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-08-26 10:54:21 +0000 |
commit | 224e009843c1a1996a05c35ff527f83d9ccd9445 (patch) | |
tree | 8b9eb08de0de6aae52dd04b885ba3e6f164f3f97 /base/tracked_objects_unittest.cc | |
parent | ccd0e110a34b9f7c6d5766a9cf7ea00e99027bac (diff) | |
download | chromium_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.cc | 97 |
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 |