Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1109)

Unified Diff: chrome/browser/extensions/api/braille_display_private/braille_display_private_apitest.cc

Issue 13355002: Implement chrome.brailleDisplayPrivate API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix stylistic issues from last review round. Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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"));
+}

Powered by Google App Engine
This is Rietveld 408576698