void DoTest(GameModel engine, string inputs, string tests, string variation = "") { var msg = $"[{variation}][{inputs}] [{tests}]"; engine.AcceptInputs(inputs); var ts = tests.Split(';'); var location = ts[0].SafeIntParse(); var direction = ts[1].Trim(); var objs = ts[2].Trim().Split(null as char[], StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < objs.Length; i++) { var actual = (!engine.Ok) ? "error" : (engine.EndLevel) ? "done" : (engine.GameOver) ? "over" : (location == null) ? "end" : engine.GetObjects(location.Value).OrderBy(v => v).Join(""); Assert.AreEqual(objs[i], actual, msg); location = engine.Step(location ?? 0, direction); } }