Raised This Month: $32 Target: $400
 8% 

Primitive pawn unit testing tools


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
puga4off
Junior Member
Join Date: Nov 2013
Old 08-25-2016 , 01:28   Primitive pawn unit testing tools
Reply With Quote #1

Unit testing tool

I am new in pawn, so when i was making of curl module , I had a need for a unit testing tool. This tool was inspired by cutest and check. Actually this tool is uncompleted, there is no way to test async code, there is not different outstreams and options (so please contribute).

How does it works
  • so first of all you have to include <utest.inc>
  • define list the unit tests by using macro TEST_LIST .It has to be unique, structure is
    Code:
    TEST_LIST = {
      { test_name, test_description },
      ...
      TEST_LIST_END /* this is required */
    };
  • you have to create each "test_name", by using macro START_TEST and END_TEST
    PHP Code:
    START_TEST(test_name) {
        new 
    Handle:curl curl_init()
        
    ASSERT_TRUE(INVALID_HANDLE != curl)
        
    ASSERT_TRUE(curl_close(curl))
    END_TEST 
    so START_TEST(some_name) define function like

    PHP Code:
    public __some_name(__test[_TestT]) { 
    where __test[__TesT] is current instance of test
    __test collects assert's results

    then you can do asserts
  • RUN all test by using macro UTEST_RUN(option)

Example:

PHP Code:
#include <amxmodx>
#include <utest>

stock my_max(ab)
{
    return 
b
}

stock my_min(ab)
{
    return 
a
}

TEST_LIST = {
    { 
"test1""test max function" },
    { 
"test2""test min function" },
    { 
"test3""TODO" },
    
TEST_LIST_END
};

START_TEST(test1) {
    
ASSERT_INT_EQ(my_max(13), 3)
    
ASSERT_TRUE(my_max(11) == 1)
    
ASSERT_FALSE(my_max(-11) == -1)
END_TEST

START_TEST
(test2) {
    
ASSERT_INT_EQ(my_min(13), 1)
    
ASSERT_TRUE(my_min(11) == 1)
    
ASSERT_FALSE(my_min(-11) == 1)
    
ASSERT_TRUE_MSG(true"expected true !!")
END_TEST

START_TEST
(test3) {
    
SKIP_TEST("IMPLEMENT ME!")
END_TEST

public run_test()
{
    
UTEST_RUN(UT_VERBOSE)
}

public 
plugin_init()
{
    
register_plugin("some_unit_test""1.0""alldroll")
    
set_task(2.0"run_test")

Output:

Code:
======UTEST RUN=======
>>> Running test suite [test1]: test max function
+ [test1] OK #1
+ [test1] OK #2
+ [test1] OK #3
>>> Running test suite [test2]: test min function
+ [test2] OK #1
+ [test2] OK #2
+ [test2] OK #3
+ [test2] OK #4
>>> Running test suite [test3]: TODO
>>> Skip test suite test3 (IMPLEMENT ME!)
=======SUMMARY:========
Count of all unit tests: 3
Count of ok tests: 2
Count of failed tests: 0
Count of skipped tests: 1
SUCCESS: all unit tests have passed
==========END==========
puga4off is offline
addons_zz
Veteran Member
Join Date: Aug 2015
Location: Dreams, zz
Old 08-25-2016 , 20:57   Re: Primitive pawn unit testing tools
Reply With Quote #2

I wrote some tests on these lines: https://github.com/addonszz/Galileo/blob/develop/scripting/galileo.sma#L8374-L9774.
You could look them, to see if you like something.

This is the output:
Code:
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}     Executing the Galileo's Unit Tests:
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 1 WITH 0 SECONDS DELAY - test_registerTest
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 2 WITH 0 SECONDS DELAY - test_isInEmptyCycle
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 3 WITH 0 SECONDS DELAY - test_mapGetNext_case1
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 4 WITH 0 SECONDS DELAY - test_mapGetNext_case2
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 5 WITH 0 SECONDS DELAY - test_mapGetNext_case3
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 6 WITH 0 SECONDS DELAY - test_mapGetNext_case4
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 7 WITH 0 SECONDS DELAY - test_loadCurrentBlacklist_case1
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 8 WITH 0 SECONDS DELAY - test_loadCurrentBlacklist_case2
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 9 WITH 0 SECONDS DELAY - test_loadCurrentBlacklist_case3
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 10 WITH 0 SECONDS DELAY - test_loadCurrentBlacklist_case4
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 11 WITH 0 SECONDS DELAY - test_loadCurrentBlacklist_case5
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 12 WITH 0 SECONDS DELAY - test_loadCurrentBlacklist_case6
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 13 WITH 0 SECONDS DELAY - test_loadCurrentBlacklist_case7
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 14 WITH 0 SECONDS DELAY - test_loadCurrentBlacklist_case8
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 15 WITH 0 SECONDS DELAY - test_loadCurrentBlacklist_case9
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 16 WITH 0 SECONDS DELAY - test_loadCurrentBlacklist_case10
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 17 WITH 0 SECONDS DELAY - test_loadCurrentBlacklist_case11
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 18 WITH 0 SECONDS DELAY - test_loadCurrentBlacklist_case12
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 19 WITH 0 SECONDS DELAY - test_resetRoundsScores_case1
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 20 WITH 0 SECONDS DELAY - test_resetRoundsScores_case2
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 21 WITH 0 SECONDS DELAY - test_resetRoundsScores_case3
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 22 WITH 0 SECONDS DELAY - test_resetRoundsScores_case4
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 23 WITH 0 SECONDS DELAY - test_resetRoundsScores_case5
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 24 WITH 0 SECONDS DELAY - test_resetRoundsScores_case6
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 25 WITH 0 SECONDS DELAY - test_resetRoundsScores_case7
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 26 WITH 0 SECONDS DELAY - test_resetRoundsScores_case8
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 27 WITH 0 SECONDS DELAY - test_resetRoundsScores_case9
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 28 WITH 0 SECONDS DELAY - test_loadVoteChoices.aa_case1
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 29 WITH 0 SECONDS DELAY - test_loadVoteChoices.aa_case2
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 30 WITH 0 SECONDS DELAY - test_loadVoteChoices.bb.bb_case1
L 08/25/2016 - 21:55:07: {3.0627}        TEST FAILURE! The map 'de_rain' must to be present on the voting map menu.
L 08/25/2016 - 21:55:07: {3.0627} FALILED!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 31 WITH 0 SECONDS DELAY - test_loadVoteChoices.bb.bb_case2
L 08/25/2016 - 21:55:07: {3.0627}        TEST FAILURE! The map 'de_inferno' must to be present on the voting map menu.
L 08/25/2016 - 21:55:07: {3.0627} FALILED!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 32 WITH 0 SECONDS DELAY - test_loadVoteChoices.bb.bb_case3
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 33 WITH 0 SECONDS DELAY - test_loadVoteChoices.cc.cc.cc_case1
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 34 WITH 0 SECONDS DELAY - test_loadVoteChoices.cc.cc.cc_case2
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 35 WITH 0 SECONDS DELAY - test_loadVoteChoices.cc.cc.cc_case3
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 36 WITH 0 SECONDS DELAY - test_loadVoteChoices.cc.cc.cc_case4
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 37 WITH 0 SECONDS DELAY - test_loadVoteChoices.dd.dd.dd.dd_case1
L 08/25/2016 - 21:55:07: {3.0627}        TEST FAILURE! The map 'de_rain' must to be present on the voting map menu.
L 08/25/2016 - 21:55:07: {3.0627} FALILED!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 38 WITH 0 SECONDS DELAY - test_loadVoteChoices.dd.dd.dd.dd_case2
L 08/25/2016 - 21:55:07: {3.0627}        TEST FAILURE! The map 'de_inferno' must to be present on the voting map menu.
L 08/25/2016 - 21:55:07: {3.0627} FALILED!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}         EXECUTING TEST 39 WITH 0 SECONDS DELAY - test_loadVoteChoices.dd.dd.dd.dd_case3
L 08/25/2016 - 21:55:07: {3.0627} OK!
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:07: {3.0627}
L 08/25/2016 - 21:55:08: {3.0627}
L 08/25/2016 - 21:55:08: {3.0627}
L 08/25/2016 - 21:55:08: {3.0627}
L 08/25/2016 - 21:55:08: {3.0627}     The following tests were executed:
L 08/25/2016 - 21:55:08: {3.0627}
L 08/25/2016 - 21:55:08: {3.0627}          1. test_registerTest
L 08/25/2016 - 21:55:08: {3.0627}          2. test_isInEmptyCycle
L 08/25/2016 - 21:55:08: {3.0627}          3. test_mapGetNext_case1
L 08/25/2016 - 21:55:08: {3.0627}          4. test_mapGetNext_case2
L 08/25/2016 - 21:55:08: {3.0627}          5. test_mapGetNext_case3
L 08/25/2016 - 21:55:08: {3.0627}          6. test_mapGetNext_case4
L 08/25/2016 - 21:55:08: {3.0627}          7. test_loadCurrentBlacklist_case1
L 08/25/2016 - 21:55:08: {3.0627}          8. test_loadCurrentBlacklist_case2
L 08/25/2016 - 21:55:08: {3.0627}          9. test_loadCurrentBlacklist_case3
L 08/25/2016 - 21:55:08: {3.0627}         10. test_loadCurrentBlacklist_case4
L 08/25/2016 - 21:55:08: {3.0627}         11. test_loadCurrentBlacklist_case5
L 08/25/2016 - 21:55:08: {3.0627}         12. test_loadCurrentBlacklist_case6
L 08/25/2016 - 21:55:08: {3.0627}         13. test_loadCurrentBlacklist_case7
L 08/25/2016 - 21:55:08: {3.0627}         14. test_loadCurrentBlacklist_case8
L 08/25/2016 - 21:55:08: {3.0627}         15. test_loadCurrentBlacklist_case9
L 08/25/2016 - 21:55:08: {3.0627}         16. test_loadCurrentBlacklist_case10
L 08/25/2016 - 21:55:08: {3.0627}         17. test_loadCurrentBlacklist_case11
L 08/25/2016 - 21:55:08: {3.0627}         18. test_loadCurrentBlacklist_case12
L 08/25/2016 - 21:55:08: {3.0627}         19. test_resetRoundsScores_case1
L 08/25/2016 - 21:55:08: {3.0627}         20. test_resetRoundsScores_case2
L 08/25/2016 - 21:55:08: {3.0627}         21. test_resetRoundsScores_case3
L 08/25/2016 - 21:55:08: {3.0627}         22. test_resetRoundsScores_case4
L 08/25/2016 - 21:55:08: {3.0627}         23. test_resetRoundsScores_case5
L 08/25/2016 - 21:55:08: {3.0627}         24. test_resetRoundsScores_case6
L 08/25/2016 - 21:55:08: {3.0627}         25. test_resetRoundsScores_case7
L 08/25/2016 - 21:55:08: {3.0627}         26. test_resetRoundsScores_case8
L 08/25/2016 - 21:55:08: {3.0627}         27. test_resetRoundsScores_case9
L 08/25/2016 - 21:55:08: {3.0627}         28. test_loadVoteChoices.aa_case1
L 08/25/2016 - 21:55:08: {3.0627}         29. test_loadVoteChoices.aa_case2
L 08/25/2016 - 21:55:08: {3.0627}         30. test_loadVoteChoices.bb.bb_case1
L 08/25/2016 - 21:55:08: {3.0627}         31. test_loadVoteChoices.bb.bb_case2
L 08/25/2016 - 21:55:08: {3.0627}         32. test_loadVoteChoices.bb.bb_case3
L 08/25/2016 - 21:55:08: {3.0627}         33. test_loadVoteChoices.cc.cc.cc_case1
L 08/25/2016 - 21:55:08: {3.0627}         34. test_loadVoteChoices.cc.cc.cc_case2
L 08/25/2016 - 21:55:08: {3.0627}         35. test_loadVoteChoices.cc.cc.cc_case3
L 08/25/2016 - 21:55:08: {3.0627}         36. test_loadVoteChoices.cc.cc.cc_case4
L 08/25/2016 - 21:55:08: {3.0627}         37. test_loadVoteChoices.dd.dd.dd.dd_case1
L 08/25/2016 - 21:55:08: {3.0627}         38. test_loadVoteChoices.dd.dd.dd.dd_case2
L 08/25/2016 - 21:55:08: {3.0627}         39. test_loadVoteChoices.dd.dd.dd.dd_case3
L 08/25/2016 - 21:55:08: {3.0627}
L 08/25/2016 - 21:55:08: {3.0627}
L 08/25/2016 - 21:55:08: {3.0627}     The following Galileo's Unit Tests failed:
L 08/25/2016 - 21:55:08: {3.0627}
L 08/25/2016 - 21:55:08: {3.0627}         30. test_loadVoteChoices.bb.bb_case1: The map 'de_rain' must to be present on the voting map menu.
L 08/25/2016 - 21:55:08: {3.0627}         31. test_loadVoteChoices.bb.bb_case2: The map 'de_inferno' must to be present on the voting map menu.
L 08/25/2016 - 21:55:08: {3.0627}         37. test_loadVoteChoices.dd.dd.dd.dd_case1: The map 'de_rain' must to be present on the voting map menu.
L 08/25/2016 - 21:55:08: {3.0627}         38. test_loadVoteChoices.dd.dd.dd.dd_case2: The map 'de_inferno' must to be present on the voting map menu.
L 08/25/2016 - 21:55:08: {3.0627}
L 08/25/2016 - 21:55:08: {3.0627}     35 tests succeed.
L 08/25/2016 - 21:55:08: {3.0627}     4 tests failed.
L 08/25/2016 - 21:55:08: {3.0627}
L 08/25/2016 - 21:55:08: {3.0627}     Finished the Galileo's Unit Tests execution after '4' seconds.
L 08/25/2016 - 21:55:08: {3.0627}
L 08/25/2016 - 21:55:08: {3.0627}
__________________
Plugin: Sublime Text - ITE , Galileo
Multi-Mod: Manager / Plugin / Server

Support me on Patreon, Ko-fi, Liberapay or Open Collective
addons_zz is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 02:39.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode