< Summary

Class:BehaviorTests
Assembly:bamlab.test.editmode
File(s):/github/workspace/Assets/Tests/EditMode/BehaviorTests.cs
Covered lines:50
Uncovered lines:0
Coverable lines:50
Total lines:113
Line coverage:100% (50 of 50)
Covered branches:0
Total branches:0
Covered methods:2
Total methods:2
Method coverage:100% (2 of 2)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
TestDirectAttackBehaviorFactoryUsesOverride()0%110100%
TestDirectAttackBehaviorWaypoints()0%110100%

File(s)

/github/workspace/Assets/Tests/EditMode/BehaviorTests.cs

#LineLine coverage
 1using NUnit.Framework;
 2using UnityEngine;
 3using System.Collections.Generic;
 4
 5public class BehaviorTests : TestBase {
 6  [Test]
 17  public void TestDirectAttackBehaviorFactoryUsesOverride() {
 18    var config = new Configs.AttackBehaviorConfig() {
 9      Name = "Sample Attack", Type = Configs.AttackType.DirectAttack,
 10      FlightPlan =
 11          new Configs.AttackBehaviorConfig.Types.FlightPlan() {
 12            Type = Configs.AttackBehaviorConfig.Types.FlightPlanType.DistanceToTarget,
 13            Waypoints = { new List<Configs.AttackBehaviorConfig.Types.FlightPlan.Types.Waypoint>() {
 14              new Configs.AttackBehaviorConfig.Types.FlightPlan.Types.Waypoint() {
 15                Distance = 1000,
 16                Altitude = 100,
 17                Power = Configs.Power.Cruise,
 18              }
 19            } }
 20          }
 21    };
 22
 123    AttackBehavior attackBehavior = AttackBehaviorFactory.Create(config);
 124    Assert.IsNotNull(attackBehavior);
 25
 126    Vector3 currentPosition = new Vector3(-100, 0, 0);
 127    Vector3 targetPosition = new Vector3(0, 0, 0);
 128    var result = attackBehavior.GetNextWaypoint(currentPosition, targetPosition);
 29
 130    Assert.AreEqual(Configs.Power.Cruise, result.power);
 131  }
 32
 33  [Test]
 134  public void TestDirectAttackBehaviorWaypoints() {
 35    // Create a sample direct attack behavior.
 136    DirectAttackBehavior attackBehavior =
 37        new DirectAttackBehavior(
 38            new Configs.AttackBehaviorConfig() {
 39              Name = "Sample Attack", Type = Configs.AttackType.DirectAttack,
 40              FlightPlan =
 41                  new Configs.AttackBehaviorConfig.Types.FlightPlan() {
 42                    Type = Configs.AttackBehaviorConfig.Types.FlightPlanType.DistanceToTarget,
 43                    Waypoints =
 44                        { new List<Configs.AttackBehaviorConfig.Types.FlightPlan.Types.Waypoint>() {
 45                          new Configs.AttackBehaviorConfig.Types.FlightPlan.Types.Waypoint() {
 46                            Distance = 1000,
 47                            Altitude = 100,
 48                            Power = Configs.Power.Cruise,
 49                          },
 50                          new Configs.AttackBehaviorConfig.Types.FlightPlan.Types.Waypoint() {
 51                            Distance = 500,
 52                            Altitude = 50,
 53                            Power = Configs.Power.Mil,
 54                          },
 55                          new Configs.AttackBehaviorConfig.Types.FlightPlan.Types.Waypoint() {
 56                            Distance = 100,
 57                            Altitude = 25,
 58                            Power = Configs.Power.Max,
 59                          }
 60                        } }
 61                  }
 62            });
 63
 164    Vector3 targetPosition = new Vector3(1000, 0, 0);
 65    const float epsilon = 0.001f;
 66
 67    // Test the waypoint selection based on distance.
 168    Vector3 currentPosition = new Vector3(-100, 0, 0);
 169    var result = attackBehavior.GetNextWaypoint(currentPosition, targetPosition);
 170    Assert.AreEqual(0, result.waypointPosition.x, epsilon);
 171    Assert.AreEqual(100, result.waypointPosition.y, epsilon);
 172    Assert.AreEqual(0, result.waypointPosition.z, epsilon);
 173    Assert.AreEqual(Configs.Power.Cruise, result.power);
 74
 175    currentPosition = new Vector3(0, 0, 0);
 176    result = attackBehavior.GetNextWaypoint(currentPosition, targetPosition);
 177    Assert.AreEqual(500, result.waypointPosition.x, epsilon);
 178    Assert.AreEqual(50, result.waypointPosition.y, epsilon);
 179    Assert.AreEqual(0, result.waypointPosition.z, epsilon);
 180    Assert.AreEqual(Configs.Power.Mil, result.power);
 81
 182    currentPosition = new Vector3(600, 0, 0);
 183    result = attackBehavior.GetNextWaypoint(currentPosition, targetPosition);
 184    Assert.AreEqual(900, result.waypointPosition.x, epsilon);
 185    Assert.AreEqual(25, result.waypointPosition.y, epsilon);
 186    Assert.AreEqual(0, result.waypointPosition.z, epsilon);
 187    Assert.AreEqual(Configs.Power.Max, result.power);
 88
 89    // Test the attack behavior within the final distance.
 190    currentPosition = new Vector3(920, 0, 0);
 191    result = attackBehavior.GetNextWaypoint(currentPosition, targetPosition);
 192    Assert.AreEqual(1000, result.waypointPosition.x, epsilon);
 193    Assert.AreEqual(0, result.waypointPosition.y, epsilon);
 194    Assert.AreEqual(0, result.waypointPosition.z, epsilon);
 195    Assert.AreEqual(Configs.Power.Max, result.power);
 96
 97    // Test with non-zero z-coordinate.
 198    targetPosition = new Vector3(800, 0, 600);
 199    currentPosition = new Vector3(0, 0, 0);
 1100    result = attackBehavior.GetNextWaypoint(currentPosition, targetPosition);
 1101    Assert.AreEqual(400, result.waypointPosition.x, epsilon);
 1102    Assert.AreEqual(50, result.waypointPosition.y, epsilon);
 1103    Assert.AreEqual(300, result.waypointPosition.z, epsilon);
 1104    Assert.AreEqual(Configs.Power.Mil, result.power);
 105
 1106    currentPosition = new Vector3(400, 0, 300);
 1107    result = attackBehavior.GetNextWaypoint(currentPosition, targetPosition);
 1108    Assert.AreEqual(720, result.waypointPosition.x, epsilon);
 1109    Assert.AreEqual(25, result.waypointPosition.y, epsilon);
 1110    Assert.AreEqual(540, result.waypointPosition.z, epsilon);
 1111    Assert.AreEqual(Configs.Power.Max, result.power);
 1112  }
 113}