diff --git a/CMakeLists.txt b/CMakeLists.txt index 3bcf781b..5d822b72 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -247,7 +247,7 @@ set (LOOT_TESTS_HEADERS "${CMAKE_SOURCE_DIR}/src/tests/base_game_test.h" "${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/condition_grammar_test.h" "${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/conditional_metadata_test.h" "${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/file_test.h" - "${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/test_location.h" + "${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/location_test.h" "${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/test_message.h" "${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/test_message_content.h" "${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/test_plugin_dirty_info.h" diff --git a/src/tests/backend/metadata/location_test.h b/src/tests/backend/metadata/location_test.h new file mode 100644 index 00000000..7fc6d6e9 --- /dev/null +++ b/src/tests/backend/metadata/location_test.h @@ -0,0 +1,134 @@ +/* LOOT + +A load order optimisation tool for Oblivion, Skyrim, Fallout 3 and +Fallout: New Vegas. + +Copyright (C) 2014-2016 WrinklyNinja + +This file is part of LOOT. + +LOOT is free software: you can redistribute +it and/or modify it under the terms of the GNU General Public License +as published by the Free Software Foundation, either version 3 of +the License, or (at your option) any later version. + +LOOT is distributed in the hope that it will +be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with LOOT. If not, see +. +*/ + +#ifndef LOOT_TEST_BACKEND_METADATA_LOCATION +#define LOOT_TEST_BACKEND_METADATA_LOCATION + +#include "backend/metadata/location.h" + +#include + +namespace loot { + namespace test { + TEST(Location, defaultConstructorShouldInitialiseEmptyStrings) { + Location location; + + EXPECT_EQ("", location.URL()); + EXPECT_EQ("", location.Name()); + } + + TEST(Location, stringsConstructorShouldStoreGivenStrings) { + Location location("http://www.example.com", "example"); + + EXPECT_EQ("http://www.example.com", location.URL()); + EXPECT_EQ("example", location.Name()); + } + + TEST(Location, locationsWithCaseInsensitiveEqualUrlsShouldBeEqual) { + Location location1("http://www.example.com", "example1"); + Location location2("HTTP://WWW.EXAMPLE.COM", "example2"); + + EXPECT_TRUE(location1 == location2); + } + + TEST(Location, locationsWithDifferentUrlsShouldBeUnequal) { + Location location1("http://www.example1.com"); + Location location2("http://www.example2.com"); + + EXPECT_FALSE(location1 == location2); + } + + TEST(Location, lessThanOperatorShouldUseCaseInsensitiveLexicographicalUrlComparison) { + Location location1("http://www.example.com", "example1"); + Location location2("HTTP://WWW.EXAMPLE.COM", "example2"); + + EXPECT_FALSE(location1 < location2); + EXPECT_FALSE(location2 < location1); + + location1 = Location("http://www.example1.com"); + location2 = Location("http://www.example2.com"); + + EXPECT_TRUE(location1 < location2); + EXPECT_FALSE(location2 < location1); + } + + TEST(Location, emittingAsYamlShouldOutputAScalarIfTheNameStringIsEmpty) { + Location location("http://www.example.com"); + YAML::Emitter emitter; + emitter << location; + + EXPECT_EQ("'" + location.URL() + "'", emitter.c_str()); + } + + TEST(Location, emittingAsYamlShouldOutputAMapIfTheNameStringIsNotEmpty) { + Location location("http://www.example.com", "example"); + YAML::Emitter emitter; + emitter << location; + + EXPECT_EQ("link: '" + location.URL() + "'\nname: '" + location.Name() + "'", emitter.c_str()); + } + + TEST(Location, encodingAsYamlShouldStoreDataCorrectly) { + Location location("http://www.example.com", "example"); + YAML::Node node; + node = location; + + EXPECT_EQ(location.URL(), node["link"].as()); + EXPECT_EQ(location.Name(), node["name"].as()); + } + + TEST(Location, encodingAsYamlShouldOmitEmptyFields) { + Location location("http://www.example.com"); + YAML::Node node; + node = location; + + EXPECT_EQ(location.URL(), node["link"].as()); + EXPECT_FALSE(node["name"]); + } + + TEST(Location, decodingFromYamlShouldSetDataCorrectly) { + YAML::Node node = YAML::Load("{link: http://www.example.com, name: example}"); + Location location = node.as(); + + EXPECT_EQ(node["link"].as(), location.URL()); + EXPECT_EQ(node["name"].as(), location.Name()); + } + + TEST(Location, decodingFromYamlScalarShouldSetUrlToScalarValueAndLeaveNameEmpty) { + YAML::Node node = YAML::Load("http://www.example.com"); + Location location = node.as(); + + EXPECT_EQ(node.as(), location.URL()); + EXPECT_TRUE(location.Name().empty()); + } + + TEST(Location, decodingFromYamlShouldThrowIfAListIsGiven) { + YAML::Node node = YAML::Load("[0, 1, 2]"); + + EXPECT_ANY_THROW(node.as()); + } + } +} + +#endif diff --git a/src/tests/backend/metadata/test_location.h b/src/tests/backend/metadata/test_location.h deleted file mode 100644 index f822f51e..00000000 --- a/src/tests/backend/metadata/test_location.h +++ /dev/null @@ -1,129 +0,0 @@ -/* LOOT - -A load order optimisation tool for Oblivion, Skyrim, Fallout 3 and -Fallout: New Vegas. - -Copyright (C) 2014-2016 WrinklyNinja - -This file is part of LOOT. - -LOOT is free software: you can redistribute -it and/or modify it under the terms of the GNU General Public License -as published by the Free Software Foundation, either version 3 of -the License, or (at your option) any later version. - -LOOT is distributed in the hope that it will -be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with LOOT. If not, see -. -*/ - -#ifndef LOOT_TEST_BACKEND_METADATA_LOCATION -#define LOOT_TEST_BACKEND_METADATA_LOCATION - -#include "backend/metadata/location.h" -#include "tests/fixtures.h" - -namespace loot { - namespace test { - TEST(Location, ConstructorsAndDataAccess) { - Location loc; - EXPECT_EQ("", loc.URL()); - - loc = Location("http://www.example.com"); - EXPECT_EQ("http://www.example.com", loc.URL()); - - loc = Location("http://www.example.com", "example"); - EXPECT_EQ("http://www.example.com", loc.URL()); - EXPECT_EQ("example", loc.Name()); - } - - TEST(Location, EqualityOperator) { - Location loc1, loc2; - EXPECT_TRUE(loc1 == loc2); - - loc1 = Location("http://www.example.com"); - loc2 = Location("HTTP://WWW.EXAMPLE.COM"); - EXPECT_TRUE(loc1 == loc2); - - loc1 = Location("http://www.example.com", "example1"); - loc2 = Location("http://www.example.com", "example2"); - EXPECT_TRUE(loc1 == loc2); - - loc1 = Location("http://www.example1.com"); - loc2 = Location("http://www.example2.com"); - EXPECT_FALSE(loc1 == loc2); - } - - TEST(Location, LessThanOperator) { - Location loc1, loc2; - EXPECT_FALSE(loc1 < loc2); - EXPECT_FALSE(loc2 < loc1); - - loc1 = Location("http://www.example.com"); - loc2 = Location("HTTP://WWW.EXAMPLE.COM"); - EXPECT_FALSE(loc1 < loc2); - EXPECT_FALSE(loc2 < loc1); - - loc1 = Location("http://www.example.com", "example1"); - loc2 = Location("http://www.example.com", "example2"); - EXPECT_FALSE(loc1 < loc2); - EXPECT_FALSE(loc2 < loc1); - - loc1 = Location("http://www.example1.com"); - loc2 = Location("http://www.example2.com"); - EXPECT_TRUE(loc1 < loc2); - EXPECT_FALSE(loc2 < loc1); - } - - TEST(Location, YamlEmitter) { - Location loc("http://www.example.com"); - YAML::Emitter e1; - e1 << loc; - EXPECT_STREQ("'http://www.example.com'", e1.c_str()); - - loc = Location("http://www.example.com", "example"); - YAML::Emitter e2; - e2 << loc; - EXPECT_STREQ("link: 'http://www.example.com'\nname: 'example'", e2.c_str()); - } - - TEST(Location, YamlEncode) { - YAML::Node node; - - Location loc("http://www.example.com"); - node = loc; - EXPECT_EQ("http://www.example.com", node["link"].as()); - EXPECT_FALSE(node["name"]); - - loc = Location("http://www.example.com", "example"); - node = loc; - EXPECT_EQ("http://www.example.com", node["link"].as()); - EXPECT_EQ("example", node["name"].as()); - } - - TEST(Location, YamlDecode) { - YAML::Node node; - Location loc; - - node = YAML::Load("http://www.example.com"); - loc = node.as(); - EXPECT_EQ("http://www.example.com", loc.URL()); - EXPECT_EQ("", loc.Name()); - - node = YAML::Load("{link: http://www.example.com, name: example}"); - loc = node.as(); - EXPECT_EQ("http://www.example.com", loc.URL()); - EXPECT_EQ("example", loc.Name()); - - node = YAML::Load("[0, 1, 2]"); - EXPECT_ANY_THROW(node.as()); - } - } -} - -#endif diff --git a/src/tests/main.cpp b/src/tests/main.cpp index 9c03dfdf..7d4aab65 100644 --- a/src/tests/main.cpp +++ b/src/tests/main.cpp @@ -53,7 +53,7 @@ #include "backend/metadata/condition_grammar_test.h" #include "backend/metadata/conditional_metadata_test.h" #include "backend/metadata/file_test.h" -#include "backend/metadata/test_location.h" +#include "backend/metadata/location_test.h" #include "backend/metadata/test_message.h" #include "backend/metadata/test_message_content.h" #include "backend/metadata/test_plugin_dirty_info.h"