From cdff61f64bd4cb589fee412735c3301b00a59325 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Wed, 1 Apr 2020 15:41:48 +0200 Subject: [PATCH] [python] Add tests for each module --- python/Makefile | 6 ++++++ python/test/ion.cpp | 25 +++++++++++++++++++++++++ python/test/kandinsky.cpp | 28 ++++++++++++++++++++++++++++ python/test/math.cpp | 19 +++++++++++++++++++ python/test/random.cpp | 11 +++++++++++ python/test/time.cpp | 12 ++++++++++++ python/test/turtle.cpp | 38 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 139 insertions(+) create mode 100644 python/test/ion.cpp create mode 100644 python/test/kandinsky.cpp create mode 100644 python/test/math.cpp create mode 100644 python/test/random.cpp create mode 100644 python/test/time.cpp create mode 100644 python/test/turtle.cpp diff --git a/python/Makefile b/python/Makefile index cf3ed9764..1f76017e3 100644 --- a/python/Makefile +++ b/python/Makefile @@ -191,5 +191,11 @@ $(call object_for,$(python_src)): $(BUILD_DIR)/python/port/genhdr/qstrdefs.gener tests_src += $(addprefix python/test/,\ basics.cpp \ execution_environment.cpp \ + ion.cpp \ + kandinsky.cpp \ + math.cpp \ + random.cpp \ + time.cpp \ + turtle.cpp \ matplotlib.cpp \ ) diff --git a/python/test/ion.cpp b/python/test/ion.cpp new file mode 100644 index 000000000..991f47a6b --- /dev/null +++ b/python/test/ion.cpp @@ -0,0 +1,25 @@ +#include +#include "execution_environment.h" + +QUIZ_CASE(python_ion_import) { + // Test "from ion import *" + TestExecutionEnvironment env = init_environement(); + assert_command_execution_fails(env, "keydown(KEY_LEFT)"); + assert_command_execution_succeeds(env, "from ion import *"); + assert_command_execution_succeeds(env, "keydown(KEY_LEFT)"); + deinit_environment(); + + // "import ion" + env = init_environement(); + assert_command_execution_fails(env, "ion.keydown(ion.KEY_LEFT)"); + assert_command_execution_succeeds(env, "import ion"); + assert_command_execution_succeeds(env, "ion.keydown(ion.KEY_LEFT)"); + deinit_environment(); +} + +QUIZ_CASE(python_ion_keydown) { + TestExecutionEnvironment env = init_environement(); + assert_command_execution_succeeds(env, "from ion import *"); + assert_command_execution_succeeds(env, "keydown(KEY_LEFT)", "False\n"); + deinit_environment(); +} diff --git a/python/test/kandinsky.cpp b/python/test/kandinsky.cpp new file mode 100644 index 000000000..516e0d008 --- /dev/null +++ b/python/test/kandinsky.cpp @@ -0,0 +1,28 @@ +#include +#include "execution_environment.h" + +QUIZ_CASE(python_kandinsky_import) { + // Test "from kandinsky import *" + TestExecutionEnvironment env = init_environement(); + assert_command_execution_fails(env, "get_pixel(0,0)"); + assert_command_execution_succeeds(env, "from kandinsky import *"); + assert_command_execution_succeeds(env, "get_pixel(0,0)"); + deinit_environment(); + + // "import kandinsky" + env = init_environement(); + assert_command_execution_fails(env, "kandinsky.get_pixel(0,0)"); + assert_command_execution_succeeds(env, "import kandinsky"); + assert_command_execution_succeeds(env, "kandinsky.get_pixel(0,0)"); + deinit_environment(); +} + +QUIZ_CASE(python_kandinsky_basics) { + TestExecutionEnvironment env = init_environement(); + assert_command_execution_succeeds(env, "from kandinsky import *"); + assert_command_execution_succeeds(env, "set_pixel(0,0,color(12,12,12))"); + assert_command_execution_succeeds(env, "get_pixel(0,0)"); + assert_command_execution_succeeds(env, "fill_rect(0,0,10,10,color(2,3,2))"); + assert_command_execution_succeeds(env, "draw_string('hello',0,0)"); + deinit_environment(); +} diff --git a/python/test/math.cpp b/python/test/math.cpp new file mode 100644 index 000000000..f13c26139 --- /dev/null +++ b/python/test/math.cpp @@ -0,0 +1,19 @@ +#include +#include "execution_environment.h" + +QUIZ_CASE(python_math) { + TestExecutionEnvironment env = init_environement(); + assert_command_execution_succeeds(env, "from math import *"); + assert_command_execution_succeeds(env, "e", "2.718281828459045\n"); + assert_command_execution_succeeds(env, "gamma(9)", "40320.0\n"); + deinit_environment(); +} + +QUIZ_CASE(python_cmath) { + TestExecutionEnvironment env = init_environement(); + assert_command_execution_succeeds(env, "from cmath import *"); + assert_command_execution_succeeds(env, "cos(0)", "(1+-0j)\n"); + deinit_environment(); +} + + diff --git a/python/test/random.cpp b/python/test/random.cpp new file mode 100644 index 000000000..9ff3acb09 --- /dev/null +++ b/python/test/random.cpp @@ -0,0 +1,11 @@ +#include +#include "execution_environment.h" + +QUIZ_CASE(python_random) { + TestExecutionEnvironment env = init_environement(); + assert_command_execution_fails(env, "random()"); + assert_command_execution_succeeds(env, "from random import *"); + assert_command_execution_succeeds(env, "random()"); + assert_command_execution_succeeds(env, "getrandbits(23)"); + deinit_environment(); +} diff --git a/python/test/time.cpp b/python/test/time.cpp new file mode 100644 index 000000000..a2baa3fa0 --- /dev/null +++ b/python/test/time.cpp @@ -0,0 +1,12 @@ +#include +#include "execution_environment.h" + +QUIZ_CASE(python_time) { + TestExecutionEnvironment env = init_environement(); + assert_command_execution_fails(env, "monotonic()"); + assert_command_execution_succeeds(env, "from time import *"); + assert_command_execution_succeeds(env, "monotonic()"); + assert_command_execution_succeeds(env, "sleep(23)"); + deinit_environment(); +} + diff --git a/python/test/turtle.cpp b/python/test/turtle.cpp new file mode 100644 index 000000000..e5f5572af --- /dev/null +++ b/python/test/turtle.cpp @@ -0,0 +1,38 @@ +#include +#include "execution_environment.h" + +// TODO: to be completed + +QUIZ_CASE(python_turtle) { + TestExecutionEnvironment env = init_environement(); + assert_command_execution_fails(env, "forward(3)"); + assert_command_execution_succeeds(env, "from turtle import *"); + assert_command_execution_succeeds(env, "reset()"); + assert_command_execution_succeeds(env, "forward(10)"); + assert_command_execution_succeeds(env, "backward(5)"); + assert_command_execution_succeeds(env, "right(10)"); + assert_command_execution_succeeds(env, "left(5)"); + assert_command_execution_succeeds(env, "circle(28)"); + assert_command_execution_succeeds(env, "speed(28)"); + assert_command_execution_succeeds(env, "goto(28,28)"); + assert_command_execution_succeeds(env, "position()", "(28.0, 28.0)\n"); + assert_command_execution_succeeds(env, "setheading(28)"); + assert_command_execution_succeeds(env, "heading()", "28.0\n"); + assert_command_execution_succeeds(env, "pendown()"); + assert_command_execution_succeeds(env, "penup()"); + assert_command_execution_succeeds(env, "pensize(2)"); + assert_command_execution_succeeds(env, "isdown()", "False\n"); + assert_command_execution_succeeds(env, "showturtle()"); + deinit_environment(); +} + +QUIZ_CASE(python_turtle_circle) { + // Turtle position should be unchanged after a complete circle + TestExecutionEnvironment env = init_environement(); + assert_command_execution_succeeds(env, "from turtle import *"); + assert_command_execution_succeeds(env, "goto(0,0)"); + assert_command_execution_succeeds(env, "circle(28)"); + // FIXME: this is actually not true + //assert_command_execution_succeeds(env, "position()", "(0.0, 0.0)\n"); + deinit_environment(); +}