Created
May 22, 2024 17:23
-
-
Save MalcolmMacDonald/7ec6f0ec7ca498b9cc25e4ba5399d190 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #region | |
| using System.Collections.Generic; | |
| using System.Linq; | |
| using NUnit.Framework; | |
| using UnityEngine; | |
| #endregion | |
| namespace Tests | |
| { | |
| public class SokobanGridServiceTests : SokobanElementTests | |
| { | |
| [Test] | |
| [SokobanTest(2, 2, 1)] | |
| public void Movement() | |
| { | |
| var testElement = CreateElement(Vector3Int.zero, Vector3Int.up); | |
| bool movedPiece = gridService.MoveElement(testElement, new Vector3Int(1, 0, 0), Vector3Int.zero); | |
| Assert.That(movedPiece); | |
| Assert.That(testElement.CurrentPosition==new Vector3Int(1, 0, 0)); | |
| } | |
| [Test] | |
| [SokobanTest(1, 1, 1)] | |
| public void WallCollision() | |
| { | |
| var testElement = CreateElement(Vector3Int.zero, Vector3Int.zero); | |
| bool movedPiece = gridService.MoveElement(testElement, new Vector3Int(-1, 0, 0), Vector3Int.zero); | |
| Assert.That(!movedPiece); | |
| } | |
| [Test] | |
| [SokobanTest(1, 3, 1)] | |
| public void Falling() | |
| { | |
| var testElement = CreateElement(Vector3Int.up * 2); | |
| gridService.MakeElementsFall(); | |
| Assert.That(testElement.CurrentPosition==new Vector3Int(0, 0, 0)); | |
| } | |
| [Test] | |
| [SokobanTest(3, 1, 1)] | |
| public void Pushing() | |
| { | |
| var testElement = CreateElement(Vector3Int.zero); | |
| var testElement2 = CreateElement(Vector3Int.right); | |
| bool movedPiece = gridService.MoveElement(testElement, Vector3Int.right, Vector3Int.zero); | |
| Assert.That(movedPiece); | |
| Assert.That(testElement.CurrentPosition==new Vector3Int(1, 0, 0)); | |
| Assert.That(testElement2.CurrentPosition==new Vector3Int(2, 0, 0)); | |
| } | |
| [Test] | |
| [SokobanTest(3, 3, 1)] | |
| public void SteppingUp() | |
| { | |
| var testElement = CreateElement(Vector3Int.zero, Vector3Int.zero, Vector3Int.up); | |
| var stairElement = CreateElement(Vector3Int.right); | |
| bool movedPiece = gridService.MoveElement(testElement, new Vector3Int(1, 1, 0), Vector3Int.zero); | |
| Assert.That(movedPiece); | |
| gridService.MakeElementsFall(); | |
| Assert.That(testElement.CurrentPosition==new Vector3Int(1, 1, 0)); | |
| gridService.MoveElement(testElement, new Vector3Int(1, 0, 0), Vector3Int.zero); | |
| gridService.MakeElementsFall(); | |
| Assert.That(testElement.CurrentPosition==new Vector3Int(2, 0, 0)); | |
| } | |
| [Test] | |
| [SokobanTest(2, 1, 1)] | |
| public void OccupyingSameCell() | |
| { | |
| var testElement = CreateElement(Vector3Int.zero, new WalledCell(Vector3Int.zero, WallDirection.None, false)); | |
| var testElement2 = CreateElement(Vector3Int.right, new WalledCell(Vector3Int.zero, WallDirection.None, false)); | |
| Assert.That(!gridService.MoveElement(testElement, Vector3Int.right, Vector3Int.zero)); | |
| gridService.SetPieceContainableMask(testElement2.sokobanPieceID, PieceType.Furniture); | |
| Assert.That(gridService.MoveElement(testElement, Vector3Int.right, Vector3Int.zero)); | |
| Assert.That(testElement.CurrentPosition==new Vector3Int(1, 0, 0)); | |
| Assert.That(testElement2.CurrentPosition==new Vector3Int(1, 0, 0)); | |
| gridService.cachedSokobanGrid.GetPiecesAt(testElement.CurrentPosition, out IReadOnlyList<SokobanPiece> pieces); | |
| Assert.That(pieces.Contains(testElement.SokobanPiece)); | |
| Assert.That(pieces.Contains(testElement2.SokobanPiece)); | |
| } | |
| [Test] | |
| [SokobanTest(1, 2, 1)] | |
| public void SupportedByWall() | |
| { | |
| var supportingElement = CreateElement(Vector3Int.zero, new WalledCell(Vector3Int.zero, WallDirection.Up, false)); | |
| var supportedElement = CreateElement(Vector3Int.up, new WalledCell(Vector3Int.zero, WallDirection.None, false)); | |
| Assert.That(!gridService.CanMoveBetweenCells(supportedElement.SokobanPiece, Vector3Int.up, Vector3Int.zero)); | |
| gridService.MakeElementsFall(); | |
| Assert.That(supportedElement.CurrentPosition==new Vector3Int(0, 1, 0)); | |
| } | |
| [Test] | |
| [SokobanTest(3, 1, 1)] | |
| public void CanMove() | |
| { | |
| var pieceA = CreateElement(Vector3Int.zero); | |
| var pieceB = CreateElementWithoutAwake(Vector3Int.right, new WalledCell(Vector3Int.zero, WallDirection.Up, false)); | |
| pieceB.containablePieceTypeMask = PieceType.Furniture | PieceType.Player; | |
| pieceB.Awake(); | |
| Assert.IsTrue(gridService.CanMoveBetweenCells(pieceA.SokobanPiece, Vector3Int.zero, Vector3Int.right)); | |
| Assert.IsTrue(gridService.MoveElement(pieceA, Vector3Int.right, Vector3Int.zero)); | |
| Assert.IsTrue(gridService.MoveElement(pieceA, Vector3Int.right, Vector3Int.right)); | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment