Page MenuHomeWildfire Games

Add test to validate that selectAnimation is reset properly
AbandonedPublic

Authored by wraitii on May 13 2018, 11:11 AM.

Details

Reviewers
None
Group Reviewers
Restricted Owners Package(Owns No Changed Paths)
Summary

UnitAI uses SelectAnimation to define a custom animation, such as attack anime or gathering animations.
This must be reset when leaving the FSM state to "idle", otherwise we can end up in incorrect states.

This test is a little unorthodox since it runs on unevaled code, but it's rather efficient.


I have a hunch svn doesn't pass this, I've coded it for D13 where I fix these but splitting that diff has been a little annoying so haven't done it yet.

Test Plan

Review test.

Diff Detail

Repository
rP 0 A.D. Public Repository
Branch
D13_UM_rewrite_core
Lint
Lint OK
Unit
No Unit Test Coverage
Build Status
Buildable 6049
Build 10078: Vulcan BuildJenkins
Build 10077: arc lint + arc unit

Unit TestsFailed

TimeTest
0 msJenkins > cxxtest_debug.xml::Unknown Unit Message ("")
Failed to read test report file /mnt/data/jenkins-phabricator/workspace/differential/cxxtest_debug.xml org.dom4j.DocumentException: Error on line 1 of document : Content is not allowed in prolog. Nested exception: Content is not allowed in prolog. at org.dom4j.io.SAXReader.read(SAXReader.java:482)
0 msJenkins > TestAllocators::Unknown Unit Message ("")
0 msJenkins > TestAtlasObjectXML::Unknown Unit Message ("")
0 msJenkins > TestAtlasObjectXML::Unknown Unit Message ("")
0 msJenkins > TestAtlasObjectXML::Unknown Unit Message ("")
View Full Test Results (1 Failed · 315 Passed)

Event Timeline

wraitii created this revision.May 13 2018, 11:11 AM
wraitii added a reviewer: Restricted Owners Package.

Meant to also test that there actually is a "SelectAnimation" function, in case we ever rename it, but I forgot.

Vulcan added a subscriber: Vulcan.May 13 2018, 11:32 AM

Build failure - The Moirai have given mortals hearts that can endure.

Linter detected issues:
Executing section Default...
Executing section Source...
Executing section JS...
|    | [NORMAL] ESLintBear (new-parens):
|    | Missing '()' invoking a constructor.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/tests/test_setup.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/tests/test_setup.js
|   8|   8| function fail(msg)
|   9|   9| {
|  10|  10| 	// Get a list of callers
|  11|    |-	let trace = (new Error).stack.split("\n");
|    |  11|+	let trace = (new Error()).stack.split("\n");
|  12|  12| 	// Remove the Error ctor and this function from the stack
|  13|  13| 	trace = trace.splice(2);
|  14|  14| 	trace = "Stack trace:\n" + trace.join("\n");
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/tests/test_setup.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/tests/test_setup.js
|  18|  18| global.TS_FAIL = function TS_FAIL(msg)
|  19|  19| {
|  20|  20| 	fail(msg);
|  21|    |-}
|    |  21|+};
|  22|  22| 
|  23|  23| global.TS_ASSERT = function TS_ASSERT(e, msg = "Assert failed")
|  24|  24| {
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/tests/test_setup.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/tests/test_setup.js
|  24|  24| {
|  25|  25| 	if (!e)
|  26|  26| 		fail(msg);
|  27|    |-}
|    |  27|+};
|  28|  28| 
|  29|  29| global.TS_ASSERT_EQUALS = function TS_ASSERT_EQUALS(x, y)
|  30|  30| {
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/tests/test_setup.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/tests/test_setup.js
|  30|  30| {
|  31|  31| 	if (!(x === y))
|  32|  32| 		fail("Expected equal, got "+uneval(x)+" !== "+uneval(y));
|  33|    |-}
|    |  33|+};
|  34|  34| 
|  35|  35| global.TS_ASSERT_EQUALS_APPROX = function TS_ASSERT_EQUALS_APPROX(x, y, maxDifference)
|  36|  36| {
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/tests/test_setup.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/tests/test_setup.js
|  38|  38| 
|  39|  39| 	if (Math.abs(x - y) > maxDifference)
|  40|  40| 		fail("Expected almost equal, got " + uneval(x) + " !== " + uneval(y));
|  41|    |-}
|    |  41|+};
|  42|  42| 
|  43|  43| global.TS_ASSERT_UNEVAL_EQUALS = function TS_ASSERT_UNEVAL_EQUALS(x, y)
|  44|  44| {
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/tests/test_setup.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/tests/test_setup.js
|  44|  44| {
|  45|  45| 	if (!(uneval(x) === uneval(y)))
|  46|  46| 		fail("Expected equal, got "+uneval(x)+" !== "+uneval(y));
|  47|    |-}
|    |  47|+};
|  48|  48| 
|  49|  49| global.TS_ASSERT_EXCEPTION = function(func)
|  50|  50| {
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/tests/test_setup.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/tests/test_setup.js
|  53|  53| 		Engine.TS_FAIL("Missed exception at:\n" + new Error().stack);
|  54|  54| 	} catch (e) {
|  55|  55| 	}
|  56|    |-}
|    |  56|+};
|  57|  57| 
|  58|  58| global.TS_ASSERT_NUMBER = function(value)
|  59|  59| {
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/tests/test_setup.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/tests/test_setup.js
|  59|  59| {
|  60|  60| 	if (typeof value != "number" || !isFinite(value))
|  61|  61| 		fail("The given value must be a real number!");
|  62|    |-}
|    |  62|+};

binaries/data/tests/test_setup.js
|  54| »   }·catch·(e)·{
|    | [NORMAL] ESLintBear (no-empty):
|    | Empty block statement.

binaries/data/tests/test_setup.js
|  11| »   let·trace·=·(new·Error).stack.split("\n");
|    | [NORMAL] JSHintBear:
|    | Missing '()' invoking a constructor.

binaries/data/tests/test_setup.js
|  21| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/tests/test_setup.js
|  27| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/tests/test_setup.js
|  31| »   if·(!(x·===·y))
|    | [NORMAL] JSHintBear:
|    | Confusing use of '!'.

binaries/data/tests/test_setup.js
|  33| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/tests/test_setup.js
|  41| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/tests/test_setup.js
|  45| »   if·(!(uneval(x)·===·uneval(y)))
|    | [NORMAL] JSHintBear:
|    | Confusing use of '!'.

binaries/data/tests/test_setup.js
|  47| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/tests/test_setup.js
|  56| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/tests/test_setup.js
|  62| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'SetInterval' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  34|  34| 
|  35|  35| 
|  36|  36| 	AddMock(SYSTEM_ENTITY, IID_Timer, {
|  37|    |-		SetInterval: function() { },
|    |  37|+		"SetInterval": function() { },
|  38|  38| 		SetTimeout: function() { },
|  39|  39| 	});
|  40|  40| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'SetTimeout' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  35|  35| 
|  36|  36| 	AddMock(SYSTEM_ENTITY, IID_Timer, {
|  37|  37| 		SetInterval: function() { },
|  38|    |-		SetTimeout: function() { },
|    |  38|+		"SetTimeout": function() { },
|  39|  39| 	});
|  40|  40| 
|  41|  41| 	AddMock(SYSTEM_ENTITY, IID_RangeManager, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'CreateActiveQuery' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  39|  39| 	});
|  40|  40| 
|  41|  41| 	AddMock(SYSTEM_ENTITY, IID_RangeManager, {
|  42|    |-		CreateActiveQuery: function(ent, minRange, maxRange, players, iid, flags) {
|    |  42|+		"CreateActiveQuery": function(ent, minRange, maxRange, players, iid, flags) {
|  43|  43| 			return 1;
|  44|  44| 		},
|  45|  45| 		EnableActiveQuery: function(id) { },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'EnableActiveQuery' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  42|  42| 		CreateActiveQuery: function(ent, minRange, maxRange, players, iid, flags) {
|  43|  43| 			return 1;
|  44|  44| 		},
|  45|    |-		EnableActiveQuery: function(id) { },
|    |  45|+		"EnableActiveQuery": function(id) { },
|  46|  46| 		ResetActiveQuery: function(id) { if (mode == 0) return []; else return [enemy]; },
|  47|  47| 		DisableActiveQuery: function(id) { },
|  48|  48| 		GetEntityFlagMask: function(identifier) { },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'ResetActiveQuery' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  43|  43| 			return 1;
|  44|  44| 		},
|  45|  45| 		EnableActiveQuery: function(id) { },
|  46|    |-		ResetActiveQuery: function(id) { if (mode == 0) return []; else return [enemy]; },
|    |  46|+		"ResetActiveQuery": function(id) { if (mode == 0) return []; else return [enemy]; },
|  47|  47| 		DisableActiveQuery: function(id) { },
|  48|  48| 		GetEntityFlagMask: function(identifier) { },
|  49|  49| 	});
|    | [NORMAL] ESLintBear (no-else-return):
|    | Unnecessary 'else' after 'return'.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  43|  43| 			return 1;
|  44|  44| 		},
|  45|  45| 		EnableActiveQuery: function(id) { },
|  46|    |-		ResetActiveQuery: function(id) { if (mode == 0) return []; else return [enemy]; },
|    |  46|+		ResetActiveQuery: function(id) { if (mode == 0) return []; return [enemy]; },
|  47|  47| 		DisableActiveQuery: function(id) { },
|  48|  48| 		GetEntityFlagMask: function(identifier) { },
|  49|  49| 	});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'DisableActiveQuery' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  44|  44| 		},
|  45|  45| 		EnableActiveQuery: function(id) { },
|  46|  46| 		ResetActiveQuery: function(id) { if (mode == 0) return []; else return [enemy]; },
|  47|    |-		DisableActiveQuery: function(id) { },
|    |  47|+		"DisableActiveQuery": function(id) { },
|  48|  48| 		GetEntityFlagMask: function(identifier) { },
|  49|  49| 	});
|  50|  50| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetEntityFlagMask' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  45|  45| 		EnableActiveQuery: function(id) { },
|  46|  46| 		ResetActiveQuery: function(id) { if (mode == 0) return []; else return [enemy]; },
|  47|  47| 		DisableActiveQuery: function(id) { },
|  48|    |-		GetEntityFlagMask: function(identifier) { },
|    |  48|+		"GetEntityFlagMask": function(identifier) { },
|  49|  49| 	});
|  50|  50| 
|  51|  51| 	AddMock(SYSTEM_ENTITY, IID_TemplateManager, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetCurrentTemplateName' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  49|  49| 	});
|  50|  50| 
|  51|  51| 	AddMock(SYSTEM_ENTITY, IID_TemplateManager, {
|  52|    |-		GetCurrentTemplateName: function(ent) { return "special/formations/line_closed"; },
|    |  52|+		"GetCurrentTemplateName": function(ent) { return "special/formations/line_closed"; },
|  53|  53| 	});
|  54|  54| 
|  55|  55| 	AddMock(SYSTEM_ENTITY, IID_PlayerManager, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPlayerByID' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  53|  53| 	});
|  54|  54| 
|  55|  55| 	AddMock(SYSTEM_ENTITY, IID_PlayerManager, {
|  56|    |-		GetPlayerByID: function(id) { return playerEntity; },
|    |  56|+		"GetPlayerByID": function(id) { return playerEntity; },
|  57|  57| 		GetNumPlayers: function() { return 2; },
|  58|  58| 	});
|  59|  59| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetNumPlayers' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  54|  54| 
|  55|  55| 	AddMock(SYSTEM_ENTITY, IID_PlayerManager, {
|  56|  56| 		GetPlayerByID: function(id) { return playerEntity; },
|  57|    |-		GetNumPlayers: function() { return 2; },
|    |  57|+		"GetNumPlayers": function() { return 2; },
|  58|  58| 	});
|  59|  59| 
|  60|  60| 	AddMock(playerEntity, IID_Player, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsAlly' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  58|  58| 	});
|  59|  59| 
|  60|  60| 	AddMock(playerEntity, IID_Player, {
|  61|    |-		IsAlly: function() { return false; },
|    |  61|+		"IsAlly": function() { return false; },
|  62|  62| 		IsEnemy: function() { return true; },
|  63|  63| 		GetEnemies: function() { return []; },
|  64|  64| 	});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsEnemy' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  59|  59| 
|  60|  60| 	AddMock(playerEntity, IID_Player, {
|  61|  61| 		IsAlly: function() { return false; },
|  62|    |-		IsEnemy: function() { return true; },
|    |  62|+		"IsEnemy": function() { return true; },
|  63|  63| 		GetEnemies: function() { return []; },
|  64|  64| 	});
|  65|  65| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetEnemies' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  60|  60| 	AddMock(playerEntity, IID_Player, {
|  61|  61| 		IsAlly: function() { return false; },
|  62|  62| 		IsEnemy: function() { return true; },
|  63|    |-		GetEnemies: function() { return []; },
|    |  63|+		"GetEnemies": function() { return []; },
|  64|  64| 	});
|  65|  65| 
|  66|  66| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetClassesList' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  67|  67| 	var unitAI = ConstructComponent(unit, "UnitAI", { "FormationController": "false", "DefaultStance": "aggressive" });
|  68|  68| 
|  69|  69| 	AddMock(unit, IID_Identity, {
|  70|    |-		GetClassesList: function() { return []; },
|    |  70|+		"GetClassesList": function() { return []; },
|  71|  71| 	});
|  72|  72| 
|  73|  73| 	AddMock(unit, IID_Ownership, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetOwner' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  71|  71| 	});
|  72|  72| 
|  73|  73| 	AddMock(unit, IID_Ownership, {
|  74|    |-		GetOwner: function() { return 1; },
|    |  74|+		"GetOwner": function() { return 1; },
|  75|  75| 	});
|  76|  76| 
|  77|  77| 	AddMock(unit, IID_Position, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetTurretParent' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  75|  75| 	});
|  76|  76| 
|  77|  77| 	AddMock(unit, IID_Position, {
|  78|    |-		GetTurretParent: function() { return INVALID_ENTITY; },
|    |  78|+		"GetTurretParent": function() { return INVALID_ENTITY; },
|  79|  79| 		GetPosition: function() { return new Vector3D(); },
|  80|  80| 		GetPosition2D: function() { return new Vector2D(); },
|  81|  81| 		GetRotation: function() { return { "y": 0 }; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPosition' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  76|  76| 
|  77|  77| 	AddMock(unit, IID_Position, {
|  78|  78| 		GetTurretParent: function() { return INVALID_ENTITY; },
|  79|    |-		GetPosition: function() { return new Vector3D(); },
|    |  79|+		"GetPosition": function() { return new Vector3D(); },
|  80|  80| 		GetPosition2D: function() { return new Vector2D(); },
|  81|  81| 		GetRotation: function() { return { "y": 0 }; },
|  82|  82| 		IsInWorld: function() { return true; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPosition2D' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  77|  77| 	AddMock(unit, IID_Position, {
|  78|  78| 		GetTurretParent: function() { return INVALID_ENTITY; },
|  79|  79| 		GetPosition: function() { return new Vector3D(); },
|  80|    |-		GetPosition2D: function() { return new Vector2D(); },
|    |  80|+		"GetPosition2D": function() { return new Vector2D(); },
|  81|  81| 		GetRotation: function() { return { "y": 0 }; },
|  82|  82| 		IsInWorld: function() { return true; },
|  83|  83| 	});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetRotation' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  78|  78| 		GetTurretParent: function() { return INVALID_ENTITY; },
|  79|  79| 		GetPosition: function() { return new Vector3D(); },
|  80|  80| 		GetPosition2D: function() { return new Vector2D(); },
|  81|    |-		GetRotation: function() { return { "y": 0 }; },
|    |  81|+		"GetRotation": function() { return { "y": 0 }; },
|  82|  82| 		IsInWorld: function() { return true; },
|  83|  83| 	});
|  84|  84| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsInWorld' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  79|  79| 		GetPosition: function() { return new Vector3D(); },
|  80|  80| 		GetPosition2D: function() { return new Vector2D(); },
|  81|  81| 		GetRotation: function() { return { "y": 0 }; },
|  82|    |-		IsInWorld: function() { return true; },
|    |  82|+		"IsInWorld": function() { return true; },
|  83|  83| 	});
|  84|  84| 
|  85|  85| 	AddMock(unit, IID_UnitMotion, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetWalkSpeed' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  83|  83| 	});
|  84|  84| 
|  85|  85| 	AddMock(unit, IID_UnitMotion, {
|  86|    |-		GetWalkSpeed: function() { return 1; },
|    |  86|+		"GetWalkSpeed": function() { return 1; },
|  87|  87| 		MoveToFormationOffset: function(target, x, z) { },
|  88|  88| 		IsInTargetRange: function(target, min, max) { return true; },
|  89|  89| 		MoveToTargetRange: function(target, min, max) { },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'MoveToFormationOffset' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  84|  84| 
|  85|  85| 	AddMock(unit, IID_UnitMotion, {
|  86|  86| 		GetWalkSpeed: function() { return 1; },
|  87|    |-		MoveToFormationOffset: function(target, x, z) { },
|    |  87|+		"MoveToFormationOffset": function(target, x, z) { },
|  88|  88| 		IsInTargetRange: function(target, min, max) { return true; },
|  89|  89| 		MoveToTargetRange: function(target, min, max) { },
|  90|  90| 		StopMoving: function() { },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsInTargetRange' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  85|  85| 	AddMock(unit, IID_UnitMotion, {
|  86|  86| 		GetWalkSpeed: function() { return 1; },
|  87|  87| 		MoveToFormationOffset: function(target, x, z) { },
|  88|    |-		IsInTargetRange: function(target, min, max) { return true; },
|    |  88|+		"IsInTargetRange": function(target, min, max) { return true; },
|  89|  89| 		MoveToTargetRange: function(target, min, max) { },
|  90|  90| 		StopMoving: function() { },
|  91|  91| 		GetPassabilityClassName: function() { return "default"; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'MoveToTargetRange' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  86|  86| 		GetWalkSpeed: function() { return 1; },
|  87|  87| 		MoveToFormationOffset: function(target, x, z) { },
|  88|  88| 		IsInTargetRange: function(target, min, max) { return true; },
|  89|    |-		MoveToTargetRange: function(target, min, max) { },
|    |  89|+		"MoveToTargetRange": function(target, min, max) { },
|  90|  90| 		StopMoving: function() { },
|  91|  91| 		GetPassabilityClassName: function() { return "default"; },
|  92|  92| 	});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'StopMoving' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  87|  87| 		MoveToFormationOffset: function(target, x, z) { },
|  88|  88| 		IsInTargetRange: function(target, min, max) { return true; },
|  89|  89| 		MoveToTargetRange: function(target, min, max) { },
|  90|    |-		StopMoving: function() { },
|    |  90|+		"StopMoving": function() { },
|  91|  91| 		GetPassabilityClassName: function() { return "default"; },
|  92|  92| 	});
|  93|  93| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPassabilityClassName' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  88|  88| 		IsInTargetRange: function(target, min, max) { return true; },
|  89|  89| 		MoveToTargetRange: function(target, min, max) { },
|  90|  90| 		StopMoving: function() { },
|  91|    |-		GetPassabilityClassName: function() { return "default"; },
|    |  91|+		"GetPassabilityClassName": function() { return "default"; },
|  92|  92| 	});
|  93|  93| 
|  94|  94| 	AddMock(unit, IID_Vision, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetRange' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  92|  92| 	});
|  93|  93| 
|  94|  94| 	AddMock(unit, IID_Vision, {
|  95|    |-		GetRange: function() { return 10; },
|    |  95|+		"GetRange": function() { return 10; },
|  96|  96| 	});
|  97|  97| 
|  98|  98| 	AddMock(unit, IID_Attack, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetRange' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  96|  96| 	});
|  97|  97| 
|  98|  98| 	AddMock(unit, IID_Attack, {
|  99|    |-		GetRange: function() { return { "max": 10, "min": 0}; },
|    |  99|+		"GetRange": function() { return { "max": 10, "min": 0}; },
| 100| 100| 		GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 101| 101| 		GetBestAttackAgainst: function(t) { return "melee"; },
| 102| 102| 		GetPreference: function(t) { return 0; },
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  96|  96| 	});
|  97|  97| 
|  98|  98| 	AddMock(unit, IID_Attack, {
|  99|    |-		GetRange: function() { return { "max": 10, "min": 0}; },
|    |  99|+		GetRange: function() { return { "max": 10, "min": 0 }; },
| 100| 100| 		GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 101| 101| 		GetBestAttackAgainst: function(t) { return "melee"; },
| 102| 102| 		GetPreference: function(t) { return 0; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetFullAttackRange' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  97|  97| 
|  98|  98| 	AddMock(unit, IID_Attack, {
|  99|  99| 		GetRange: function() { return { "max": 10, "min": 0}; },
| 100|    |-		GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
|    | 100|+		"GetFullAttackRange": function() { return { "max": 40, "min": 0}; },
| 101| 101| 		GetBestAttackAgainst: function(t) { return "melee"; },
| 102| 102| 		GetPreference: function(t) { return 0; },
| 103| 103| 		GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  97|  97| 
|  98|  98| 	AddMock(unit, IID_Attack, {
|  99|  99| 		GetRange: function() { return { "max": 10, "min": 0}; },
| 100|    |-		GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
|    | 100|+		GetFullAttackRange: function() { return { "max": 40, "min": 0 }; },
| 101| 101| 		GetBestAttackAgainst: function(t) { return "melee"; },
| 102| 102| 		GetPreference: function(t) { return 0; },
| 103| 103| 		GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetBestAttackAgainst' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  98|  98| 	AddMock(unit, IID_Attack, {
|  99|  99| 		GetRange: function() { return { "max": 10, "min": 0}; },
| 100| 100| 		GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 101|    |-		GetBestAttackAgainst: function(t) { return "melee"; },
|    | 101|+		"GetBestAttackAgainst": function(t) { return "melee"; },
| 102| 102| 		GetPreference: function(t) { return 0; },
| 103| 103| 		GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
| 104| 104| 		CanAttack: function(v) { return true; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPreference' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  99|  99| 		GetRange: function() { return { "max": 10, "min": 0}; },
| 100| 100| 		GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 101| 101| 		GetBestAttackAgainst: function(t) { return "melee"; },
| 102|    |-		GetPreference: function(t) { return 0; },
|    | 102|+		"GetPreference": function(t) { return 0; },
| 103| 103| 		GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
| 104| 104| 		CanAttack: function(v) { return true; },
| 105| 105| 		CompareEntitiesByPreference: function(a, b) { return 0; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetTimers' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 100| 100| 		GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 101| 101| 		GetBestAttackAgainst: function(t) { return "melee"; },
| 102| 102| 		GetPreference: function(t) { return 0; },
| 103|    |-		GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
|    | 103|+		"GetTimers": function() { return { "prepare": 500, "repeat": 1000 }; },
| 104| 104| 		CanAttack: function(v) { return true; },
| 105| 105| 		CompareEntitiesByPreference: function(a, b) { return 0; },
| 106| 106| 	});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'CanAttack' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 101| 101| 		GetBestAttackAgainst: function(t) { return "melee"; },
| 102| 102| 		GetPreference: function(t) { return 0; },
| 103| 103| 		GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
| 104|    |-		CanAttack: function(v) { return true; },
|    | 104|+		"CanAttack": function(v) { return true; },
| 105| 105| 		CompareEntitiesByPreference: function(a, b) { return 0; },
| 106| 106| 	});
| 107| 107| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'CompareEntitiesByPreference' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 102| 102| 		GetPreference: function(t) { return 0; },
| 103| 103| 		GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
| 104| 104| 		CanAttack: function(v) { return true; },
| 105|    |-		CompareEntitiesByPreference: function(a, b) { return 0; },
|    | 105|+		"CompareEntitiesByPreference": function(a, b) { return 0; },
| 106| 106| 	});
| 107| 107| 
| 108| 108| 	unitAI.OnCreate();
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetHitpoints' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 113| 113| 	if (mode == 1)
| 114| 114| 	{
| 115| 115| 		AddMock(enemy, IID_Health, {
| 116|    |-			GetHitpoints: function() { return 10; },
|    | 116|+			"GetHitpoints": function() { return 10; },
| 117| 117| 		});
| 118| 118| 		AddMock(enemy, IID_UnitAI, {
| 119| 119| 			IsAnimal: function() { return false; }
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsAnimal' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 116| 116| 			GetHitpoints: function() { return 10; },
| 117| 117| 		});
| 118| 118| 		AddMock(enemy, IID_UnitAI, {
| 119|    |-			IsAnimal: function() { return false; }
|    | 119|+			"IsAnimal": function() { return false; }
| 120| 120| 		});
| 121| 121| 	}
| 122| 122| 	else if (mode == 2)
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetHitpoints' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 121| 121| 	}
| 122| 122| 	else if (mode == 2)
| 123| 123| 		AddMock(enemy, IID_Health, {
| 124|    |-			GetHitpoints: function() { return 0; },
|    | 124|+			"GetHitpoints": function() { return 0; },
| 125| 125| 		});
| 126| 126| 
| 127| 127| 	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 124| 124| 			GetHitpoints: function() { return 0; },
| 125| 125| 		});
| 126| 126| 
| 127|    |-	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
|    | 127|+	var controllerFormation = ConstructComponent(controller, "Formation", { "FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
| 128| 128| 	var controllerAI = ConstructComponent(controller, "UnitAI", { "FormationController": "true", "DefaultStance": "aggressive" });
| 129| 129| 
| 130| 130| 	AddMock(controller, IID_Position, {
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 124| 124| 			GetHitpoints: function() { return 0; },
| 125| 125| 		});
| 126| 126| 
| 127|    |-	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
|    | 127|+	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0 });
| 128| 128| 	var controllerAI = ConstructComponent(controller, "UnitAI", { "FormationController": "true", "DefaultStance": "aggressive" });
| 129| 129| 
| 130| 130| 	AddMock(controller, IID_Position, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'JumpTo' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 128| 128| 	var controllerAI = ConstructComponent(controller, "UnitAI", { "FormationController": "true", "DefaultStance": "aggressive" });
| 129| 129| 
| 130| 130| 	AddMock(controller, IID_Position, {
| 131|    |-		JumpTo: function(x, z) { this.x = x; this.z = z; },
|    | 131|+		"JumpTo": function(x, z) { this.x = x; this.z = z; },
| 132| 132| 		GetTurretParent: function() { return INVALID_ENTITY; },
| 133| 133| 		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
| 134| 134| 		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetTurretParent' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 129| 129| 
| 130| 130| 	AddMock(controller, IID_Position, {
| 131| 131| 		JumpTo: function(x, z) { this.x = x; this.z = z; },
| 132|    |-		GetTurretParent: function() { return INVALID_ENTITY; },
|    | 132|+		"GetTurretParent": function() { return INVALID_ENTITY; },
| 133| 133| 		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
| 134| 134| 		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
| 135| 135| 		GetRotation: function() { return { "y": 0 }; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPosition' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 130| 130| 	AddMock(controller, IID_Position, {
| 131| 131| 		JumpTo: function(x, z) { this.x = x; this.z = z; },
| 132| 132| 		GetTurretParent: function() { return INVALID_ENTITY; },
| 133|    |-		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
|    | 133|+		"GetPosition": function() { return new Vector3D(this.x, 0, this.z); },
| 134| 134| 		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
| 135| 135| 		GetRotation: function() { return { "y": 0 }; },
| 136| 136| 		IsInWorld: function() { return true; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPosition2D' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 131| 131| 		JumpTo: function(x, z) { this.x = x; this.z = z; },
| 132| 132| 		GetTurretParent: function() { return INVALID_ENTITY; },
| 133| 133| 		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
| 134|    |-		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
|    | 134|+		"GetPosition2D": function() { return new Vector2D(this.x, this.z); },
| 135| 135| 		GetRotation: function() { return { "y": 0 }; },
| 136| 136| 		IsInWorld: function() { return true; },
| 137| 137| 	});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetRotation' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 132| 132| 		GetTurretParent: function() { return INVALID_ENTITY; },
| 133| 133| 		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
| 134| 134| 		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
| 135|    |-		GetRotation: function() { return { "y": 0 }; },
|    | 135|+		"GetRotation": function() { return { "y": 0 }; },
| 136| 136| 		IsInWorld: function() { return true; },
| 137| 137| 	});
| 138| 138| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsInWorld' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 133| 133| 		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
| 134| 134| 		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
| 135| 135| 		GetRotation: function() { return { "y": 0 }; },
| 136|    |-		IsInWorld: function() { return true; },
|    | 136|+		"IsInWorld": function() { return true; },
| 137| 137| 	});
| 138| 138| 
| 139| 139| 	AddMock(controller, IID_UnitMotion, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'SetSpeed' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 137| 137| 	});
| 138| 138| 
| 139| 139| 	AddMock(controller, IID_UnitMotion, {
| 140|    |-		SetSpeed: function(speed) { },
|    | 140|+		"SetSpeed": function(speed) { },
| 141| 141| 		MoveToPointRange: function(x, z, minRange, maxRange) { },
| 142| 142| 		GetPassabilityClassName: function() { return "default"; },
| 143| 143| 	});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'MoveToPointRange' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 138| 138| 
| 139| 139| 	AddMock(controller, IID_UnitMotion, {
| 140| 140| 		SetSpeed: function(speed) { },
| 141|    |-		MoveToPointRange: function(x, z, minRange, maxRange) { },
|    | 141|+		"MoveToPointRange": function(x, z, minRange, maxRange) { },
| 142| 142| 		GetPassabilityClassName: function() { return "default"; },
| 143| 143| 	});
| 144| 144| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPassabilityClassName' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 139| 139| 	AddMock(controller, IID_UnitMotion, {
| 140| 140| 		SetSpeed: function(speed) { },
| 141| 141| 		MoveToPointRange: function(x, z, minRange, maxRange) { },
| 142|    |-		GetPassabilityClassName: function() { return "default"; },
|    | 142|+		"GetPassabilityClassName": function() { return "default"; },
| 143| 143| 	});
| 144| 144| 
| 145| 145| 	controllerAI.OnCreate();
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'SetInterval' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 180| 180| 	var unitAIs = [];
| 181| 181| 
| 182| 182| 	AddMock(SYSTEM_ENTITY, IID_Timer, {
| 183|    |-		SetInterval: function() { },
|    | 183|+		"SetInterval": function() { },
| 184| 184| 		SetTimeout: function() { },
| 185| 185| 	});
| 186| 186| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'SetTimeout' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 181| 181| 
| 182| 182| 	AddMock(SYSTEM_ENTITY, IID_Timer, {
| 183| 183| 		SetInterval: function() { },
| 184|    |-		SetTimeout: function() { },
|    | 184|+		"SetTimeout": function() { },
| 185| 185| 	});
| 186| 186| 
| 187| 187| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'CreateActiveQuery' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 186| 186| 
| 187| 187| 
| 188| 188| 	AddMock(SYSTEM_ENTITY, IID_RangeManager, {
| 189|    |-		CreateActiveQuery: function(ent, minRange, maxRange, players, iid, flags) {
|    | 189|+		"CreateActiveQuery": function(ent, minRange, maxRange, players, iid, flags) {
| 190| 190| 			return 1;
| 191| 191| 		},
| 192| 192| 		EnableActiveQuery: function(id) { },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'EnableActiveQuery' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 189| 189| 		CreateActiveQuery: function(ent, minRange, maxRange, players, iid, flags) {
| 190| 190| 			return 1;
| 191| 191| 		},
| 192|    |-		EnableActiveQuery: function(id) { },
|    | 192|+		"EnableActiveQuery": function(id) { },
| 193| 193| 		ResetActiveQuery: function(id) { return [enemy]; },
| 194| 194| 		DisableActiveQuery: function(id) { },
| 195| 195| 		GetEntityFlagMask: function(identifier) { },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'ResetActiveQuery' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 190| 190| 			return 1;
| 191| 191| 		},
| 192| 192| 		EnableActiveQuery: function(id) { },
| 193|    |-		ResetActiveQuery: function(id) { return [enemy]; },
|    | 193|+		"ResetActiveQuery": function(id) { return [enemy]; },
| 194| 194| 		DisableActiveQuery: function(id) { },
| 195| 195| 		GetEntityFlagMask: function(identifier) { },
| 196| 196| 	});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'DisableActiveQuery' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 191| 191| 		},
| 192| 192| 		EnableActiveQuery: function(id) { },
| 193| 193| 		ResetActiveQuery: function(id) { return [enemy]; },
| 194|    |-		DisableActiveQuery: function(id) { },
|    | 194|+		"DisableActiveQuery": function(id) { },
| 195| 195| 		GetEntityFlagMask: function(identifier) { },
| 196| 196| 	});
| 197| 197| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetEntityFlagMask' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 192| 192| 		EnableActiveQuery: function(id) { },
| 193| 193| 		ResetActiveQuery: function(id) { return [enemy]; },
| 194| 194| 		DisableActiveQuery: function(id) { },
| 195|    |-		GetEntityFlagMask: function(identifier) { },
|    | 195|+		"GetEntityFlagMask": function(identifier) { },
| 196| 196| 	});
| 197| 197| 
| 198| 198| 	AddMock(SYSTEM_ENTITY, IID_TemplateManager, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetCurrentTemplateName' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 196| 196| 	});
| 197| 197| 
| 198| 198| 	AddMock(SYSTEM_ENTITY, IID_TemplateManager, {
| 199|    |-		GetCurrentTemplateName: function(ent) { return "special/formations/line_closed"; },
|    | 199|+		"GetCurrentTemplateName": function(ent) { return "special/formations/line_closed"; },
| 200| 200| 	});
| 201| 201| 
| 202| 202| 	AddMock(SYSTEM_ENTITY, IID_PlayerManager, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPlayerByID' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 200| 200| 	});
| 201| 201| 
| 202| 202| 	AddMock(SYSTEM_ENTITY, IID_PlayerManager, {
| 203|    |-		GetPlayerByID: function(id) { return playerEntity; },
|    | 203|+		"GetPlayerByID": function(id) { return playerEntity; },
| 204| 204| 		GetNumPlayers: function() { return 2; },
| 205| 205| 	});
| 206| 206| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetNumPlayers' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 201| 201| 
| 202| 202| 	AddMock(SYSTEM_ENTITY, IID_PlayerManager, {
| 203| 203| 		GetPlayerByID: function(id) { return playerEntity; },
| 204|    |-		GetNumPlayers: function() { return 2; },
|    | 204|+		"GetNumPlayers": function() { return 2; },
| 205| 205| 	});
| 206| 206| 
| 207| 207| 	AddMock(playerEntity, IID_Player, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsAlly' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 205| 205| 	});
| 206| 206| 
| 207| 207| 	AddMock(playerEntity, IID_Player, {
| 208|    |-		IsAlly: function() { return false; },
|    | 208|+		"IsAlly": function() { return false; },
| 209| 209| 		IsEnemy: function() { return true; },
| 210| 210| 		GetEnemies: function() { return []; },
| 211| 211| 	});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsEnemy' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 206| 206| 
| 207| 207| 	AddMock(playerEntity, IID_Player, {
| 208| 208| 		IsAlly: function() { return false; },
| 209|    |-		IsEnemy: function() { return true; },
|    | 209|+		"IsEnemy": function() { return true; },
| 210| 210| 		GetEnemies: function() { return []; },
| 211| 211| 	});
| 212| 212| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetEnemies' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 207| 207| 	AddMock(playerEntity, IID_Player, {
| 208| 208| 		IsAlly: function() { return false; },
| 209| 209| 		IsEnemy: function() { return true; },
| 210|    |-		GetEnemies: function() { return []; },
|    | 210|+		"GetEnemies": function() { return []; },
| 211| 211| 	});
| 212| 212| 
| 213| 213| 	// create units
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetClassesList' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 218| 218| 		var unitAI = ConstructComponent(unit + i, "UnitAI", { "FormationController": "false", "DefaultStance": "aggressive" });
| 219| 219| 
| 220| 220| 		AddMock(unit + i, IID_Identity, {
| 221|    |-			GetClassesList: function() { return []; },
|    | 221|+			"GetClassesList": function() { return []; },
| 222| 222| 		});
| 223| 223| 
| 224| 224| 		AddMock(unit + i, IID_Ownership, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetOwner' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 222| 222| 		});
| 223| 223| 
| 224| 224| 		AddMock(unit + i, IID_Ownership, {
| 225|    |-			GetOwner: function() { return 1; },
|    | 225|+			"GetOwner": function() { return 1; },
| 226| 226| 		});
| 227| 227| 
| 228| 228| 		AddMock(unit + i, IID_Position, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetTurretParent' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 226| 226| 		});
| 227| 227| 
| 228| 228| 		AddMock(unit + i, IID_Position, {
| 229|    |-			GetTurretParent: function() { return INVALID_ENTITY; },
|    | 229|+			"GetTurretParent": function() { return INVALID_ENTITY; },
| 230| 230| 			GetPosition: function() { return new Vector3D(); },
| 231| 231| 			GetPosition2D: function() { return new Vector2D(); },
| 232| 232| 			GetRotation: function() { return { "y": 0 }; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPosition' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 227| 227| 
| 228| 228| 		AddMock(unit + i, IID_Position, {
| 229| 229| 			GetTurretParent: function() { return INVALID_ENTITY; },
| 230|    |-			GetPosition: function() { return new Vector3D(); },
|    | 230|+			"GetPosition": function() { return new Vector3D(); },
| 231| 231| 			GetPosition2D: function() { return new Vector2D(); },
| 232| 232| 			GetRotation: function() { return { "y": 0 }; },
| 233| 233| 			IsInWorld: function() { return true; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPosition2D' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 228| 228| 		AddMock(unit + i, IID_Position, {
| 229| 229| 			GetTurretParent: function() { return INVALID_ENTITY; },
| 230| 230| 			GetPosition: function() { return new Vector3D(); },
| 231|    |-			GetPosition2D: function() { return new Vector2D(); },
|    | 231|+			"GetPosition2D": function() { return new Vector2D(); },
| 232| 232| 			GetRotation: function() { return { "y": 0 }; },
| 233| 233| 			IsInWorld: function() { return true; },
| 234| 234| 		});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetRotation' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 229| 229| 			GetTurretParent: function() { return INVALID_ENTITY; },
| 230| 230| 			GetPosition: function() { return new Vector3D(); },
| 231| 231| 			GetPosition2D: function() { return new Vector2D(); },
| 232|    |-			GetRotation: function() { return { "y": 0 }; },
|    | 232|+			"GetRotation": function() { return { "y": 0 }; },
| 233| 233| 			IsInWorld: function() { return true; },
| 234| 234| 		});
| 235| 235| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsInWorld' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 230| 230| 			GetPosition: function() { return new Vector3D(); },
| 231| 231| 			GetPosition2D: function() { return new Vector2D(); },
| 232| 232| 			GetRotation: function() { return { "y": 0 }; },
| 233|    |-			IsInWorld: function() { return true; },
|    | 233|+			"IsInWorld": function() { return true; },
| 234| 234| 		});
| 235| 235| 
| 236| 236| 		AddMock(unit + i, IID_UnitMotion, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetWalkSpeed' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 234| 234| 		});
| 235| 235| 
| 236| 236| 		AddMock(unit + i, IID_UnitMotion, {
| 237|    |-			GetWalkSpeed: function() { return 1; },
|    | 237|+			"GetWalkSpeed": function() { return 1; },
| 238| 238| 			MoveToFormationOffset: function(target, x, z) { },
| 239| 239| 			IsInTargetRange: function(target, min, max) { return true; },
| 240| 240| 			MoveToTargetRange: function(target, min, max) { },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'MoveToFormationOffset' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 235| 235| 
| 236| 236| 		AddMock(unit + i, IID_UnitMotion, {
| 237| 237| 			GetWalkSpeed: function() { return 1; },
| 238|    |-			MoveToFormationOffset: function(target, x, z) { },
|    | 238|+			"MoveToFormationOffset": function(target, x, z) { },
| 239| 239| 			IsInTargetRange: function(target, min, max) { return true; },
| 240| 240| 			MoveToTargetRange: function(target, min, max) { },
| 241| 241| 			StopMoving: function() { },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsInTargetRange' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 236| 236| 		AddMock(unit + i, IID_UnitMotion, {
| 237| 237| 			GetWalkSpeed: function() { return 1; },
| 238| 238| 			MoveToFormationOffset: function(target, x, z) { },
| 239|    |-			IsInTargetRange: function(target, min, max) { return true; },
|    | 239|+			"IsInTargetRange": function(target, min, max) { return true; },
| 240| 240| 			MoveToTargetRange: function(target, min, max) { },
| 241| 241| 			StopMoving: function() { },
| 242| 242| 			GetPassabilityClassName: function() { return "default"; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'MoveToTargetRange' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 237| 237| 			GetWalkSpeed: function() { return 1; },
| 238| 238| 			MoveToFormationOffset: function(target, x, z) { },
| 239| 239| 			IsInTargetRange: function(target, min, max) { return true; },
| 240|    |-			MoveToTargetRange: function(target, min, max) { },
|    | 240|+			"MoveToTargetRange": function(target, min, max) { },
| 241| 241| 			StopMoving: function() { },
| 242| 242| 			GetPassabilityClassName: function() { return "default"; },
| 243| 243| 		});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'StopMoving' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 238| 238| 			MoveToFormationOffset: function(target, x, z) { },
| 239| 239| 			IsInTargetRange: function(target, min, max) { return true; },
| 240| 240| 			MoveToTargetRange: function(target, min, max) { },
| 241|    |-			StopMoving: function() { },
|    | 241|+			"StopMoving": function() { },
| 242| 242| 			GetPassabilityClassName: function() { return "default"; },
| 243| 243| 		});
| 244| 244| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPassabilityClassName' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 239| 239| 			IsInTargetRange: function(target, min, max) { return true; },
| 240| 240| 			MoveToTargetRange: function(target, min, max) { },
| 241| 241| 			StopMoving: function() { },
| 242|    |-			GetPassabilityClassName: function() { return "default"; },
|    | 242|+			"GetPassabilityClassName": function() { return "default"; },
| 243| 243| 		});
| 244| 244| 
| 245| 245| 		AddMock(unit + i, IID_Vision, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetRange' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 243| 243| 		});
| 244| 244| 
| 245| 245| 		AddMock(unit + i, IID_Vision, {
| 246|    |-			GetRange: function() { return 10; },
|    | 246|+			"GetRange": function() { return 10; },
| 247| 247| 		});
| 248| 248| 
| 249| 249| 		AddMock(unit + i, IID_Attack, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetRange' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 247| 247| 		});
| 248| 248| 
| 249| 249| 		AddMock(unit + i, IID_Attack, {
| 250|    |-			GetRange: function() { return {"max":10, "min": 0}; },
|    | 250|+			"GetRange": function() { return {"max":10, "min": 0}; },
| 251| 251| 			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 252| 252| 			GetBestAttackAgainst: function(t) { return "melee"; },
| 253| 253| 			GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 247| 247| 		});
| 248| 248| 
| 249| 249| 		AddMock(unit + i, IID_Attack, {
| 250|    |-			GetRange: function() { return {"max":10, "min": 0}; },
|    | 250|+			GetRange: function() { return { "max":10, "min": 0}; },
| 251| 251| 			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 252| 252| 			GetBestAttackAgainst: function(t) { return "melee"; },
| 253| 253| 			GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'max'.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 247| 247| 		});
| 248| 248| 
| 249| 249| 		AddMock(unit + i, IID_Attack, {
| 250|    |-			GetRange: function() { return {"max":10, "min": 0}; },
|    | 250|+			GetRange: function() { return {"max": 10, "min": 0}; },
| 251| 251| 			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 252| 252| 			GetBestAttackAgainst: function(t) { return "melee"; },
| 253| 253| 			GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 247| 247| 		});
| 248| 248| 
| 249| 249| 		AddMock(unit + i, IID_Attack, {
| 250|    |-			GetRange: function() { return {"max":10, "min": 0}; },
|    | 250|+			GetRange: function() { return {"max":10, "min": 0 }; },
| 251| 251| 			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 252| 252| 			GetBestAttackAgainst: function(t) { return "melee"; },
| 253| 253| 			GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetFullAttackRange' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 248| 248| 
| 249| 249| 		AddMock(unit + i, IID_Attack, {
| 250| 250| 			GetRange: function() { return {"max":10, "min": 0}; },
| 251|    |-			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
|    | 251|+			"GetFullAttackRange": function() { return { "max": 40, "min": 0}; },
| 252| 252| 			GetBestAttackAgainst: function(t) { return "melee"; },
| 253| 253| 			GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
| 254| 254| 			CanAttack: function(v) { return true; },
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 248| 248| 
| 249| 249| 		AddMock(unit + i, IID_Attack, {
| 250| 250| 			GetRange: function() { return {"max":10, "min": 0}; },
| 251|    |-			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
|    | 251|+			GetFullAttackRange: function() { return { "max": 40, "min": 0 }; },
| 252| 252| 			GetBestAttackAgainst: function(t) { return "melee"; },
| 253| 253| 			GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
| 254| 254| 			CanAttack: function(v) { return true; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetBestAttackAgainst' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 249| 249| 		AddMock(unit + i, IID_Attack, {
| 250| 250| 			GetRange: function() { return {"max":10, "min": 0}; },
| 251| 251| 			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 252|    |-			GetBestAttackAgainst: function(t) { return "melee"; },
|    | 252|+			"GetBestAttackAgainst": function(t) { return "melee"; },
| 253| 253| 			GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
| 254| 254| 			CanAttack: function(v) { return true; },
| 255| 255| 			CompareEntitiesByPreference: function(a, b) { return 0; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetTimers' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 250| 250| 			GetRange: function() { return {"max":10, "min": 0}; },
| 251| 251| 			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 252| 252| 			GetBestAttackAgainst: function(t) { return "melee"; },
| 253|    |-			GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
|    | 253|+			"GetTimers": function() { return { "prepare": 500, "repeat": 1000 }; },
| 254| 254| 			CanAttack: function(v) { return true; },
| 255| 255| 			CompareEntitiesByPreference: function(a, b) { return 0; },
| 256| 256| 		});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'CanAttack' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 251| 251| 			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 252| 252| 			GetBestAttackAgainst: function(t) { return "melee"; },
| 253| 253| 			GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
| 254|    |-			CanAttack: function(v) { return true; },
|    | 254|+			"CanAttack": function(v) { return true; },
| 255| 255| 			CompareEntitiesByPreference: function(a, b) { return 0; },
| 256| 256| 		});
| 257| 257| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'CompareEntitiesByPreference' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 252| 252| 			GetBestAttackAgainst: function(t) { return "melee"; },
| 253| 253| 			GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
| 254| 254| 			CanAttack: function(v) { return true; },
| 255|    |-			CompareEntitiesByPreference: function(a, b) { return 0; },
|    | 255|+			"CompareEntitiesByPreference": function(a, b) { return 0; },
| 256| 256| 		});
| 257| 257| 
| 258| 258| 		unitAI.OnCreate();
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetHitpoints' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 264| 264| 
| 265| 265| 	// create enemy
| 266| 266| 	AddMock(enemy, IID_Health, {
| 267|    |-		GetHitpoints: function() { return 40; },
|    | 267|+		"GetHitpoints": function() { return 40; },
| 268| 268| 	});
| 269| 269| 
| 270| 270| 	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 267| 267| 		GetHitpoints: function() { return 40; },
| 268| 268| 	});
| 269| 269| 
| 270|    |-	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
|    | 270|+	var controllerFormation = ConstructComponent(controller, "Formation", { "FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
| 271| 271| 	var controllerAI = ConstructComponent(controller, "UnitAI", { "FormationController": "true", "DefaultStance": "aggressive" });
| 272| 272| 
| 273| 273| 	AddMock(controller, IID_Position, {
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 267| 267| 		GetHitpoints: function() { return 40; },
| 268| 268| 	});
| 269| 269| 
| 270|    |-	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
|    | 270|+	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0 });
| 271| 271| 	var controllerAI = ConstructComponent(controller, "UnitAI", { "FormationController": "true", "DefaultStance": "aggressive" });
| 272| 272| 
| 273| 273| 	AddMock(controller, IID_Position, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetTurretParent' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 271| 271| 	var controllerAI = ConstructComponent(controller, "UnitAI", { "FormationController": "true", "DefaultStance": "aggressive" });
| 272| 272| 
| 273| 273| 	AddMock(controller, IID_Position, {
| 274|    |-		GetTurretParent: function() { return INVALID_ENTITY; },
|    | 274|+		"GetTurretParent": function() { return INVALID_ENTITY; },
| 275| 275| 		JumpTo: function(x, z) { this.x = x; this.z = z; },
| 276| 276| 		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
| 277| 277| 		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'JumpTo' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 272| 272| 
| 273| 273| 	AddMock(controller, IID_Position, {
| 274| 274| 		GetTurretParent: function() { return INVALID_ENTITY; },
| 275|    |-		JumpTo: function(x, z) { this.x = x; this.z = z; },
|    | 275|+		"JumpTo": function(x, z) { this.x = x; this.z = z; },
| 276| 276| 		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
| 277| 277| 		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
| 278| 278| 		GetRotation: function() { return { "y": 0 }; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPosition' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 273| 273| 	AddMock(controller, IID_Position, {
| 274| 274| 		GetTurretParent: function() { return INVALID_ENTITY; },
| 275| 275| 		JumpTo: function(x, z) { this.x = x; this.z = z; },
| 276|    |-		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
|    | 276|+		"GetPosition": function() { return new Vector3D(this.x, 0, this.z); },
| 277| 277| 		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
| 278| 278| 		GetRotation: function() { return { "y": 0 }; },
| 279| 279| 		IsInWorld: function() { return true; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPosition2D' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 274| 274| 		GetTurretParent: function() { return INVALID_ENTITY; },
| 275| 275| 		JumpTo: function(x, z) { this.x = x; this.z = z; },
| 276| 276| 		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
| 277|    |-		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
|    | 277|+		"GetPosition2D": function() { return new Vector2D(this.x, this.z); },
| 278| 278| 		GetRotation: function() { return { "y": 0 }; },
| 279| 279| 		IsInWorld: function() { return true; },
| 280| 280| 	});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetRotation' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 275| 275| 		JumpTo: function(x, z) { this.x = x; this.z = z; },
| 276| 276| 		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
| 277| 277| 		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
| 278|    |-		GetRotation: function() { return { "y": 0 }; },
|    | 278|+		"GetRotation": function() { return { "y": 0 }; },
| 279| 279| 		IsInWorld: function() { return true; },
| 280| 280| 	});
| 281| 281| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsInWorld' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 276| 276| 		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
| 277| 277| 		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
| 278| 278| 		GetRotation: function() { return { "y": 0 }; },
| 279|    |-		IsInWorld: function() { return true; },
|    | 279|+		"IsInWorld": function() { return true; },
| 280| 280| 	});
| 281| 281| 
| 282| 282| 	AddMock(controller, IID_UnitMotion, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'SetSpeed' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 280| 280| 	});
| 281| 281| 
| 282| 282| 	AddMock(controller, IID_UnitMotion, {
| 283|    |-		SetSpeed: function(speed) { },
|    | 283|+		"SetSpeed": function(speed) { },
| 284| 284| 		MoveToPointRange: function(x, z, minRange, maxRange) { },
| 285| 285| 		IsInTargetRange: function(target, min, max) { return true; },
| 286| 286| 		StopMoving: function() { },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'MoveToPointRange' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 281| 281| 
| 282| 282| 	AddMock(controller, IID_UnitMotion, {
| 283| 283| 		SetSpeed: function(speed) { },
| 284|    |-		MoveToPointRange: function(x, z, minRange, maxRange) { },
|    | 284|+		"MoveToPointRange": function(x, z, minRange, maxRange) { },
| 285| 285| 		IsInTargetRange: function(target, min, max) { return true; },
| 286| 286| 		StopMoving: function() { },
| 287| 287| 		GetPassabilityClassName: function() { return "default"; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsInTargetRange' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 282| 282| 	AddMock(controller, IID_UnitMotion, {
| 283| 283| 		SetSpeed: function(speed) { },
| 284| 284| 		MoveToPointRange: function(x, z, minRange, maxRange) { },
| 285|    |-		IsInTargetRange: function(target, min, max) { return true; },
|    | 285|+		"IsInTargetRange": function(target, min, max) { return true; },
| 286| 286| 		StopMoving: function() { },
| 287| 287| 		GetPassabilityClassName: function() { return "default"; },
| 288| 288| 	});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'StopMoving' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 283| 283| 		SetSpeed: function(speed) { },
| 284| 284| 		MoveToPointRange: function(x, z, minRange, maxRange) { },
| 285| 285| 		IsInTargetRange: function(target, min, max) { return true; },
| 286|    |-		StopMoving: function() { },
|    | 286|+		"StopMoving": function() { },
| 287| 287| 		GetPassabilityClassName: function() { return "default"; },
| 288| 288| 	});
| 289| 289| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPassabilityClassName' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 284| 284| 		MoveToPointRange: function(x, z, minRange, maxRange) { },
| 285| 285| 		IsInTargetRange: function(target, min, max) { return true; },
| 286| 286| 		StopMoving: function() { },
| 287|    |-		GetPassabilityClassName: function() { return "default"; },
|    | 287|+		"GetPassabilityClassName": function() { return "default"; },
| 288| 288| 	});
| 289| 289| 
| 290| 290| 	AddMock(controller, IID_Attack, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetRange' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 288| 288| 	});
| 289| 289| 
| 290| 290| 	AddMock(controller, IID_Attack, {
| 291|    |-		GetRange: function() { return {"max":10, "min": 0}; },
|    | 291|+		"GetRange": function() { return {"max":10, "min": 0}; },
| 292| 292| 		CanAttackAsFormation: function() { return false; },
| 293| 293| 	});
| 294| 294| 
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 288| 288| 	});
| 289| 289| 
| 290| 290| 	AddMock(controller, IID_Attack, {
| 291|    |-		GetRange: function() { return {"max":10, "min": 0}; },
|    | 291|+		GetRange: function() { return { "max":10, "min": 0}; },
| 292| 292| 		CanAttackAsFormation: function() { return false; },
| 293| 293| 	});
| 294| 294| 
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'max'.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 288| 288| 	});
| 289| 289| 
| 290| 290| 	AddMock(controller, IID_Attack, {
| 291|    |-		GetRange: function() { return {"max":10, "min": 0}; },
|    | 291|+		GetRange: function() { return {"max": 10, "min": 0}; },
| 292| 292| 		CanAttackAsFormation: function() { return false; },
| 293| 293| 	});
| 294| 294| 
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 288| 288| 	});
| 289| 289| 
| 290| 290| 	AddMock(controller, IID_Attack, {
| 291|    |-		GetRange: function() { return {"max":10, "min": 0}; },
|    | 291|+		GetRange: function() { return {"max":10, "min": 0 }; },
| 292| 292| 		CanAttackAsFormation: function() { return false; },
| 293| 293| 	});
| 294| 294| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'CanAttackAsFormation' found.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 289| 289| 
| 290| 290| 	AddMock(controller, IID_Attack, {
| 291| 291| 		GetRange: function() { return {"max":10, "min": 0}; },
| 292|    |-		CanAttackAsFormation: function() { return false; },
|    | 292|+		"CanAttackAsFormation": function() { return false; },
| 293| 293| 	});
| 294| 294| 
| 295| 295| 	controllerAI.OnCreate();
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 301| 301| 	for (var ent of unitAIs)
| 302| 302| 		TS_ASSERT_EQUALS(unitAI.fsmStateName, "INDIVIDUAL.COMBAT.ATTACKING");
| 303| 303| 
| 304|    |-	controllerAI.MoveIntoFormation({"name": "Circle"});
|    | 304|+	controllerAI.MoveIntoFormation({ "name": "Circle"});
| 305| 305| 
| 306| 306| 	// let all units be in position
| 307| 307| 	for (var ent of unitAIs)
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 301| 301| 	for (var ent of unitAIs)
| 302| 302| 		TS_ASSERT_EQUALS(unitAI.fsmStateName, "INDIVIDUAL.COMBAT.ATTACKING");
| 303| 303| 
| 304|    |-	controllerAI.MoveIntoFormation({"name": "Circle"});
|    | 304|+	controllerAI.MoveIntoFormation({"name": "Circle" });
| 305| 305| 
| 306| 306| 	// let all units be in position
| 307| 307| 	for (var ent of unitAIs)
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["leave"] is better written in dot notation.
|----|    | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 348| 348| 			continue;
| 349| 349| 
| 350| 350| 		TS_ASSERT("leave" in unitAI.UnitFsm.states[state]);
| 351|    |-		TS_ASSERT(uneval(unitAI.UnitFsm.states[state]["leave"]).search(/SelectAnimation\("idle"\)/) !== -1, "Missing Animation reset in " + state);
|    | 351|+		TS_ASSERT(uneval(unitAI.UnitFsm.states[state].leave).search(/SelectAnimation\("idle"\)/) !== -1, "Missing Animation reset in " + state);
| 352| 352| 	}
| 353| 353| }
| 354| 354| 

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  46| »   »   ResetActiveQuery:·function(id)·{·if·(mode·==·0)·return·[];·else·return·[enemy];·},
|    | [NORMAL] ESLintBear (brace-rules/brace-on-same-line):
|    | Closing curly brace appears on the same line as the subsequent block.

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 214| »   for·(var·i·=·0;·i·<·unitCount;·i++)·{
|    | [NORMAL] ESLintBear (brace-rules/brace-on-same-line):
|    | Opening curly brace appears on the same line as controlling statement.

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 307| »   for·(var·ent·of·unitAIs)
|    | [NORMAL] JSHintBear:
|    | 'ent' is already defined.

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 310| »   for·(var·ent·of·unitAIs)
|    | [NORMAL] JSHintBear:
|    | 'ent' is already defined.

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 302| »   »   TS_ASSERT_EQUALS(unitAI.fsmStateName,·"INDIVIDUAL.COMBAT.ATTACKING");
|    | [NORMAL] JSHintBear:
|    | 'unitAI' used out of scope.

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 311| »   »   TS_ASSERT_EQUALS(unitAI.fsmStateName,·"INDIVIDUAL.COMBAT.ATTACKING");
|    | [NORMAL] JSHintBear:
|    | 'unitAI' used out of scope.

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 351| »   »   TS_ASSERT(uneval(unitAI.UnitFsm.states[state]["leave"]).search(/SelectAnimation\("idle"\)/)·!==·-1,·"Missing·Animation·reset·in·"·+·state);
|    | [NORMAL] JSHintBear:
|    | ['leave'] is better written in dot notation.

Link to build: https://jenkins.wildfiregames.com/job/differential/481/display/redirect

Mh, I expected tests to fail, but not this way ?

wraitii abandoned this revision.May 5 2019, 9:32 AM

Won't get in.

Stan added a subscriber: Stan.May 5 2019, 11:47 AM

why not ?