diff --git a/sources/Core/Aliases/Tests/MockAliasSource.uc b/sources/Core/Aliases/Tests/MockAliasSource.uc new file mode 100644 index 0000000..d724501 --- /dev/null +++ b/sources/Core/Aliases/Tests/MockAliasSource.uc @@ -0,0 +1,27 @@ +/** + * Source intended for testing aliases. + * Copyright 2020 Anton Tarasenko + *------------------------------------------------------------------------------ + * This file is part of Acedia. + * + * Acedia 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, version 3 of the License, or + * (at your option) any later version. + * + * Acedia 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 Acedia. If not, see . + */ +class MockAliasSource extends AliasSource + config(AcediaAliases_Tests); + +defaultproperties +{ + configName = "AcediaAliases_Tests" + aliasesClass = class'MockAliases' +} \ No newline at end of file diff --git a/sources/Core/Aliases/Tests/MockAliases.uc b/sources/Core/Aliases/Tests/MockAliases.uc new file mode 100644 index 0000000..83eeef3 --- /dev/null +++ b/sources/Core/Aliases/Tests/MockAliases.uc @@ -0,0 +1,27 @@ +/** + * Per-object-configuration intended for testing aliases. + * Copyright 2020 Anton Tarasenko + *------------------------------------------------------------------------------ + * This file is part of Acedia. + * + * Acedia 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, version 3 of the License, or + * (at your option) any later version. + * + * Acedia 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 Acedia. If not, see . + */ +class MockAliases extends Aliases + perObjectConfig + config(AcediaAliases_Tests); + +defaultproperties +{ + sourceClass = class'MockAliasSource' +} \ No newline at end of file diff --git a/sources/Core/Aliases/Tests/TEST_Aliases.uc b/sources/Core/Aliases/Tests/TEST_Aliases.uc index 84c54ae..be51505 100644 --- a/sources/Core/Aliases/Tests/TEST_Aliases.uc +++ b/sources/Core/Aliases/Tests/TEST_Aliases.uc @@ -22,29 +22,109 @@ class TEST_Aliases extends TestCase protected static function TESTS() { - local string result; - Context("Testing Aliases loading."); - Issue("`Try` cannot resolve correct alias"); - TEST_ExpectTrue(_().alias.Try("test", "Ford") == "car"); - TEST_ExpectTrue(_().alias.Try("test", "Delorean") == "car"); - TEST_ExpectTrue(_().alias.Try("test", "HardToBeAGod") == "scifi"); - - Issue("`Resolve` cannot resolve correct alias"); - _().alias.Resolve("test", "Ford", result); - TEST_ExpectTrue(result == "car"); - _().alias.Resolve("test", "Audi", result); - TEST_ExpectTrue(result == "car"); - _().alias.Resolve("test", "Spice", result); - TEST_ExpectTrue(result == "scifi"); - - Issue("`Try` does not return original alias for non-existing alias record"); - TEST_ExpectTrue(_().alias.Try("test", "AllFiction") == "AllFiction"); - - Issue("`Resolve` reports success when it failed"); - TEST_ExpectFalse(_().alias.Resolve("test", "KarmicJustice", result)); - - Issue("`Resolve` reports failure when it succeeds"); - TEST_ExpectTrue(_().alias.Resolve("test", "Delorean", result)); + Test_AliasHash(); + Test_AliasLoading(); +} + +protected static function Test_AliasLoading() +{ + Context("Testing loading aliases from a mock object `MockAliasSource`."); + SubTest_AliasLoadingCorrect(); + SubTest_AliasLoadingIncorrect(); +} + +protected static function SubTest_AliasLoadingCorrect() +{ + local AliasSource source; + local string outValue; + + Issue("`Resolve()` fails to return alias that should be loaded."); + source = _().alias.GetCustomSource(class'MockAliasSource'); + TEST_ExpectTrue(source.Resolve("Global", outValue)); + TEST_ExpectTrue(outValue == "value"); + TEST_ExpectTrue(source.Resolve("ford", outValue)); + TEST_ExpectTrue(outValue == "car"); + + Issue("`Try()` fails to return alias that should be loaded."); + TEST_ExpectTrue(source.Try("question") == "response"); + TEST_ExpectTrue(source.Try("delorean") == "car"); + + Issue("`ContainsAlias()` reports alias, that should be present," + @ "as missing."); + TEST_ExpectTrue(source.ContainsAlias("Global")); + TEST_ExpectTrue(source.ContainsAlias("audi")); + + Issue("Aliases in per-object-configs incorrectly handle ':'."); + TEST_ExpectTrue(source.Try("HardToBeAGod") == "sci.fi"); + + Issue("Aliases with empty values in alias name or their value are handled" + @ "incorrectly."); + TEST_ExpectTrue(source.Try("") == "empty"); + TEST_ExpectTrue(source.Try("also") == ""); +} + +protected static function SubTest_AliasLoadingIncorrect() +{ + local AliasSource source; + local string outValue; + Context("Testing loading aliases from a mock object `MockAliasSource`."); + Issue("`AliasAPI` cannot return value custom source."); + source = _().alias.GetCustomSource(class'MockAliasSource'); + TEST_ExpectNotNone(source); + + Issue("`Resolve()` reports success of finding inexistent alias."); + source = _().alias.GetCustomSource(class'MockAliasSource'); + TEST_ExpectFalse(source.Resolve("noSuchThing", outValue)); + + Issue("`Try()` does not return given value for non-existent alias."); + TEST_ExpectTrue(source.Try("TheHellIsThis") == "TheHellIsThis"); + + Issue("`ContainsAlias()` reports inexistent alias as present."); + TEST_ExpectFalse(source.ContainsAlias("FordК")); +} + +protected static function Test_AliasHash() +{ + Context("Testing `AliasHasher`."); + SubTest_AliasHashInsertingRemoval(); +} + +protected static function SubTest_AliasHashInsertingRemoval() +{ + local AliasHash hasher; + local string outValue; + hasher = new class'AliasHash'; + hasher.Initialize(); + Issue("`AliasHash` cannot properly store added aliases."); + hasher.Insert("alias", "value").Insert("one", "more"); + TEST_ExpectTrue(hasher.Contains("alias")); + TEST_ExpectTrue(hasher.Contains("one")); + TEST_ExpectTrue(hasher.Find("alias", outValue)); + TEST_ExpectTrue(outValue == "value"); + TEST_ExpectTrue(hasher.Find("one", outValue)); + TEST_ExpectTrue(outValue == "more"); + + Issue("`AliasHash` reports hashing aliases that never were hashed."); + TEST_ExpectFalse(hasher.Contains("alia")); + + Issue("`AliasHash` cannot properly remove stored aliases."); + hasher.Remove("alias"); + TEST_ExpectFalse(hasher.Contains("alias")); + TEST_ExpectTrue(hasher.Contains("one")); + TEST_ExpectFalse(hasher.Find("alias", outValue)); + outValue = "wrong"; + TEST_ExpectTrue(hasher.Find("one", outValue)); + TEST_ExpectTrue(outValue == "more"); + + Issue("`InsertIfMissing()` function cannot properly store added aliases."); + TEST_ExpectTrue(hasher.InsertIfMissing("another", "var", outValue)); + TEST_ExpectTrue(hasher.Find("another", outValue)); + TEST_ExpectTrue(outValue == "var"); + + Issue("`InsertIfMissing()` function incorrectly resolves a conflict with" + @ "an existing value."); + TEST_ExpectFalse(hasher.InsertIfMissing("one", "something", outValue)); + TEST_ExpectTrue(outValue == "more"); } defaultproperties