| 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..c80cd48985beccb785ab875d37bfc384bbc010fa
|
| --- /dev/null
|
| +++ b/chrome/browser/extensions/api/braille_display_private/braille_display_private_apitest.cc
|
| @@ -0,0 +1,146 @@
|
| +// 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& on_data_ready) OVERRIDE {
|
| + data_->connected = true;
|
| + on_data_ready_ = on_data_ready;
|
| + 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() {
|
| + on_data_ready_.Run();
|
| + if (!data_->pending_keys.empty()) {
|
| + BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
|
| + base::Bind(&MockBrlapiConnection::NotifyDataReady,
|
| + base::Unretained(this)));
|
| + }
|
| + }
|
| +
|
| + MockBrlapiConnectionData* data_;
|
| + OnDataReadyCallback on_data_ready_;
|
| +};
|
| +
|
| +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)),
|
| + 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"));
|
| +}
|
|
|