blob: d82af17329ceca1326705c91af67f47e1a059eaa [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <fuchsia/developer/tiles/cpp/fidl.h>
#include <fuchsia/ui/app/cpp/fidl.h>
#include <fuchsia/ui/viewsv1/cpp/fidl.h>
#include <fuchsia/ui/viewsv1/cpp/fidl_test_base.h>
#include <gtest/gtest.h>
#include <zx/eventpair.h>
#include "garnet/bin/developer/tiles/tiles.h"
#include "lib/component/cpp/startup_context.h"
#include "lib/component/cpp/testing/startup_context_for_test.h"
#include "lib/gtest/test_loop_fixture.h"
namespace {
class FakeViewManager
: public fuchsia::ui::viewsv1::testing::ViewManager_TestBase {
public:
FakeViewManager() : binding_(this) {}
void Bind(fidl::InterfaceRequest<fuchsia::ui::viewsv1::ViewManager> req) {
binding_.Bind(std::move(req));
}
void NotImplemented_(const std::string& name) {
// Do nothing.
}
fidl::Binding<fuchsia::ui::viewsv1::ViewManager> binding_;
};
class TilesTest : public gtest::TestLoopFixture {
public:
TilesTest() : context_(component::testing::StartupContextForTest::Create()) {
// Drop original starting context to make sure nothing depends on it.
component::StartupContext::CreateFromStartupInfo();
}
void SetUp() final {
zx::eventpair view_token;
if (zx::eventpair::create(0u, &view_owner_token_, &view_token) != ZX_OK)
FXL_NOTREACHED() << "failed to create tokens.";
tiles_impl_ = std::make_unique<tiles::Tiles>(
context_.get(), std::move(view_token), std::vector<std::string>(), 10);
tiles_ = tiles_impl_.get();
}
void TearDown() final {
tiles_ = nullptr;
tiles_impl_.reset();
}
fuchsia::developer::tiles::Controller* tiles() const { return tiles_; }
private:
FakeViewManager view_manager_;
std::unique_ptr<component::testing::StartupContextForTest> context_;
std::unique_ptr<tiles::Tiles> tiles_impl_;
fuchsia::developer::tiles::Controller* tiles_;
zx::eventpair view_owner_token_;
};
TEST_F(TilesTest, Trivial) {}
TEST_F(TilesTest, AddFromURL) {
uint32_t key = 0;
tiles()->AddTileFromURL("test_tile", /* allow_focus */ true, {},
[&key](uint32_t cb_key) {
EXPECT_NE(0u, cb_key) << "Key should be nonzero";
key = cb_key;
});
ASSERT_NE(0u, key) << "Key should be nonzero";
tiles()->ListTiles([key](::std::vector<uint32_t> keys,
::std::vector<::std::string> urls,
::std::vector<::fuchsia::math::SizeF> sizes,
::std::vector<bool> focusabilities) {
ASSERT_EQ(1u, keys.size());
EXPECT_EQ(1u, urls.size());
EXPECT_EQ(1u, sizes.size());
EXPECT_EQ(1u, focusabilities.size());
EXPECT_EQ(key, keys.at(0));
EXPECT_EQ("test_tile", urls.at(0));
EXPECT_EQ(true, focusabilities.at(0));
});
tiles()->RemoveTile(key);
tiles()->ListTiles([](::std::vector<uint32_t> keys,
::std::vector<::std::string> urls,
::std::vector<::fuchsia::math::SizeF> sizes,
::std::vector<bool> focusabilities) {
EXPECT_EQ(0u, keys.size());
EXPECT_EQ(0u, urls.size());
EXPECT_EQ(0u, sizes.size());
EXPECT_EQ(0u, focusabilities.size());
});
tiles()->AddTileFromURL("test_nofocus_tile", /* allow_focus */ false, {},
[&key](uint32_t _cb_key) {
// noop
});
tiles()->ListTiles([](::std::vector<uint32_t> keys,
::std::vector<::std::string> urls,
::std::vector<::fuchsia::math::SizeF> sizes,
::std::vector<bool> focusabilities) {
EXPECT_EQ(1u, keys.size());
EXPECT_EQ(1u, urls.size());
EXPECT_EQ(1u, sizes.size());
EXPECT_EQ(1u, focusabilities.size());
EXPECT_EQ(false, focusabilities.at(0));
});
}
} // anonymous namespace