import 'dart:math'; import 'package:mockito/mockito.dart'; import 'package:rules_of_living/src/Grid.dart'; import 'package:rules_of_living/src/Simulation.dart'; import 'package:test/test.dart'; class MockGrid extends Mock implements Grid {} void main() { Simulation sut; setUp(() { sut = Simulation(10, 10); }); group("gridSize", () { test( "returns the width and height of the underlying grid", () => expect( sut.gridSize, equals(Point(sut.map.width, sut.map.height)))); test("sets the underlying grid width and height", () { sut.gridSize = Point(2, 3); expect(sut.gridSize, equals(Point(2, 3))); }); test("creates a new underlying grid on resizing", () { var oldMap = sut.map; sut.gridSize = Point(10, 10); expect(sut.map, isNot(same(oldMap))); }, tags: "nobrowser"); }); group("resetMap", () { test("sets the internal map filled with 'false' ", () { sut.map.set(1, 1, true); sut.clearMap(); expect(sut.map, allOf(TypeMatcher(), isNot(contains(true)))); }); test("sets the simulation to need re-rendering", () { sut.dirty = false; sut.clearMap(); expect(sut.dirty, true); }); }, tags: "nobrowser"); group("save&load", () { test( "saves a copy of the map which does not change when the actual map changes", () { sut.saveSnapshot(); sut.mergeStateChanges({1: true, 2: true}); var snapshot = Grid.from(sut.map); expect(sut.loadSnapshot(), isNot(equals(snapshot))); }); }, tags: "nobrowser"); group("toggleCellState", () { test("throws RangeError if outside the map bounds", () { expect(() => sut.toggleCellState(10, 9), throwsRangeError); }, tags: const ["nobrowser"]); test("sets the cell to false if currently true", () { sut.map.set(1, 1, true); sut.toggleCellState(1, 1); expect(sut.map.get(1, 1), false); }, tags: const ["nobrowser"]); test("sets the cell to true if currently false", () { sut.map.set(1, 1, false); sut.toggleCellState(1, 1); expect(sut.map.get(1, 1), true); }, tags: const ["nobrowser"]); }); }