| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 | # -*- coding: utf-8 -*-"""Shared testing code."""import osimport subprocessimport tracebackfrom os.path import dirname, join, abspathfrom splinter import Browserfrom unittest2 import TestCaseclass SearxTestLayer:    """Base layer for non-robot tests."""    __name__ = u'SearxTestLayer'    def setUp(cls):        pass    setUp = classmethod(setUp)    def tearDown(cls):        pass    tearDown = classmethod(tearDown)    def testSetUp(cls):        pass    testSetUp = classmethod(testSetUp)    def testTearDown(cls):        pass    testTearDown = classmethod(testTearDown)class SearxRobotLayer():    """Searx Robot Test Layer"""    def setUp(self):        os.setpgrp()  # create new process group, become its leader        # get program paths        webapp = os.path.join(            os.path.abspath(os.path.dirname(os.path.realpath(__file__))),            'webapp.py'        )        exe = 'python'        # set robot settings path        os.environ['SEARX_DEBUG'] = '1'        os.environ['SEARX_SETTINGS_PATH'] = abspath(            dirname(__file__) + '/settings_robot.yml')        # run the server        self.server = subprocess.Popen(            [exe, webapp],            stdout=subprocess.PIPE,            stderr=subprocess.STDOUT        )        if hasattr(self.server.stdout, 'read1'):            print(self.server.stdout.read1(1024).decode('utf-8'))    def tearDown(self):        os.kill(self.server.pid, 9)        # remove previously set environment variable        del os.environ['SEARX_SETTINGS_PATH']# SEARXROBOTLAYER = SearxRobotLayer()def run_robot_tests(tests):    print('Running {0} tests'.format(len(tests)))    for test in tests:        with Browser('firefox', headless=True) as browser:            test(browser)class SearxTestCase(TestCase):    """Base test case for non-robot tests."""    layer = SearxTestLayer    def setattr4test(self, obj, attr, value):        """        setattr(obj, attr, value)        but reset to the previous value in the cleanup.        """        previous_value = getattr(obj, attr)        def cleanup_patch():            setattr(obj, attr, previous_value)        self.addCleanup(cleanup_patch)        setattr(obj, attr, value)if __name__ == '__main__':    import sys    # test cases    from tests import robot    base_dir = abspath(join(dirname(__file__), '../tests'))    if sys.argv[1] == 'robot':        test_layer = SearxRobotLayer()        errors = False        try:            test_layer.setUp()            run_robot_tests([getattr(robot, x) for x in dir(robot) if x.startswith('test_')])        except Exception:            errors = True            print('Error occured: {0}'.format(traceback.format_exc()))        test_layer.tearDown()        sys.exit(1 if errors else 0)
 |