blob: 6da42af544545735e843e2a5d052f38307a585b1 [file] [log] [blame]
// Copyright 2015 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.
#include <string>
#include "base/command_line.h"
#include "base/macros.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/material_design/material_design_controller.h"
#include "ui/base/test/material_design_controller_test_api.h"
#include "ui/base/ui_base_switches.h"
namespace ui {
namespace {
// Test fixture for the MaterialDesignController class.
class MaterialDesignControllerTest : public testing::Test {
public:
MaterialDesignControllerTest();
~MaterialDesignControllerTest() override;
protected:
// testing::Test:
void SetUp() override;
void TearDown() override;
void SetCommandLineSwitch(const std::string& value_string);
private:
DISALLOW_COPY_AND_ASSIGN(MaterialDesignControllerTest);
};
MaterialDesignControllerTest::MaterialDesignControllerTest() {
}
MaterialDesignControllerTest::~MaterialDesignControllerTest() {
}
void MaterialDesignControllerTest::SetUp() {
testing::Test::SetUp();
MaterialDesignController::Initialize();
}
void MaterialDesignControllerTest::TearDown() {
test::MaterialDesignControllerTestAPI::Uninitialize();
testing::Test::TearDown();
}
void MaterialDesignControllerTest::SetCommandLineSwitch(
const std::string& value_string) {
base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
switches::kTopChromeMD, value_string);
}
class MaterialDesignControllerTestMaterial :
public MaterialDesignControllerTest {
public:
MaterialDesignControllerTestMaterial() {
SetCommandLineSwitch("material");
}
private:
DISALLOW_COPY_AND_ASSIGN(MaterialDesignControllerTestMaterial);
};
class MaterialDesignControllerTestHybrid : public MaterialDesignControllerTest {
public:
MaterialDesignControllerTestHybrid() {
SetCommandLineSwitch("material-hybrid");
}
private:
DISALLOW_COPY_AND_ASSIGN(MaterialDesignControllerTestHybrid);
};
class MaterialDesignControllerTestDefault :
public MaterialDesignControllerTest {
public:
MaterialDesignControllerTestDefault() {
SetCommandLineSwitch(std::string());
}
private:
DISALLOW_COPY_AND_ASSIGN(MaterialDesignControllerTestDefault);
};
class MaterialDesignControllerTestInvalid :
public MaterialDesignControllerTest {
public:
MaterialDesignControllerTestInvalid() {
const std::string kInvalidValue = "1nvalid-valu3";
SetCommandLineSwitch(kInvalidValue);
}
private:
DISALLOW_COPY_AND_ASSIGN(MaterialDesignControllerTestInvalid);
};
// Verify command line value "material" maps to Mode::MATERIAL when the compile
// time flag is defined.
TEST_F(MaterialDesignControllerTestMaterial,
EnabledCommandLineValueMapsToMaterialModeWhenCompileTimeFlagEnabled) {
EXPECT_EQ(MaterialDesignController::Mode::MATERIAL_NORMAL,
MaterialDesignController::GetMode());
}
// Verify command line value "material-hybrid" maps to Mode::MATERIAL_HYBRID
// when the compile time flag is defined.
TEST_F(
MaterialDesignControllerTestHybrid,
EnabledHybridCommandLineValueMapsToMaterialHybridModeWhenCompileTimeFlagEnabled) {
EXPECT_EQ(MaterialDesignController::Mode::MATERIAL_HYBRID,
MaterialDesignController::GetMode());
}
// Verify command line value "" maps to the default mode when the compile time
// flag is defined.
TEST_F(
MaterialDesignControllerTestDefault,
DisabledCommandLineValueMapsToNonMaterialModeWhenCompileTimeFlagEnabled) {
EXPECT_EQ(MaterialDesignController::DefaultMode(),
MaterialDesignController::GetMode());
}
// Verify the current mode is reported as the default mode when no command line
// flag is defined.
TEST_F(MaterialDesignControllerTest,
NoCommandLineValueMapsToNonMaterialModeWhenCompileTimeFlagEnabled) {
ASSERT_FALSE(base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kTopChromeMD));
EXPECT_EQ(MaterialDesignController::DefaultMode(),
MaterialDesignController::GetMode());
}
// Verify an invalid command line value uses the default mode.
TEST_F(MaterialDesignControllerTestInvalid, InvalidCommandLineValue) {
EXPECT_EQ(MaterialDesignController::DefaultMode(),
MaterialDesignController::GetMode());
}
} // namespace
} // namespace ui