/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.
 * 
 *************************************************************/




// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sal.hxx"
// autogenerated file with codegen.pl

#include "gtest/gtest.h"
#include <rtl/locale.hxx>
#include <osl/thread.h>

namespace rtl_locale
{
    // default locale for test purpose
    void setDefaultLocale()
    {
        rtl::OLocale::setDefault(rtl::OUString::createFromAscii("de"), rtl::OUString::createFromAscii("DE"), /* rtl::OUString() */ rtl::OUString::createFromAscii("hochdeutsch") );
    }

class getDefault : public ::testing::Test
{
public:
    // initialise your test code values here.
    void SetUp()
    {
    }

    void TearDown()
    {
    }
}; // class getDefault

TEST_F(getDefault, getDefault_000)
{
    // this is demonstration code
    // ASSERT_TRUE(1 == 1) << "a message";

    // due to the fact, we set the default locale at first, this test is no longer possible
    // ::rtl::OLocale aLocale = ::rtl::OLocale::getDefault();
    // ASSERT_TRUE(aLocale.getData() == NULL) << "locale must be null";
}

TEST_F(getDefault, getDefault_001)
{
    // rtl::OLocale::setDefault(rtl::OUString::createFromAscii("de"), rtl::OUString::createFromAscii("DE"), rtl::OUString());
    rtl::OLocale aLocale = ::rtl::OLocale::getDefault();
    ASSERT_TRUE(aLocale.getData() != NULL) << "locale must not be null";
}

class setDefault : public ::testing::Test
{
public:
    // initialise your test code values here.
    void SetUp()
    {
    }

    void TearDown()
    {
        setDefaultLocale();
    }
}; // class setDefault

TEST_F(setDefault, setDefault_001)
{
    rtl::OLocale::setDefault(rtl::OUString::createFromAscii("en"), rtl::OUString::createFromAscii("US"), rtl::OUString());
    rtl::OLocale aLocale = ::rtl::OLocale::getDefault();
    ASSERT_TRUE(aLocale.getData() != NULL) << "locale must not null";

    // be sure to not GPF
}


class getLanguage : public ::testing::Test
{
public:
    void SetUp()
    {
    }

    void TearDown()
    {
    }
}; // class getLanguage

TEST_F(getLanguage, getLanguage_001)
{
    rtl::OLocale aLocale = ::rtl::OLocale::getDefault();
    rtl::OUString suLanguage = aLocale.getLanguage();
    printf("Language: %s\n", rtl::OUStringToOString(suLanguage, osl_getThreadTextEncoding()).getStr());
    ASSERT_TRUE(suLanguage.equals(rtl::OUString::createFromAscii("de"))) << "locale language must be 'de'";
}

TEST_F(getLanguage, getLanguage_002)
{
    rtl::OLocale aLocale = ::rtl::OLocale::getDefault();
    rtl::OUString suLanguage = rtl_locale_getLanguage(aLocale.getData());
    printf("Language: %s\n", rtl::OUStringToOString(suLanguage, osl_getThreadTextEncoding()).getStr());
    ASSERT_TRUE(suLanguage.equals(rtl::OUString::createFromAscii("de"))) << "locale language must be 'de'";
}


class getCountry : public ::testing::Test
{
public:
    // initialise your test code values here.
    void SetUp()
    {
    }

    void TearDown()
    {
    }
}; // class getCountry

TEST_F(getCountry, getCountry_001)
{
    rtl::OLocale aLocale = ::rtl::OLocale::getDefault();
    rtl::OUString suCountry = aLocale.getCountry();
    printf("Country: %s\n", rtl::OUStringToOString(suCountry, osl_getThreadTextEncoding()).getStr());
    ASSERT_TRUE(suCountry.equals(rtl::OUString::createFromAscii("DE"))) << "locale country must be 'DE'";
}

TEST_F(getCountry, getCountry_002)
{
    rtl::OLocale aLocale = ::rtl::OLocale::getDefault();
    rtl::OUString suCountry = rtl_locale_getCountry(aLocale.getData());
    printf("Country: %s\n", rtl::OUStringToOString(suCountry, osl_getThreadTextEncoding()).getStr());
    ASSERT_TRUE(suCountry.equals(rtl::OUString::createFromAscii("DE"))) << "locale country must be 'DE'";
}

class getVariant : public ::testing::Test
{
public:
    // initialise your test code values here.
    void SetUp()
    {
    }

    void TearDown()
    {
    }
}; // class getVariant

TEST_F(getVariant, getVariant_001)
{
    rtl::OLocale aLocale = ::rtl::OLocale::getDefault();
    rtl::OUString suVariant = aLocale.getVariant();
    printf("Variant: %s\n", rtl::OUStringToOString(suVariant, osl_getThreadTextEncoding()).getStr());
    ASSERT_TRUE(suVariant.equals(rtl::OUString::createFromAscii("hochdeutsch"))) << "locale variant must be 'hochdeutsch'";
}

TEST_F(getVariant, getVariant_002)
{
    rtl::OLocale aLocale = ::rtl::OLocale::getDefault();
    rtl::OUString suVariant = rtl_locale_getVariant(aLocale.getData());
    printf("Variant: %s\n", rtl::OUStringToOString(suVariant, osl_getThreadTextEncoding()).getStr());
    ASSERT_TRUE(suVariant.equals(rtl::OUString::createFromAscii("hochdeutsch"))) << "locale variant must be 'hochdeutsch'";
}

class hashCode : public ::testing::Test
{
public:
    // initialise your test code values here.
    void SetUp()
    {
    }

    void TearDown()
    {
    }
}; // class hashCode

TEST_F(hashCode, hashCode_001)
{
    rtl::OLocale aLocale = ::rtl::OLocale::getDefault();
    sal_Int32 nHashCode = aLocale.hashCode();
    printf("Hashcode: %d\n", nHashCode);
    ASSERT_TRUE(nHashCode != 0) << "locale hashcode must be 3831";
}

TEST_F(hashCode, hashCode_002)
{
    rtl::OLocale aLocale = ::rtl::OLocale::getDefault();
    sal_Int32 nHashCode = rtl_locale_hashCode(aLocale.getData());
    printf("Hashcode: %d\n", nHashCode);
    ASSERT_TRUE(nHashCode != 0) << "locale hashcode must be 3831";
}

class equals : public ::testing::Test
{
public:
    // initialise your test code values here.
    void SetUp()
    {
    }

    void TearDown()
    {
    }
}; // class equals

TEST_F(equals, equals_001)
{
    rtl::OLocale aLocale1 = rtl::OLocale::registerLocale(rtl::OUString::createFromAscii("en"), rtl::OUString::createFromAscii("US"), rtl::OUString());
    rtl::OLocale aLocale2 = rtl::OLocale::registerLocale(rtl::OUString::createFromAscii("en"), rtl::OUString::createFromAscii("US"));

    sal_Bool bLocaleAreEqual = sal_False;
    bLocaleAreEqual = (aLocale1 == aLocale2);

    ASSERT_TRUE(bLocaleAreEqual == sal_True) << "check operator ==()";
}

TEST_F(equals, equals_002)
{
    rtl::OLocale aLocale1 = rtl::OLocale::registerLocale(rtl::OUString::createFromAscii("en"), rtl::OUString::createFromAscii("US"), rtl::OUString());
    rtl::OLocale aLocale2 = rtl::OLocale::registerLocale(rtl::OUString::createFromAscii("en"), rtl::OUString::createFromAscii("US"));

    sal_Int32 nEqual = rtl_locale_equals(aLocale1.getData(), aLocale2.getData());
    printf("rtl_locale_equals() result: %d\n", nEqual);
    ASSERT_TRUE(nEqual != 0);
}

} // namespace rtl_locale


// -----------------------------------------------------------------------------

int main(int argc, char **argv)
{
    // start message
    printf("Initializing ...\n" );
    rtl_locale::setDefaultLocale();
    printf("Initialization Done.\n" );

    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}