Chromium Code Reviews| Index: chrome/browser/extensions/api/braille_display_private/braille_display_private_apitest.cc |
| diff --git a/chrome/browser/extensions/api/braille_display_private/braille_display_private_apitest.cc b/chrome/browser/extensions/api/braille_display_private/braille_display_private_apitest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..52562944c296e0dbfc1bdc4ff881d7cb76a910c2 |
| --- /dev/null |
| +++ b/chrome/browser/extensions/api/braille_display_private/braille_display_private_apitest.cc |
| @@ -0,0 +1,144 @@ |
| +// Copyright (c) 2013 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. |
| + |
| +#ifndef USE_BRLAPI |
| +#error This test requires brlapi. |
| +#endif |
| + |
| +#include <deque> |
| + |
| +#include "base/bind.h" |
| +#include "chrome/browser/extensions/api/braille_display_private/braille_controller.h" |
| +#include "chrome/browser/extensions/api/braille_display_private/brlapi_connection.h" |
| +#include "chrome/browser/extensions/extension_apitest.h" |
| +#include "content/public/browser/browser_thread.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +using content::BrowserThread; |
| +using extensions::api::braille_display_private::BrailleController; |
| +using extensions::api::braille_display_private::BrlapiConnection; |
| + |
| +// Data maintained by the mock BrlapiConnection. This data lives throughout |
| +// a test, while the api implementation takes ownership of the connection |
| +// itself. |
| +struct MockBrlapiConnectionData { |
| + bool connected; |
| + size_t display_size; |
| + brlapi_error_t error; |
| + std::vector<std::string> written_content; |
| + std::deque<brlapi_keyCode_t> pending_keys; |
| +}; |
| + |
| +class MockBrlapiConnection : public BrlapiConnection { |
| + public: |
| + MockBrlapiConnection(MockBrlapiConnectionData* data) |
| + : data_(data) {} |
| + virtual bool Connect(const OnDataReadyCallback& onDataReady) OVERRIDE { |
| + data_->connected = true; |
| + onDataReady_ = onDataReady; |
|
dmazzoni
2013/09/10 19:50:08
Nit: onDataReady -> on_data_ready throughout
|
| + if (!data_->pending_keys.empty()) { |
| + BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
| + base::Bind(&MockBrlapiConnection::NotifyDataReady, |
| + base::Unretained(this))); |
| + } |
| + return true; |
| + } |
| + |
| + virtual void Disconnect() OVERRIDE { |
| + data_->connected = false; |
| + } |
| + |
| + virtual bool Connected() OVERRIDE { |
| + return data_->connected; |
| + } |
| + |
| + virtual brlapi_error_t* BrlapiError() OVERRIDE { |
| + return &data_->error; |
| + } |
| + |
| + virtual std::string BrlapiStrError() OVERRIDE { |
| + return data_->error.brlerrno != BRLAPI_ERROR_SUCCESS ? "Error" : "Success"; |
| + } |
| + |
| + virtual bool GetDisplaySize(size_t* size) OVERRIDE { |
| + *size = data_->display_size; |
| + return true; |
| + } |
| + |
| + virtual bool WriteDots(const unsigned char* cells) OVERRIDE { |
| + std::string written(reinterpret_cast<const char*>(cells), |
| + data_->display_size); |
| + data_->written_content.push_back(written); |
| + return true; |
| + } |
| + |
| + virtual int ReadKey(brlapi_keyCode_t* keyCode) { |
| + if (!data_->pending_keys.empty()) { |
| + *keyCode = data_->pending_keys.front(); |
| + data_->pending_keys.pop_front(); |
| + return 1; |
| + } else { |
| + return 0; |
| + } |
| + } |
| + |
| + private: |
| + |
| + void NotifyDataReady() { |
| + onDataReady_.Run(); |
| + if (!data_->pending_keys.empty()) { |
| + BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
| + base::Bind(&MockBrlapiConnection::NotifyDataReady, |
| + base::Unretained(this))); |
| + } |
| + } |
| + |
| + MockBrlapiConnectionData* data_; |
| + OnDataReadyCallback onDataReady_; |
| +}; |
| + |
| +class BrailleDisplayPrivateApiTest : public ExtensionApiTest { |
| + public: |
| + virtual void SetUpInProcessBrowserTestFixture() { |
| + ExtensionApiTest::SetUpInProcessBrowserTestFixture(); |
| + connection_data_.connected = false; |
| + connection_data_.display_size = 0; |
| + connection_data_.error.brlerrno = BRLAPI_ERROR_SUCCESS; |
| + BrailleController::GetInstance()->SetCreateBrlapiConnectionForTesting( |
| + base::Bind( |
| + &BrailleDisplayPrivateApiTest::CreateBrlapiConnection, |
| + base::Unretained(this))); |
| + } |
| + |
| + protected: |
| + MockBrlapiConnectionData connection_data_; |
| + |
| + private: |
| + scoped_ptr<BrlapiConnection> CreateBrlapiConnection() { |
| + return scoped_ptr<BrlapiConnection>( |
| + new MockBrlapiConnection(&connection_data_)); |
| + } |
| +}; |
| + |
| +IN_PROC_BROWSER_TEST_F(BrailleDisplayPrivateApiTest, WriteDots) { |
| + connection_data_.display_size = 11; |
| + ASSERT_TRUE(RunComponentExtensionTest("braille_display_private/write_dots")) |
| + << message_; |
| + ASSERT_EQ(3U, connection_data_.written_content.size()); |
| + const std::string expected_content(connection_data_.display_size, '\0'); |
| + for (size_t i = 0; i < connection_data_.written_content.size(); ++i) { |
| + ASSERT_EQ(std::string(connection_data_.display_size, static_cast<char>(i)), |
|
dmazzoni
2013/09/10 19:50:08
Use ASSERT_STREQ if possible
|
| + connection_data_.written_content[i]) |
| + << "String " << i << " doesn't match"; |
| + } |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(BrailleDisplayPrivateApiTest, KeyEvents) { |
| + connection_data_.display_size = 11; |
| + connection_data_.pending_keys.push_back( |
| + BRLAPI_KEY_TYPE_CMD | BRLAPI_KEY_CMD_LNUP); |
| + connection_data_.pending_keys.push_back( |
| + BRLAPI_KEY_TYPE_CMD | BRLAPI_KEY_CMD_LNDN); |
| + ASSERT_TRUE(RunComponentExtensionTest("braille_display_private/key_events")); |
| +} |