Skip to content

Simple Tester [clge]

Richel Bilderbeek edited this page Feb 17, 2018 · 2 revisions

SimpleTester(testing_rounds)

[RJCB: Awesome you do this testing! Next step is using an existing testing framework. Then this page can be removed :-) ]

[source]

This is a simple utility to test your games

Init

from clge import SimpleTester

t = SimpleTester(5)

Functions

  • Test(function, args): Runs the function without outputs and with arguments you gave
  • printTestResults(): Prints the result of the test
  • simulate_keyboard_press(char): Simulates keyboard button press
  • simulate_keyboard_release(char): Simulates keyboard button release
  • simulate_mouse_press(char): Simulates mouse button press
  • simulate_mouse_release(char): Simulates mouse button release
Warning: This are experimental functions:
  • CoverageStart(): Starts measuring codecov
  • CoverageStop(): Stops measuring codecov
  • getCoverage(): Prints codecov result in a table

Example

This (A real test example):

from clge import SimpleTester, Screen, generate_keymap

t = SimpleTester(5)

t.CoverageStart()

class SnakeTestException(Exception):
    def __init__(self, message):
        self.message = message

def test_screen():
    scr = Screen(20, 20, auto_clear_objects_list=True, timeout=.5, auto_timeout=False, default_color=39)
    return scr


def test_tail():
    tailX = [None] * 20
    tailY = [None] * 20
    for j in range(5):
        prevX = tailX[0]
        prevY = tailY[0]
        tailX[0] = j
        tailY[0] = j*2
        prev2X = 0
        prev2Y = 0
        for i in range(1, 20):
            prev2X = tailX[i]
            prev2Y = tailY[i]
            tailX[i] = prevX
            tailY[i] = prevY
            prevX = prev2X
            prevY = prev2Y

def test_keyboard():
    keys = generate_keymap({
        'up': 'w',
        'up_arrow': 'up',
        'down': 's',
        'down_arrow': 'down',
        'right': 'd',
        'right_arrow': 'right',
        'left': 'a',
        'left_arrow': 'left',
    })
    for key in keys:
        t.simulate_keyboard_press(keys[key].char)
        if keys[key].detect():
            pass
        else:
            t.simulate_keyboard_release(keys[key].char)
            raise SnakeTestException("Key {} in not detected".format(keys[key].char))
        t.simulate_keyboard_release(keys[key].char)

def test_collision(cases):
    for i in cases:
        if i[0] == i[1] and i[2] == i[3]:
            print(i)
        else:
            pass


t.Test(test_screen)
t.Test(test_keyboard)
t.Test(test_tail)
t.Test(test_collision, [[0, 1, 2, 3], [0, 0, 2, 4], [3, 1, 3, 3]])
t.CoverageStop()
t.printTestResults()
t.getCoverage()

Will result in:

WARNING: Code Coverage is an experimental function. It does not work good.
WARNING: Use it on your own risk

INFO: Testing: "test_screen"
INFO: Test "test_screen" passed


INFO: Testing: "test_screen"
INFO: Test "test_screen" passed


INFO: Testing: "test_screen"
INFO: Test "test_screen" passed


INFO: Testing: "test_screen"
INFO: Test "test_screen" passed


INFO: Testing: "test_screen"
INFO: Test "test_screen" passed


INFO: Testing: "test_keyboard"
Pressed: w
Released: w
WARNING: Test "test_keyboard" is not passed
ERROR: Key w in not detected


INFO: Testing: "test_keyboard"
Pressed: w
Released: w
Pressed: up
Released: up
Pressed: s
Released: s
Pressed: down
Released: down
Pressed: d
Released: d
Pressed: right
Released: right
Pressed: a
Released: a
Pressed: left
Released: left
INFO: Test "test_keyboard" passed


INFO: Testing: "test_keyboard"
Pressed: w
Released: w
Pressed: up
Released: up
Pressed: s
Released: s
Pressed: down
Released: down
Pressed: d
Released: d
Pressed: right
Released: right
Pressed: a
Released: a
Pressed: left
Released: left
INFO: Test "test_keyboard" passed


INFO: Testing: "test_keyboard"
Pressed: w
Released: w
Pressed: up
Released: up
Pressed: s
Released: s
Pressed: down
Released: down
Pressed: d
Released: d
Pressed: right
Released: right
Pressed: a
Released: a
Pressed: left
Released: left
INFO: Test "test_keyboard" passed


INFO: Testing: "test_keyboard"
Pressed: w
Released: w
Pressed: up
Released: up
Pressed: s
Released: s
Pressed: down
Released: down
Pressed: d
Released: d
Pressed: right
Released: right
Pressed: a
Released: a
Pressed: left
Released: left
INFO: Test "test_keyboard" passed


INFO: Testing: "test_tail"
INFO: Test "test_tail" passed


INFO: Testing: "test_tail"
INFO: Test "test_tail" passed


INFO: Testing: "test_tail"
INFO: Test "test_tail" passed


INFO: Testing: "test_tail"
INFO: Test "test_tail" passed


INFO: Testing: "test_tail"
INFO: Test "test_tail" passed


INFO: Testing: "test_collision"
INFO: Test "test_collision" passed


INFO: Testing: "test_collision"
INFO: Test "test_collision" passed


INFO: Testing: "test_collision"
INFO: Test "test_collision" passed


INFO: Testing: "test_collision"
INFO: Test "test_collision" passed


INFO: Testing: "test_collision"
INFO: Test "test_collision" passed


95% of test are passed (19 / 20)
Not passed:
1: test_keyboard --> Key w in not detected

Coverage:

Name                          Stmts   Miss  Cover
-------------------------------------------------
SnakeTests.py                    47     16    66%
clge\drawer.py                   96     87     9%
clge\key_detector.py             42     34    19%
clge\testing\simple_test.py      71     45    37%
-------------------------------------------------
TOTAL                           256    182    29%