blob: f31d1e9341e351c9fb447b8c17f79fcd58a68342 [file] [log] [blame]
// Copyright 2020 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 "args.h"
#include <lib/async-loop/cpp/loop.h>
#include <lib/async-loop/default.h>
#include <lib/fidl-async/cpp/bind.h>
#include <mock-boot-arguments/server.h>
#include <zxtest/zxtest.h>
TEST(ArgsTest, CheckDisabled) {
async::Loop loop(&kAsyncLoopConfigNeverAttachToThread);
loop.StartThread();
Arguments args;
fidl::WireSyncClient<fuchsia_boot::Arguments> boot_args;
mock_boot_arguments::Server boot_server;
std::map<std::string, std::string> arguments;
arguments["virtcon.disable"] = "false";
boot_server = mock_boot_arguments::Server(std::move(arguments));
boot_server.CreateClient(loop.dispatcher(), &boot_args);
ASSERT_EQ(ParseArgs(boot_args, &args), ZX_OK);
ASSERT_FALSE(args.disable);
arguments["virtcon.disable"] = "true";
boot_server = mock_boot_arguments::Server(std::move(arguments));
boot_server.CreateClient(loop.dispatcher(), &boot_args);
ASSERT_EQ(ParseArgs(boot_args, &args), ZX_OK);
ASSERT_TRUE(args.disable);
}
TEST(ArgsTest, CheckBootBools) {
async::Loop loop(&kAsyncLoopConfigNeverAttachToThread);
loop.StartThread();
fidl::WireSyncClient<fuchsia_boot::Arguments> boot_args;
mock_boot_arguments::Server boot_server;
std::map<std::string, std::string> arguments;
arguments["virtcon.disable"] = "true";
arguments["virtcon.keep-log-visible"] = "true";
arguments["virtcon.keyrepeat"] = "true";
arguments["virtcon.hide-on-boot"] = "true";
boot_server = mock_boot_arguments::Server(std::move(arguments));
boot_server.CreateClient(loop.dispatcher(), &boot_args);
Arguments args;
ASSERT_EQ(ParseArgs(boot_args, &args), ZX_OK);
ASSERT_TRUE(args.disable);
ASSERT_TRUE(args.repeat_keys);
ASSERT_TRUE(args.keep_log_visible);
ASSERT_TRUE(args.hide_on_boot);
}
TEST(ArgsTest, CheckColorScheme) {
async::Loop loop(&kAsyncLoopConfigNeverAttachToThread);
loop.StartThread();
Arguments args;
fidl::WireSyncClient<fuchsia_boot::Arguments> boot_args;
mock_boot_arguments::Server boot_server;
std::map<std::string, std::string> arguments;
// Default scheme.
{
arguments = std::map<std::string, std::string>();
boot_server = mock_boot_arguments::Server(std::move(arguments));
boot_server.CreateClient(loop.dispatcher(), &boot_args);
ASSERT_EQ(ParseArgs(boot_args, &args), ZX_OK);
ASSERT_EQ(args.color_scheme->front, 0x0F);
ASSERT_EQ(args.color_scheme->back, 0x00);
}
// Dark Scheme.
{
arguments = std::map<std::string, std::string>();
arguments["virtcon.colorscheme"] = "dark";
boot_server = mock_boot_arguments::Server(std::move(arguments));
boot_server.CreateClient(loop.dispatcher(), &boot_args);
ASSERT_EQ(ParseArgs(boot_args, &args), ZX_OK);
ASSERT_EQ(args.color_scheme->front, 0x0F);
ASSERT_EQ(args.color_scheme->back, 0x00);
}
// Light Scheme.
{
arguments = std::map<std::string, std::string>();
arguments["virtcon.colorscheme"] = "light";
boot_server = mock_boot_arguments::Server(std::move(arguments));
boot_server.CreateClient(loop.dispatcher(), &boot_args);
ASSERT_EQ(ParseArgs(boot_args, &args), ZX_OK);
ASSERT_EQ(args.color_scheme->front, 0x00);
ASSERT_EQ(args.color_scheme->back, 0x0F);
}
// Special Scheme.
{
arguments = std::map<std::string, std::string>();
arguments["virtcon.colorscheme"] = "special";
boot_server = mock_boot_arguments::Server(std::move(arguments));
boot_server.CreateClient(loop.dispatcher(), &boot_args);
ASSERT_EQ(ParseArgs(boot_args, &args), ZX_OK);
ASSERT_EQ(args.color_scheme->front, 0x0F);
ASSERT_EQ(args.color_scheme->back, 0x04);
}
// Nonsense string == default scheme
{
arguments = std::map<std::string, std::string>();
arguments["virtcon.colorscheme"] = "myamazingtheme";
boot_server = mock_boot_arguments::Server(std::move(arguments));
boot_server.CreateClient(loop.dispatcher(), &boot_args);
ASSERT_EQ(ParseArgs(boot_args, &args), ZX_OK);
ASSERT_EQ(args.color_scheme->front, 0x0F);
ASSERT_EQ(args.color_scheme->back, 0x00);
}
}
TEST(ArgsTest, CheckFont) {
async::Loop loop(&kAsyncLoopConfigNeverAttachToThread);
loop.StartThread();
Arguments args;
fidl::WireSyncClient<fuchsia_boot::Arguments> boot_args;
mock_boot_arguments::Server boot_server;
std::map<std::string, std::string> arguments;
// Default
{
arguments = std::map<std::string, std::string>();
boot_server = mock_boot_arguments::Server(std::move(arguments));
boot_server.CreateClient(loop.dispatcher(), &boot_args);
ASSERT_EQ(ParseArgs(boot_args, &args), ZX_OK);
ASSERT_EQ(args.font, &gfx_font_9x16);
}
// 9x16
{
arguments = std::map<std::string, std::string>();
arguments["virtcon.font"] = "9x16";
boot_server = mock_boot_arguments::Server(std::move(arguments));
boot_server.CreateClient(loop.dispatcher(), &boot_args);
ASSERT_EQ(ParseArgs(boot_args, &args), ZX_OK);
ASSERT_EQ(args.font, &gfx_font_9x16);
}
// 18x32
{
arguments = std::map<std::string, std::string>();
arguments["virtcon.font"] = "18x32";
boot_server = mock_boot_arguments::Server(std::move(arguments));
boot_server.CreateClient(loop.dispatcher(), &boot_args);
ASSERT_EQ(ParseArgs(boot_args, &args), ZX_OK);
ASSERT_EQ(args.font, &gfx_font_18x32);
}
// Nonsense string == default
{
arguments = std::map<std::string, std::string>();
arguments["virtcon.font"] = "ONEMILLION";
boot_server = mock_boot_arguments::Server(std::move(arguments));
boot_server.CreateClient(loop.dispatcher(), &boot_args);
ASSERT_EQ(ParseArgs(boot_args, &args), ZX_OK);
ASSERT_EQ(args.font, &gfx_font_9x16);
}
}
TEST(ArgsTest, CheckKeymap) {
async::Loop loop(&kAsyncLoopConfigNeverAttachToThread);
loop.StartThread();
Arguments args;
fidl::WireSyncClient<fuchsia_boot::Arguments> boot_args;
mock_boot_arguments::Server boot_server;
std::map<std::string, std::string> arguments;
// Default
{
arguments = std::map<std::string, std::string>();
boot_server = mock_boot_arguments::Server(std::move(arguments));
boot_server.CreateClient(loop.dispatcher(), &boot_args);
ASSERT_EQ(ParseArgs(boot_args, &args), ZX_OK);
ASSERT_EQ(args.keymap, qwerty_map);
}
// qwerty
{
arguments = std::map<std::string, std::string>();
arguments["virtcon.keymap"] = "qwerty";
boot_server = mock_boot_arguments::Server(std::move(arguments));
boot_server.CreateClient(loop.dispatcher(), &boot_args);
ASSERT_EQ(ParseArgs(boot_args, &args), ZX_OK);
ASSERT_EQ(args.keymap, qwerty_map);
}
// dvorak
{
arguments = std::map<std::string, std::string>();
arguments["virtcon.keymap"] = "dvorak";
boot_server = mock_boot_arguments::Server(std::move(arguments));
boot_server.CreateClient(loop.dispatcher(), &boot_args);
ASSERT_EQ(ParseArgs(boot_args, &args), ZX_OK);
ASSERT_EQ(args.keymap, dvorak_map);
}
// nonsense string == default.
{
arguments = std::map<std::string, std::string>();
arguments["virtcon.keymap"] = "randomizedlayout";
boot_server = mock_boot_arguments::Server(std::move(arguments));
boot_server.CreateClient(loop.dispatcher(), &boot_args);
ASSERT_EQ(ParseArgs(boot_args, &args), ZX_OK);
ASSERT_EQ(args.keymap, qwerty_map);
}
}