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:
@@ -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), []);
|
||||
Reference in New Issue
Block a user