Add Activity Testing API and check command to setup.py

./setup.py check now invokes tests in tests/ directory. tests directory should
have integration(UI tests) and unit(unit tests) sub directories, but it isn't
necessary to have any dir. of the above.
master
Sai Vineet 11 years ago committed by Daniel Narvaez
parent d4b4405c6c
commit 29738c9087

@ -24,6 +24,7 @@ import os
import sys import sys
import zipfile import zipfile
import tarfile import tarfile
import unittest
import shutil import shutil
import subprocess import subprocess
import re import re
@ -263,6 +264,56 @@ class Installer(Packager):
self.config.bundle.install_mime_type(self.config.source_dir) self.config.bundle.install_mime_type(self.config.source_dir)
def cmd_check(config, args):
"""Run tests for the activity"""
if len(args) > 1:
print "Usage: %prog check {integration.unit}"
return
run_unit_test = True
run_integration_test = True
if len(args) == 1:
if args[0] == "unit":
run_integration_test = False
elif args[0] == "integration":
run_unit_test = False
else:
print "Invalid argument: should be either integration or unit"
print "Running Tests"
test_path = os.path.join(config.source_dir, "tests")
if os.path.isdir(test_path):
unit_test_path = os.path.join(test_path, "unit")
integration_test_path = os.path.join(test_path, "integration")
sys.path.append(config.source_dir)
# Run Tests
if os.path.isdir(unit_test_path) and run_unit_test:
all_tests = unittest.defaultTestLoader.discover(unit_test_path)
unittest.TextTestRunner().run(all_tests)
elif not run_unit_test:
print "Not running unit tests"
else:
print 'No "unit" directory found.'
if os.path.isdir(integration_test_path) and run_integration_test:
all_tests = unittest.defaultTestLoader.discover(
integration_test_path)
unittest.TextTestRunner().run(all_tests)
elif not run_integration_test:
print "Not running integration tests"
else:
print 'No "integration" directory found.'
print "Finished testing"
else:
print "Error: No tests/ directory"
def cmd_dev(config, args): def cmd_dev(config, args):
"""Setup for development""" """Setup for development"""

@ -22,14 +22,26 @@ from __future__ import absolute_import
import logging import logging
import os import os
import time
import unittest import unittest
import subprocess import subprocess
from contextlib import contextmanager from contextlib import contextmanager
from sugar3.test import uitree from sugar3.test import uitree
import dbus
from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
class UITestCase(unittest.TestCase): class UITestCase(unittest.TestCase):
def __init__(self, *args, **kwargs):
unittest.TestCase(*args, **kwargs)
self.bundle_id = None
def setUp(self): def setUp(self):
logger = logging.getLogger() logger = logging.getLogger()
self._orig_level = logger.getEffectiveLevel() self._orig_level = logger.getEffectiveLevel()
@ -51,3 +63,19 @@ class UITestCase(unittest.TestCase):
raise raise
finally: finally:
process.terminate() process.terminate()
@contextmanager
def run_activity(self):
if bundle_id is not None:
process = subprocess.Popen(["sugar-launch", self.bundle_id])
else:
print "No bundle_id specified."
return
try:
yield
except:
logging.debug(uitree.get_root().dump())
raise
finally:
process.terminate()

Loading…
Cancel
Save