From c08016d950b319c55263cbac2edf902cda47697c Mon Sep 17 00:00:00 2001 From: Stan Date: Tue, 12 May 2020 15:24:59 +0000 Subject: [PATCH] Optimize GetIdentityClasses in Templates.js Add unit tests. Reviewed by: @bb Differential Revision: https://code.wildfiregames.com/D2404 This was SVN commit r23660. --- .../mods/public/globalscripts/Templates.js | 22 ++++----- .../globalscripts/tests/test_Template.js | 48 +++++++++++++++++++ 2 files changed, 59 insertions(+), 11 deletions(-) create mode 100755 binaries/data/mods/public/globalscripts/tests/test_Template.js diff --git a/binaries/data/mods/public/globalscripts/Templates.js b/binaries/data/mods/public/globalscripts/Templates.js index 7697426c90..02c7984fd0 100644 --- a/binaries/data/mods/public/globalscripts/Templates.js +++ b/binaries/data/mods/public/globalscripts/Templates.js @@ -28,20 +28,22 @@ function loadCivFiles(selectableOnly) } /** - * Gets an array of all classes for this identity template + * @return {string[]} - All the classes for this identity template. */ function GetIdentityClasses(template) { - var classList = []; + let classString = ""; + if (template.Classes && template.Classes._string) - classList = classList.concat(template.Classes._string.split(/\s+/)); + classString += " " + template.Classes._string; if (template.VisibleClasses && template.VisibleClasses._string) - classList = classList.concat(template.VisibleClasses._string.split(/\s+/)); + classString += " " + template.VisibleClasses._string; if (template.Rank) - classList = classList.concat(template.Rank); - return classList; + classString += " " + template.Rank; + + return classString.length > 1 ? classString.substring(1).split(" ") : []; } /** @@ -50,9 +52,7 @@ function GetIdentityClasses(template) */ function GetVisibleIdentityClasses(template) { - if (template.VisibleClasses && template.VisibleClasses._string) - return template.VisibleClasses._string.split(/\s+/); - return []; + return template.VisibleClasses && template.VisibleClasses._string ? template.VisibleClasses._string.split(" ") : []; } /** @@ -87,8 +87,8 @@ function MatchesClassList(classes, match) // If the elements are still strings, split them by space or by '+' if (typeof sublist == "string") sublist = sublist.split(/[+\s]+/); - if (sublist.every(c => (c[0] == "!" && classes.indexOf(c.substr(1)) == -1) - || (c[0] != "!" && classes.indexOf(c) != -1))) + if (sublist.every(c => (c[0] == "!" && classes.indexOf(c.substr(1)) == -1) || + (c[0] != "!" && classes.indexOf(c) != -1))) return true; } diff --git a/binaries/data/mods/public/globalscripts/tests/test_Template.js b/binaries/data/mods/public/globalscripts/tests/test_Template.js new file mode 100755 index 0000000000..0dca01ec9b --- /dev/null +++ b/binaries/data/mods/public/globalscripts/tests/test_Template.js @@ -0,0 +1,48 @@ +let identityTemplate = { + "Classes": { "@datatype": "tokens", "_string": "b a" }, + "VisibleClasses": { "@datatype": "tokens", "_string": "c ß" } +}; + +TS_ASSERT_UNEVAL_EQUALS(GetIdentityClasses(identityTemplate), ["b", "a", "c", "ß"]); +TS_ASSERT_UNEVAL_EQUALS(GetVisibleIdentityClasses(identityTemplate), ["c", "ß"]); + +identityTemplate = { + "Classes": { "@datatype": "tokens", "_string": "" }, + "VisibleClasses": { "@datatype": "tokens", "_string": "c ß" } +}; + +TS_ASSERT_UNEVAL_EQUALS(GetIdentityClasses(identityTemplate), ["c", "ß"]); +TS_ASSERT_UNEVAL_EQUALS(GetVisibleIdentityClasses(identityTemplate), ["c", "ß"]); + +identityTemplate = { + "Classes": { "@datatype": "tokens", "_string": "classA" }, + "VisibleClasses": { "@datatype": "tokens", "_string": "classC classF" }, + "Rank": "testRank" +}; + +TS_ASSERT_UNEVAL_EQUALS(GetIdentityClasses(identityTemplate), ["classA", "classC", "classF", "testRank"]); +TS_ASSERT_UNEVAL_EQUALS(GetVisibleIdentityClasses(identityTemplate), ["classC", "classF"]); + +identityTemplate = { +}; + +TS_ASSERT_UNEVAL_EQUALS(GetIdentityClasses(identityTemplate), []); +TS_ASSERT_UNEVAL_EQUALS(GetVisibleIdentityClasses(identityTemplate), []); + +identityTemplate = { + "Classes": { "@datatype": "tokens", "_string": "" }, + "VisibleClasses": { "@datatype": "tokens", "_string": "" }, + "Rank": "" +}; + +TS_ASSERT_UNEVAL_EQUALS(GetIdentityClasses(identityTemplate), []); +TS_ASSERT_UNEVAL_EQUALS(GetVisibleIdentityClasses(identityTemplate), []); + +identityTemplate = { + "Classes": {}, + "VisibleClasses": {}, + "Rank": "" +}; + +TS_ASSERT_UNEVAL_EQUALS(GetIdentityClasses(identityTemplate), []); +TS_ASSERT_UNEVAL_EQUALS(GetVisibleIdentityClasses(identityTemplate), []);