dawn-cmake/src/tests/unittests/SystemUtilsTests.cpp

87 lines
3.5 KiB
C++

// Copyright 2019 The Dawn Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <gtest/gtest.h>
#include "common/SystemUtils.h"
// Tests for GetEnvironmentVar
TEST(SystemUtilsTests, GetEnvironmentVar) {
// Test nonexistent environment variable
ASSERT_EQ(GetEnvironmentVar("NonexistentEnvironmentVar"), "");
}
// Tests for SetEnvironmentVar
TEST(SystemUtilsTests, SetEnvironmentVar) {
// Test new environment variable
ASSERT_TRUE(SetEnvironmentVar("EnvironmentVarForTest", "NewEnvironmentVarValue"));
ASSERT_EQ(GetEnvironmentVar("EnvironmentVarForTest"), "NewEnvironmentVarValue");
// Test override environment variable
ASSERT_TRUE(SetEnvironmentVar("EnvironmentVarForTest", "OverrideEnvironmentVarValue"));
ASSERT_EQ(GetEnvironmentVar("EnvironmentVarForTest"), "OverrideEnvironmentVarValue");
}
// Tests for GetExecutableDirectory
TEST(SystemUtilsTests, GetExecutableDirectory) {
// Test returned value is non-empty string
ASSERT_NE(GetExecutableDirectory(), "");
// Test last charecter in path
ASSERT_EQ(GetExecutableDirectory().back(), *GetPathSeparator());
}
// Tests for ScopedEnvironmentVar
TEST(SystemUtilsTests, ScopedEnvironmentVar) {
SetEnvironmentVar("ScopedEnvironmentVarForTest", "original");
// Test empty environment variable doesn't crash
{ ScopedEnvironmentVar var; }
// Test setting empty environment variable
{
ScopedEnvironmentVar var;
var.Set("ScopedEnvironmentVarForTest", "NewEnvironmentVarValue");
ASSERT_EQ(GetEnvironmentVar("ScopedEnvironmentVarForTest"), "NewEnvironmentVarValue");
}
ASSERT_EQ(GetEnvironmentVar("ScopedEnvironmentVarForTest"), "original");
// Test that the environment variable can be set, and it is unset at the end of the scope.
{
ScopedEnvironmentVar var("ScopedEnvironmentVarForTest", "NewEnvironmentVarValue");
ASSERT_EQ(GetEnvironmentVar("ScopedEnvironmentVarForTest"), "NewEnvironmentVarValue");
}
ASSERT_EQ(GetEnvironmentVar("ScopedEnvironmentVarForTest"), "original");
// Test nested scopes
{
ScopedEnvironmentVar outer("ScopedEnvironmentVarForTest", "outer");
ASSERT_EQ(GetEnvironmentVar("ScopedEnvironmentVarForTest"), "outer");
{
ScopedEnvironmentVar inner("ScopedEnvironmentVarForTest", "inner");
ASSERT_EQ(GetEnvironmentVar("ScopedEnvironmentVarForTest"), "inner");
}
ASSERT_EQ(GetEnvironmentVar("ScopedEnvironmentVarForTest"), "outer");
}
ASSERT_EQ(GetEnvironmentVar("ScopedEnvironmentVarForTest"), "original");
// Test redundantly setting scoped variables
{
ScopedEnvironmentVar var1("ScopedEnvironmentVarForTest", "var1");
ASSERT_EQ(GetEnvironmentVar("ScopedEnvironmentVarForTest"), "var1");
ScopedEnvironmentVar var2("ScopedEnvironmentVarForTest", "var2");
ASSERT_EQ(GetEnvironmentVar("ScopedEnvironmentVarForTest"), "var2");
}
ASSERT_EQ(GetEnvironmentVar("ScopedEnvironmentVarForTest"), "original");
}