Home | History | Annotate | Download | only in test
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "ui/events/test/test_event_target.h"
      6 
      7 #include "ui/events/event.h"
      8 #include "ui/events/event_target_iterator.h"
      9 #include "ui/events/event_targeter.h"
     10 
     11 namespace ui {
     12 namespace test {
     13 
     14 TestEventTarget::TestEventTarget()
     15     : parent_(NULL),
     16       mark_events_as_handled_(false),
     17       recorder_(NULL),
     18       target_name_("unknown") {}
     19 TestEventTarget::~TestEventTarget() {}
     20 
     21 void TestEventTarget::AddChild(scoped_ptr<TestEventTarget> child) {
     22   TestEventTarget* child_r = child.get();
     23   if (child->parent()) {
     24     AddChild(child->parent()->RemoveChild(child.release()));
     25   } else {
     26     children_.push_back(child.release());
     27   }
     28   child_r->set_parent(this);
     29 }
     30 
     31 scoped_ptr<TestEventTarget> TestEventTarget::RemoveChild(TestEventTarget *c) {
     32   ScopedVector<TestEventTarget>::iterator iter = std::find(children_.begin(),
     33                                                            children_.end(),
     34                                                            c);
     35   if (iter != children_.end()) {
     36     children_.weak_erase(iter);
     37     c->set_parent(NULL);
     38     return scoped_ptr<TestEventTarget>(c);
     39   }
     40   return scoped_ptr<TestEventTarget>();
     41 }
     42 
     43 void TestEventTarget::SetEventTargeter(scoped_ptr<EventTargeter> targeter) {
     44   targeter_ = targeter.Pass();
     45 }
     46 
     47 bool TestEventTarget::DidReceiveEvent(ui::EventType type) const {
     48   return received_.count(type) > 0;
     49 }
     50 
     51 void TestEventTarget::ResetReceivedEvents() {
     52   received_.clear();
     53 }
     54 
     55 ////////////////////////////////////////////////////////////////////////////////
     56 // TestEventTarget, protected
     57 
     58 bool TestEventTarget::CanAcceptEvent(const ui::Event& event) {
     59   return true;
     60 }
     61 
     62 EventTarget* TestEventTarget::GetParentTarget() {
     63   return parent_;
     64 }
     65 
     66 scoped_ptr<EventTargetIterator> TestEventTarget::GetChildIterator() const {
     67   return scoped_ptr<EventTargetIterator>(
     68       new EventTargetIteratorImpl<TestEventTarget>(children_.get()));
     69 }
     70 
     71 EventTargeter* TestEventTarget::GetEventTargeter() {
     72   return targeter_.get();
     73 }
     74 
     75 void TestEventTarget::OnEvent(Event* event) {
     76   if (recorder_)
     77     recorder_->push_back(target_name_);
     78   received_.insert(event->type());
     79   EventTarget::OnEvent(event);
     80   if (!event->handled() && mark_events_as_handled_)
     81     event->SetHandled();
     82 }
     83 
     84 ////////////////////////////////////////////////////////////////////////////////
     85 // TestEventTarget, private
     86 
     87 bool TestEventTarget::Contains(TestEventTarget* target) const {
     88   while (target && target != this)
     89     target = target->parent();
     90   return target == this;
     91 }
     92 
     93 }  // namespace test
     94 }  // namespace ui
     95