1
0
forked from mirrors/0ad

Optimize GetIdentityClasses in Templates.js

Add unit tests.

Reviewed by: @bb
Differential Revision: https://code.wildfiregames.com/D2404
This was SVN commit r23660.
This commit is contained in:
Stan
2020-05-12 15:24:59 +00:00
parent b61b21afb7
commit c08016d950
2 changed files with 59 additions and 11 deletions
@@ -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;
}
@@ -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), []);