Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(298)

Unified Diff: chrome/common/deprecated/event_sys_unittest.cc

Issue 7587009: sync: add DEPS files to subdirs (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix include Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/common/deprecated/event_sys-inl.h ('k') | chrome/common/net/gaia/gaia_authenticator.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/common/deprecated/event_sys_unittest.cc
diff --git a/chrome/common/deprecated/event_sys_unittest.cc b/chrome/common/deprecated/event_sys_unittest.cc
deleted file mode 100644
index 941543a6757bd2ba12ef26747121ac99cd93a49f..0000000000000000000000000000000000000000
--- a/chrome/common/deprecated/event_sys_unittest.cc
+++ /dev/null
@@ -1,264 +0,0 @@
-// Copyright (c) 2010 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.
-
-#include <iosfwd>
-#include <sstream>
-#include <string>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/message_loop.h"
-#include "base/port.h"
-#include "base/threading/platform_thread.h"
-#include "build/build_config.h"
-#include "chrome/common/deprecated/event_sys-inl.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace {
-
-class Pair;
-
-struct TestEvent {
- Pair* source;
- enum {
- A_CHANGED, B_CHANGED, PAIR_BEING_DELETED,
- } what_happened;
- int old_value;
-};
-
-struct TestEventTraits {
- typedef TestEvent EventType;
- static bool IsChannelShutdownEvent(const TestEvent& event) {
- return TestEvent::PAIR_BEING_DELETED == event.what_happened;
- }
-};
-
-class Pair {
- public:
- typedef EventChannel<TestEventTraits> Channel;
- explicit Pair(const std::string& name) : name_(name), a_(0), b_(0) {
- TestEvent shutdown = { this, TestEvent::PAIR_BEING_DELETED, 0 };
- event_channel_ = new Channel(shutdown);
- }
- ~Pair() {
- delete event_channel_;
- }
- void set_a(int n) {
- TestEvent event = { this, TestEvent::A_CHANGED, a_ };
- a_ = n;
- event_channel_->NotifyListeners(event);
- }
- void set_b(int n) {
- TestEvent event = { this, TestEvent::B_CHANGED, b_ };
- b_ = n;
- event_channel_->NotifyListeners(event);
- }
- int a() const { return a_; }
- int b() const { return b_; }
- const std::string& name() { return name_; }
- Channel* event_channel() const { return event_channel_; }
-
- protected:
- const std::string name_;
- int a_;
- int b_;
- Channel* event_channel_;
-};
-
-class EventLogger {
- public:
- explicit EventLogger(std::ostream* out) : out_(out) { }
- ~EventLogger() {
- for (Hookups::iterator i = hookups_.begin(); i != hookups_.end(); ++i)
- delete *i;
- }
-
- void Hookup(const std::string name, Pair::Channel* channel) {
- hookups_.push_back(NewEventListenerHookup(channel, this,
- &EventLogger::HandlePairEvent,
- name));
- }
-
- void HandlePairEvent(const std::string& name, const TestEvent& event) {
- const char* what_changed = NULL;
- int new_value = 0;
- Hookups::iterator dead;
- switch (event.what_happened) {
- case TestEvent::A_CHANGED:
- what_changed = "A";
- new_value = event.source->a();
- break;
- case TestEvent::B_CHANGED:
- what_changed = "B";
- new_value = event.source->b();
- break;
- case TestEvent::PAIR_BEING_DELETED:
- *out_ << name << " heard " << event.source->name() << " being deleted."
- << std::endl;
- return;
- default:
- FAIL() << "Bad event.what_happened: " << event.what_happened;
- break;
- }
- *out_ << name << " heard " << event.source->name() << "'s " << what_changed
- << " change from " << event.old_value
- << " to " << new_value << std::endl;
- }
-
- typedef std::vector<EventListenerHookup*> Hookups;
- Hookups hookups_;
- std::ostream* out_;
-};
-
-const char golden_result[] = "Larry heard Sally's B change from 0 to 2\n"
-"Larry heard Sally's A change from 1 to 3\n"
-"Lewis heard Sam's B change from 0 to 5\n"
-"Larry heard Sally's A change from 3 to 6\n"
-"Larry heard Sally being deleted.\n";
-
-TEST(EventSys, Basic) {
- Pair sally("Sally"), sam("Sam");
- sally.set_a(1);
- std::stringstream log;
- EventLogger logger(&log);
- logger.Hookup("Larry", sally.event_channel());
- sally.set_b(2);
- sally.set_a(3);
- sam.set_a(4);
- logger.Hookup("Lewis", sam.event_channel());
- sam.set_b(5);
- sally.set_a(6);
- // Test that disconnect within callback doesn't deadlock.
- TestEvent event = {&sally, TestEvent::PAIR_BEING_DELETED, 0 };
- sally.event_channel()->NotifyListeners(event);
- sally.set_a(7);
- ASSERT_EQ(log.str(), golden_result);
-}
-
-
-// This goes pretty far beyond the normal use pattern, so don't use
-// ThreadTester as an example of what to do.
-class ThreadTester : public EventListener<TestEvent>,
- public base::PlatformThread::Delegate {
- public:
- explicit ThreadTester(Pair* pair)
- : pair_(pair), remove_event_(&remove_event_mutex_),
- remove_event_bool_(false), completed_(false) {
- pair_->event_channel()->AddListener(this);
- }
- ~ThreadTester() {
- pair_->event_channel()->RemoveListener(this);
- for (size_t i = 0; i < threads_.size(); i++) {
- base::PlatformThread::Join(threads_[i].thread);
- }
- }
-
- struct ThreadInfo {
- base::PlatformThreadHandle thread;
- };
-
- struct ThreadArgs {
- base::ConditionVariable* thread_running_cond;
- base::Lock* thread_running_mutex;
- bool thread_running;
- };
-
- void Go() {
- base::Lock thread_running_mutex;
- base::ConditionVariable thread_running_cond(&thread_running_mutex);
- ThreadArgs args;
- ThreadInfo info;
- args.thread_running_cond = &(thread_running_cond);
- args.thread_running_mutex = &(thread_running_mutex);
- args.thread_running = false;
- args_ = args;
- ASSERT_TRUE(base::PlatformThread::Create(0, this, &info.thread));
- thread_running_mutex.Acquire();
- while ((args_.thread_running) == false) {
- thread_running_cond.Wait();
- }
- thread_running_mutex.Release();
- threads_.push_back(info);
- }
-
- // PlatformThread::Delegate methods.
- virtual void ThreadMain() {
- // Make sure each thread gets a current MessageLoop in TLS.
- // This test should use chrome threads for testing, but I'll leave it like
- // this for the moment since it requires a big chunk of rewriting and I
- // want the test passing while I checkpoint my CL. Technically speaking,
- // there should be no functional difference.
- MessageLoop message_loop;
- args_.thread_running_mutex->Acquire();
- args_.thread_running = true;
- args_.thread_running_cond->Signal();
- args_.thread_running_mutex->Release();
-
- remove_event_mutex_.Acquire();
- while (remove_event_bool_ == false) {
- remove_event_.Wait();
- }
- remove_event_mutex_.Release();
-
- // Normally, you'd just delete the hookup. This is very bad style, but
- // necessary for the test.
- pair_->event_channel()->RemoveListener(this);
-
- completed_mutex_.Acquire();
- completed_ = true;
- completed_mutex_.Release();
- }
-
- void HandleEvent(const TestEvent& event) {
- remove_event_mutex_.Acquire();
- remove_event_bool_ = true;
- remove_event_.Broadcast();
- remove_event_mutex_.Release();
-
- base::PlatformThread::YieldCurrentThread();
-
- completed_mutex_.Acquire();
- if (completed_)
- FAIL() << "A test thread exited too early.";
- completed_mutex_.Release();
- }
-
- Pair* pair_;
- base::ConditionVariable remove_event_;
- base::Lock remove_event_mutex_;
- bool remove_event_bool_;
- base::Lock completed_mutex_;
- bool completed_;
- std::vector<ThreadInfo> threads_;
- ThreadArgs args_;
-};
-
-TEST(EventSys, Multithreaded) {
- Pair sally("Sally");
- ThreadTester a(&sally);
- for (int i = 0; i < 3; ++i)
- a.Go();
- sally.set_b(99);
-}
-
-class HookupDeleter {
- public:
- void HandleEvent(const TestEvent& event) {
- delete hookup_;
- hookup_ = NULL;
- }
- EventListenerHookup* hookup_;
-};
-
-TEST(EventSys, InHandlerDeletion) {
- Pair sally("Sally");
- HookupDeleter deleter;
- deleter.hookup_ = NewEventListenerHookup(sally.event_channel(),
- &deleter,
- &HookupDeleter::HandleEvent);
- sally.set_a(1);
- ASSERT_TRUE(NULL == deleter.hookup_);
-}
-
-} // namespace
« no previous file with comments | « chrome/common/deprecated/event_sys-inl.h ('k') | chrome/common/net/gaia/gaia_authenticator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698