From 31e918e3f2a76b2160c8984b6e729e06e56115d4 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Mon, 26 Apr 2021 18:13:52 -0600 Subject: [PATCH] [ascii] Test graphics backend, first unit test --- projects/asciilib2/build.hxml | 4 --- .../backends/test/TestGraphicsBackend.hx | 7 ++++ .../backends/test/TestGraphicsBackend.kiss | 12 +++++++ projects/asciilib2/test.sh | 3 +- projects/asciilib2/test/build.hxml | 6 ++++ projects/asciilib2/test/src/Main.hx | 20 +++++++++++ .../src/cases/DrawOnlyWhenModifiedTestCase.hx | 36 +++++++++++++++++++ 7 files changed, 83 insertions(+), 5 deletions(-) delete mode 100644 projects/asciilib2/build.hxml create mode 100644 projects/asciilib2/src/asciilib/backends/test/TestGraphicsBackend.hx create mode 100644 projects/asciilib2/src/asciilib/backends/test/TestGraphicsBackend.kiss mode change 100644 => 100755 projects/asciilib2/test.sh create mode 100644 projects/asciilib2/test/build.hxml create mode 100644 projects/asciilib2/test/src/Main.hx create mode 100644 projects/asciilib2/test/src/cases/DrawOnlyWhenModifiedTestCase.hx diff --git a/projects/asciilib2/build.hxml b/projects/asciilib2/build.hxml deleted file mode 100644 index c56fd45b..00000000 --- a/projects/asciilib2/build.hxml +++ /dev/null @@ -1,4 +0,0 @@ --lib kiss --cp src ---main Main ---interp \ No newline at end of file diff --git a/projects/asciilib2/src/asciilib/backends/test/TestGraphicsBackend.hx b/projects/asciilib2/src/asciilib/backends/test/TestGraphicsBackend.hx new file mode 100644 index 00000000..2b0ad71d --- /dev/null +++ b/projects/asciilib2/src/asciilib/backends/test/TestGraphicsBackend.hx @@ -0,0 +1,7 @@ +package asciilib.backends.test; + +import asciilib.GraphicsBackend; +import asciilib.Graphics; + +@:build(kiss.Kiss.build()) +class TestGraphicsBackend implements GraphicsBackend {} diff --git a/projects/asciilib2/src/asciilib/backends/test/TestGraphicsBackend.kiss b/projects/asciilib2/src/asciilib/backends/test/TestGraphicsBackend.kiss new file mode 100644 index 00000000..91ea88e4 --- /dev/null +++ b/projects/asciilib2/src/asciilib/backends/test/TestGraphicsBackend.kiss @@ -0,0 +1,12 @@ +(defprop &mut :Int letterWidth 0) +(defprop &mut :Int letterHeight 0) +(defprop &mut :Int drawCalled 0) + +(defmethod new [] 0) + +(defmethod :Void initialize [:String title :Int width :Int height :Int _letterWidth :Int _letterHeight] + (set letterWidth _letterWidth) + (set letterHeight _letterHeight)) + +(defmethod :Void draw [:Graphics graphics] + (+= drawCalled 1)) \ No newline at end of file diff --git a/projects/asciilib2/test.sh b/projects/asciilib2/test.sh old mode 100644 new mode 100755 index 0ee8ae95..bdbf6f54 --- a/projects/asciilib2/test.sh +++ b/projects/asciilib2/test.sh @@ -1,3 +1,4 @@ #! /bin/bash -haxe build.hxml \ No newline at end of file +haxelib dev asciilib . +(cd test && haxe build.hxml) \ No newline at end of file diff --git a/projects/asciilib2/test/build.hxml b/projects/asciilib2/test/build.hxml new file mode 100644 index 00000000..5a1139c4 --- /dev/null +++ b/projects/asciilib2/test/build.hxml @@ -0,0 +1,6 @@ +-lib kiss +-lib asciilib +-lib utest +-cp src +--main Main +--interp \ No newline at end of file diff --git a/projects/asciilib2/test/src/Main.hx b/projects/asciilib2/test/src/Main.hx new file mode 100644 index 00000000..20c94545 --- /dev/null +++ b/projects/asciilib2/test/src/Main.hx @@ -0,0 +1,20 @@ +package; + +import utest.Runner; +import utest.ui.Report; +import asciilib.GameLogic; +import asciilib.Game; +import asciilib.backends.test.*; + +class Main { + public static function newGame(logic:GameLogic) { + return new Game("Test game", 100, 40, 8, 12, logic, new TestGraphicsBackend()); + } + + static function main() { + var runner = new Runner(); + runner.addCases(cases); + Report.create(runner); + runner.run(); + } +} \ No newline at end of file diff --git a/projects/asciilib2/test/src/cases/DrawOnlyWhenModifiedTestCase.hx b/projects/asciilib2/test/src/cases/DrawOnlyWhenModifiedTestCase.hx new file mode 100644 index 00000000..60787044 --- /dev/null +++ b/projects/asciilib2/test/src/cases/DrawOnlyWhenModifiedTestCase.hx @@ -0,0 +1,36 @@ +package cases; + +import utest.Test; +import utest.Assert; +import asciilib.GameLogic; +import asciilib.Game; +import asciilib.Graphics; +import asciilib.Colors; +import asciilib.backends.test.TestGraphicsBackend; + +class DrawOnlyWhenModifiedGameLogic implements GameLogic { + var firstDraw = true; + + public function new() {} + + public function update(deltaSeconds:Float):Void {} + + public function draw(graphics:Void->Graphics):Void { + if (firstDraw) { + graphics().setLetter(0, 0, {char: "@", color: Colors.Red}); + firstDraw = false; + } + } +} + +class DrawOnlyWhenModifiedTestCase extends Test { + function testDrawOnlyWhenModified() { + var game = Main.newGame(new DrawOnlyWhenModifiedGameLogic()); + var graphicsBackend:TestGraphicsBackend = cast game.graphicsBackend; + game.draw(); + Assert.equals("@", game.graphics.getLetter(0, 0).char); + Assert.equals(1, graphicsBackend.drawCalled); + game.draw(); + Assert.equals(1, graphicsBackend.drawCalled); + } +} \ No newline at end of file