1// Copyright 2014 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 "battery_status_dispatcher.h"
6
7#include "base/logging.h"
8#include "base/memory/scoped_ptr.h"
9#include "content/common/battery_status_messages.h"
10#include "content/public/test/mock_render_thread.h"
11#include "content/public/test/test_utils.h"
12#include "testing/gtest/include/gtest/gtest.h"
13#include "third_party/WebKit/public/platform/WebBatteryStatusListener.h"
14
15namespace content {
16
17class MockBatteryStatusListener : public blink::WebBatteryStatusListener {
18 public:
19  MockBatteryStatusListener() : did_change_battery_status_(false) { }
20  virtual ~MockBatteryStatusListener() { }
21
22  // blink::WebBatteryStatusListener method.
23  virtual void updateBatteryStatus(
24      const blink::WebBatteryStatus& status) OVERRIDE {
25    status_ = status;
26    did_change_battery_status_ = true;
27  }
28
29  const blink::WebBatteryStatus& status() const { return status_; }
30  bool did_change_battery_status() const { return did_change_battery_status_; }
31
32 private:
33  bool did_change_battery_status_;
34  blink::WebBatteryStatus status_;
35
36  DISALLOW_COPY_AND_ASSIGN(MockBatteryStatusListener);
37};
38
39class BatteryStatusDispatcherTest : public testing::Test {
40 private:
41  // We need to create a MockRenderThread so RenderThread::Get() doesn't return
42  // null.
43  MockRenderThread render_thread_;
44};
45
46TEST_F(BatteryStatusDispatcherTest, UpdateListener) {
47  MockBatteryStatusListener listener;
48  BatteryStatusDispatcher dispatcher(0);
49
50  blink::WebBatteryStatus status;
51  status.charging = true;
52  status.chargingTime = 100;
53  status.dischargingTime = 200;
54  status.level = 0.5;
55
56  dispatcher.Start(&listener);
57
58  BatteryStatusMsg_DidChange message(status);
59  dispatcher.OnControlMessageReceived(message);
60
61  const blink::WebBatteryStatus& received_status = listener.status();
62  EXPECT_TRUE(listener.did_change_battery_status());
63  EXPECT_EQ(status.charging, received_status.charging);
64  EXPECT_EQ(status.chargingTime, received_status.chargingTime);
65  EXPECT_EQ(status.dischargingTime, received_status.dischargingTime);
66  EXPECT_EQ(status.level, received_status.level);
67
68  dispatcher.Stop();
69}
70
71TEST_F(BatteryStatusDispatcherTest, NoUpdateWhenNullListener) {
72  MockBatteryStatusListener listener;
73  BatteryStatusDispatcher dispatcher(0);
74
75  dispatcher.Start(0);
76  dispatcher.Stop();
77
78  blink::WebBatteryStatus status;
79  BatteryStatusMsg_DidChange message(status);
80  dispatcher.OnControlMessageReceived(message);
81  EXPECT_FALSE(listener.did_change_battery_status());
82}
83
84}  // namespace content
85