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