114 lines
3.3 KiB
C++
114 lines
3.3 KiB
C++
/*
|
|
* Copyright (C) 2021 The Android Open Source Project
|
|
*
|
|
* 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 "android-modules-utils/sdk_level.h"
|
|
#include "android-modules-utils/unbounded_sdk_level.h"
|
|
#include <android-base/properties.h>
|
|
#include <gtest/gtest.h>
|
|
|
|
namespace android {
|
|
namespace modules {
|
|
namespace sdklevel {
|
|
|
|
namespace nostl {
|
|
bool IsAtLeast(const char *);
|
|
bool IsAtMost(const char *);
|
|
} // namespace nostl
|
|
|
|
namespace unbounded {
|
|
|
|
class UnboundedSdkLevelTest : public ::testing::Test {
|
|
protected:
|
|
UnboundedSdkLevelTest() {
|
|
device_codename_ =
|
|
android::base::GetProperty("ro.build.version.codename", "");
|
|
device_api_level_ = android_get_device_api_level();
|
|
}
|
|
|
|
std::string device_codename_;
|
|
int device_api_level_;
|
|
};
|
|
|
|
using UnboundedSdkLevelDeathTest = UnboundedSdkLevelTest;
|
|
|
|
TEST_F(UnboundedSdkLevelTest, IntegerVersionsTest) {
|
|
EXPECT_TRUE(IsAtLeast("1"));
|
|
EXPECT_TRUE(IsAtLeast("31"));
|
|
EXPECT_TRUE(IsAtLeast(std::to_string(device_api_level_).c_str()));
|
|
|
|
EXPECT_FALSE(IsAtLeast(std::to_string(device_api_level_ + 1).c_str()));
|
|
EXPECT_FALSE(IsAtLeast(std::to_string(__ANDROID_API_FUTURE__).c_str()));
|
|
|
|
EXPECT_FALSE(IsAtMost("1"));
|
|
EXPECT_FALSE(IsAtMost("30"));
|
|
if ("REL" == device_codename_) {
|
|
EXPECT_TRUE(IsAtMost(std::to_string(device_api_level_).c_str()));
|
|
} else {
|
|
EXPECT_FALSE(IsAtMost(std::to_string(device_api_level_).c_str()));
|
|
}
|
|
|
|
EXPECT_TRUE(IsAtMost(std::to_string(device_api_level_ + 1).c_str()));
|
|
EXPECT_TRUE(IsAtMost(std::to_string(__ANDROID_API_FUTURE__).c_str()));
|
|
}
|
|
|
|
TEST_F(UnboundedSdkLevelTest, CodenameVersionsTest) {
|
|
if ("REL" == device_codename_) {
|
|
GTEST_SKIP();
|
|
}
|
|
|
|
EXPECT_TRUE(IsAtLeast("R"));
|
|
EXPECT_TRUE(IsAtLeast("S"));
|
|
EXPECT_TRUE(IsAtLeast("Sv2"));
|
|
EXPECT_TRUE(IsAtLeast("Tiramisu"));
|
|
|
|
EXPECT_FALSE(IsAtLeast("Zzz"));
|
|
|
|
EXPECT_FALSE(IsAtMost("R"));
|
|
EXPECT_FALSE(IsAtMost("S"));
|
|
EXPECT_FALSE(IsAtMost("Sv2"));
|
|
EXPECT_TRUE(IsAtMost("Tiramisu"));
|
|
|
|
EXPECT_TRUE(IsAtMost("Zzz"));
|
|
}
|
|
|
|
TEST_F(UnboundedSdkLevelTest, NoStlTest) {
|
|
EXPECT_TRUE(android::modules::sdklevel::nostl::IsAtLeast(
|
|
std::to_string(device_api_level_).c_str()));
|
|
EXPECT_TRUE(android::modules::sdklevel::nostl::IsAtMost(
|
|
std::to_string(device_api_level_ + 1).c_str()));
|
|
}
|
|
|
|
TEST_F(UnboundedSdkLevelDeathTest, IsAtLeast_EmptyVersionDeathTest) {
|
|
EXPECT_DEATH(IsAtLeast(""), "");
|
|
}
|
|
|
|
TEST_F(UnboundedSdkLevelDeathTest, IsAtMost_EmptyVersionDeathTest) {
|
|
EXPECT_DEATH(IsAtMost(""), "");
|
|
}
|
|
|
|
TEST_F(UnboundedSdkLevelDeathTest, IsAtLeast_CurrentVersionDeathTest) {
|
|
EXPECT_DEATH(IsAtLeast("current"), "");
|
|
}
|
|
|
|
TEST_F(UnboundedSdkLevelDeathTest, IsAtMost_CurrentVersionDeathTest) {
|
|
EXPECT_DEATH(IsAtMost("current"), "");
|
|
}
|
|
|
|
} // namespace unbounded
|
|
} // namespace sdklevel
|
|
} // namespace modules
|
|
} // namespace android
|