| // Copyright 2013 The Flutter 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 "flutter/shell/platform/common/engine_switches.h" | |
| #include "gtest/gtest.h" | |
| namespace flutter { | |
| namespace { | |
| // Sets |key=value| in the environment of this process. | |
| void SetEnvironmentVariable(const char* key, const char* value) { | |
| #ifdef _WIN32 | |
| _putenv_s(key, value); | |
| #else | |
| setenv(key, value, 1); | |
| #endif | |
| } | |
| // Removes |key| from the environment of this process, if present. | |
| void ClearEnvironmentVariable(const char* key) { | |
| #ifdef _WIN32 | |
| _putenv_s(key, ""); | |
| #else | |
| unsetenv(key); | |
| #endif | |
| } | |
| } // namespace | |
| TEST(FlutterProjectBundle, SwitchesEmpty) { | |
| // Clear the main environment variable, since test order is not guaranteed. | |
| ClearEnvironmentVariable("FLUTTER_ENGINE_SWITCHES"); | |
| EXPECT_EQ(GetSwitchesFromEnvironment().size(), 0U); | |
| } | |
| #ifdef FLUTTER_RELEASE | |
| TEST(FlutterProjectBundle, SwitchesIgnoredInRelease) { | |
| SetEnvironmentVariable("FLUTTER_ENGINE_SWITCHES", "2"); | |
| SetEnvironmentVariable("FLUTTER_ENGINE_SWITCH_1", "abc"); | |
| SetEnvironmentVariable("FLUTTER_ENGINE_SWITCH_2", "foo=\"bar, baz\""); | |
| std::vector<std::string> switches = GetSwitchesFromEnvironment(); | |
| EXPECT_EQ(switches.size(), 0U); | |
| } | |
| #endif // FLUTTER_RELEASE | |
| #ifndef FLUTTER_RELEASE | |
| TEST(FlutterProjectBundle, Switches) { | |
| SetEnvironmentVariable("FLUTTER_ENGINE_SWITCHES", "2"); | |
| SetEnvironmentVariable("FLUTTER_ENGINE_SWITCH_1", "abc"); | |
| SetEnvironmentVariable("FLUTTER_ENGINE_SWITCH_2", "foo=\"bar, baz\""); | |
| std::vector<std::string> switches = GetSwitchesFromEnvironment(); | |
| EXPECT_EQ(switches.size(), 2U); | |
| EXPECT_EQ(switches[0], "--abc"); | |
| EXPECT_EQ(switches[1], "--foo=\"bar, baz\""); | |
| } | |
| TEST(FlutterProjectBundle, SwitchesExtraValues) { | |
| SetEnvironmentVariable("FLUTTER_ENGINE_SWITCHES", "1"); | |
| SetEnvironmentVariable("FLUTTER_ENGINE_SWITCH_1", "abc"); | |
| SetEnvironmentVariable("FLUTTER_ENGINE_SWITCH_2", "foo=\"bar, baz\""); | |
| std::vector<std::string> switches = GetSwitchesFromEnvironment(); | |
| EXPECT_EQ(switches.size(), 1U); | |
| EXPECT_EQ(switches[0], "--abc"); | |
| } | |
| TEST(FlutterProjectBundle, SwitchesMissingValues) { | |
| SetEnvironmentVariable("FLUTTER_ENGINE_SWITCHES", "4"); | |
| SetEnvironmentVariable("FLUTTER_ENGINE_SWITCH_1", "abc"); | |
| SetEnvironmentVariable("FLUTTER_ENGINE_SWITCH_2", "foo=\"bar, baz\""); | |
| ClearEnvironmentVariable("FLUTTER_ENGINE_SWITCH_3"); | |
| SetEnvironmentVariable("FLUTTER_ENGINE_SWITCH_4", "oops"); | |
| std::vector<std::string> switches = GetSwitchesFromEnvironment(); | |
| EXPECT_EQ(switches.size(), 3U); | |
| EXPECT_EQ(switches[0], "--abc"); | |
| EXPECT_EQ(switches[1], "--foo=\"bar, baz\""); | |
| // The missing switch should be skipped, leaving SWITCH_4 as the third | |
| // switch in the array. | |
| EXPECT_EQ(switches[2], "--oops"); | |
| } | |
| #endif // !FLUTTER_RELEASE | |
| } // namespace flutter |