/*
* Copyright (c) 2024 Huawei Device Co., Ltd.
* 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 "utils/constant.h"

#include <gtest/gtest.h>

using namespace testing::ext;
using namespace OHOS::DistributedData;

class ConstantTest : public testing::Test {
};

/**
* @tc.name: EqualTest
* @tc.desc: Equal.
* @tc.type: FUNC
* @tc.require:
* @tc.author: MengYao
*/
HWTEST_F(ConstantTest, EqualTest, TestSize.Level1)
{
    ASSERT_TRUE(Constant::Equal(true, true));
    ASSERT_TRUE(Constant::Equal(false, false));
    ASSERT_FALSE(Constant::Equal(true, false));
    ASSERT_FALSE(Constant::Equal(false, true));
}

/**
* @tc.name: NotEqualTest
* @tc.desc: NotEqual.
* @tc.type: FUNC
* @tc.require:
* @tc.author: MengYao
*/
HWTEST_F(ConstantTest, NotEqualTest, TestSize.Level1)
{
    ASSERT_TRUE(Constant::NotEqual(true, false));
    ASSERT_TRUE(Constant::NotEqual(false, true));
    ASSERT_FALSE(Constant::NotEqual(true, true));
    ASSERT_FALSE(Constant::NotEqual(false, false));
}

/**
* @tc.name: SplitTest
* @tc.desc: SplitEmptyStringTest.
* @tc.type: FUNC
* @tc.require:
* @tc.author: ht
*/
HWTEST_F(ConstantTest, SplitEmptyStringTest, TestSize.Level1)
{
    auto tokens = Constant::Split("", ",");
    ASSERT_EQ(tokens.size(), 1);
    EXPECT_EQ(tokens[0], "");
}

/**
* @tc.name: SplitTest
* @tc.desc: SplitStringOneDelimTest.
* @tc.type: FUNC
* @tc.require:
* @tc.author: ht
*/
HWTEST_F(ConstantTest, SplitStringOneDelimTest, TestSize.Level1)
{
    auto tokens = Constant::Split("abc_123", "_");
    ASSERT_EQ(tokens.size(), 2);
    EXPECT_EQ(tokens[0], "abc");
    EXPECT_EQ(tokens[1], "123");
}

/**
* @tc.name: SplitTest
* @tc.desc: SplitStringOneDelimAtBeginTest.
* @tc.type: FUNC
* @tc.require:
* @tc.author: ht
*/
HWTEST_F(ConstantTest, SplitStringOneDelimAtBeginTest, TestSize.Level1)
{
    auto tokens = Constant::Split("#abc123", "#");
    ASSERT_EQ(tokens.size(), 2);
    EXPECT_EQ(tokens[0], "");
    EXPECT_EQ(tokens[1], "abc123");
}

/**
* @tc.name: SplitTest
* @tc.desc: SplitStringOneDelimAtEndTest.
* @tc.type: FUNC
* @tc.require:
* @tc.author: ht
*/
HWTEST_F(ConstantTest, SplitStringOneDelimAtEndTest, TestSize.Level1)
{
    auto tokens = Constant::Split("abc123!", "!");
    ASSERT_EQ(tokens.size(), 1);
    EXPECT_EQ(tokens[0], "abc123");
}

/**
* @tc.name: SplitTest
* @tc.desc: SplitStringMutipleDelimTest.
* @tc.type: FUNC
* @tc.require:
* @tc.author: ht
*/
HWTEST_F(ConstantTest, SplitStringMutipleDelimTest, TestSize.Level1)
{
    auto tokens = Constant::Split("abc!123!", "!");
    ASSERT_EQ(tokens.size(), 2);
    EXPECT_EQ(tokens[0], "abc");
    EXPECT_EQ(tokens[1], "123");
}

/**
* @tc.name: SplitTest
* @tc.desc: SplitStringNoDelimTest.
* @tc.type: FUNC
* @tc.require:
* @tc.author: ht
*/
HWTEST_F(ConstantTest, SplitStringNoDelimTest, TestSize.Level1)
{
    auto tokens = Constant::Split("abc123", "^");
    ASSERT_EQ(tokens.size(), 1);
    EXPECT_EQ(tokens[0], "abc123");
}

/**
* @tc.name: SplitTest
* @tc.desc: SplitStringContinuousDelimTest.
* @tc.type: FUNC
* @tc.require:
* @tc.author: ht
*/
HWTEST_F(ConstantTest, SplitStringContinuousDelimTest, TestSize.Level1)
{
    auto tokens = Constant::Split("abc$$$123", "$");
    ASSERT_EQ(tokens.size(), 4);
    EXPECT_EQ(tokens[0], "abc");
    EXPECT_EQ(tokens[1], "");
    EXPECT_EQ(tokens[2], "");
    EXPECT_EQ(tokens[3], "123");
}

/**
* @tc.name: SplitTest
* @tc.desc: SplitStringLongDelimTest.
* @tc.type: FUNC
* @tc.require:
* @tc.author: ht
*/
HWTEST_F(ConstantTest, SplitStringLongDelimTest, TestSize.Level1)
{
    auto tokens = Constant::Split("abc&&&123", "&&");
    ASSERT_EQ(tokens.size(), 2);
    EXPECT_EQ(tokens[0], "abc");
    EXPECT_EQ(tokens[1], "&123");
}