// 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/cpp/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 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 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 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 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