summaryrefslogtreecommitdiff
path: root/test-cli/test/runners/simple.py
blob: 084a5b88330469f4e15f959f3a192927d464085b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#!/usr/bin/env python

"""
Simple Test Runner for unittest module

"""

import sys
import unittest
import os
from test.helpers.globalVariables import globalVar
from test.helpers.testsrv_db import TestSrv_Database



class SimpleTestRunner:
    """ A Test Runner that shows results in a simple human-readable format.  

    As example, a common output is:
        This is a test short description : PASS
        This is another test short description : FAIL
        ---------------------------------------------

    """
    __pgObj = None

    def __init__(self, pgObj, stream=sys.stderr, verbosity=0):
        self.stream = stream
        self.verbosity = verbosity
        self.__pgObj = pgObj

    def writeUpdate(self, message):
        self.stream.write(message)

    def run(self, test):
        """ Run the given test case or Test Suite.

        """
        result = TextTestResult(self, self.__pgObj)
        test(result)
        result.testsRun
        # self.writeUpdate("---------------------------------------------\n")
        return result

class TextTestResult(unittest.TestResult):
    # Print in terminal with colors
    PASS = '\033[32mPASS\033[0m\n'
    FAIL = '\033[31mFAIL\033[0m\n'
    ERROR = '\033[31mERROR\033[0m\n'

    __pgObj = None

    def __init__(self, runner, pgObj):
        unittest.TestResult.__init__(self)
        self.runner = runner
        self.result = self.ERROR
        self.__pgObj = pgObj

    def startTest(self, test):
        unittest.TestResult.startTest(self, test)
        self.runner.writeUpdate("%s : " % test.shortDescription())
        # SEND TO DB THE UPDATE THAT WE RUN EACH TEST
        self.__pgObj.update_set_test_row(globalVar.station, globalVar.testid_ctl, globalVar.g_uuid, test.shortDescription(), "RUNNING")
        # psdb = TestSrv_Database()
        # psdb.open("setup.xml")
        # psdb.update_set_test_row(globalVar.station, globalVar.testid_ctl, globalVar.g_uuid, test.shortDescription(), "RUNNING")

    def addSuccess(self, test):
        unittest.TestResult.addSuccess(self, test)
        self.result=self.PASS

    def addError(self, test, err):
        unittest.TestResult.addError(self, test, err)
        test.longMessage = err[1]
        self.result = self.ERROR

    def addFailure(self, test, err):
        unittest.TestResult.addFailure(self, test, err)
        test.longMessage=err[1]
        self.result = self.FAIL

    def stopTest(self, test):
        unittest.TestResult.stopTest(self, test)
        # display: print test result
        self.runner.writeUpdate(self.result)
        # DB: PREPARE THE DATA TO BE INSERTED
        dbdata = {}
        dbdata['uuid'] = globalVar.g_uuid
        dbdata['name'] = test.shortDescription()
        dbdata['result'] = self.result
        dbdata['msg'] = str(test.longMessage)
        #CONVERT FANCY FAIL AND PASS
        if self.result==self.PASS: simple_result="TRUE"
        if self.result == self.FAIL: simple_result = "FALSE"
        elif self.result == self.ERROR: simple_result = "FALSE"
        #SEND TO DB THE RESULT OF THE TEST
        # psdb = TestSrv_Database()
        # psdb.open("setup.xml")
        self.__pgObj.add_test_to_batch(globalVar.g_uuid, test.shortDescription(), globalVar.testid_ctl, simple_result, globalVar.g_mid, test.longMessage)
        # psdb.add_test_to_batch(globalVar.g_uuid, test.shortDescription(), globalVar.testid_ctl, simple_result, globalVar.g_mid, test.longMessage)