Skip to content

Commit

Permalink
Merge pull request #158 from glitchassassin/feature/fixing-tests
Browse files Browse the repository at this point in the history
Feature/fixing tests
  • Loading branch information
glitchassassin authored Aug 6, 2020
2 parents 0bd7549 + bcaf1f5 commit 4a67a76
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 323 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

# Build files
/build
/dist
/Lackey.egg-info
/docs/build

Expand Down
8 changes: 3 additions & 5 deletions appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,15 @@ environment:
secure: 1+JDFvadY94ojZGhbEeZ/G0of7zzFWwXaj4Mx0Th0Lo=
matrix:

# Python 2.7.12 is the latest version and is not pre-installed.

- PYTHON: "C:\\Python27"
- PYTHON: "C:\\Python27-x64"

- PYTHON: "C:\\Python36"
- PYTHON: "C:\\Python36-x64"

- PYTHON: "C:\\Python37"
- PYTHON: "C:\\Python37-x64"

- PYTHON: "C:\\Python38"
- PYTHON: "C:\\Python38-x64"

install:
# If there is a newer build queued for the same PR, cancel this one.
# The AppVeyor 'rollout builds' option is supposed to serve the same
Expand Down
321 changes: 3 additions & 318 deletions tests/appveyor_test_cases.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,6 @@
import os
import lackey

# Python 2/3 compatibility
try:
unittest.TestCase.assertRegex
except AttributeError:
unittest.TestCase.assertRegex = unittest.TestCase.assertRegexpMatches

class TestMouseMethods(unittest.TestCase):
def setUp(self):
self.mouse = lackey.Mouse()
Expand All @@ -25,6 +19,7 @@ def test_movement(self):
self.assertEqual(self.mouse.getPos().getTuple(), (100, 200))
lackey.wheel(self.mouse.getPos(), 0, 3) # Mostly just verifying it doesn't crash


class TestKeyboardMethods(unittest.TestCase):
def setUp(self):
self.kb = lackey.Keyboard()
Expand All @@ -40,79 +35,6 @@ def test_keys(self):
# you run this test, the SHIFT, CTRL, or ALT keys might not have been released
# properly.

class TestAppMethods(unittest.TestCase):
def test_getters(self):
if sys.platform.startswith("win"):
app = lackey.App("notepad.exe tests\\test_cases.py")
app2 = lackey.App("notepad.exe tests\\test_cases.py")
#app.setUsing("test_cases.py")
app.open()
app2.open()
lackey.sleep(1)
app2.close()
app.focus()
self.assertEqual(app.getName(), "notepad.exe")
self.assertTrue(app.isRunning())
self.assertRegex(app.getWindow(), "test_cases(.py)? - Notepad")
self.assertNotEqual(app.getPID(), -1)
region = app.window()
self.assertIsInstance(region, lackey.Region)
self.assertGreater(region.getW(), 0)
self.assertGreater(region.getH(), 0)
app.close()
elif sys.platform == "darwin":
if "TRAVIS" in os.environ:
return # Skip these tests in travis build environment
a = lackey.App("+open -a TextEdit tests/test_cases.py")
a2 = lackey.App("open -a TextEdit tests/appveyor_test_cases.py")
lackey.sleep(1)
app = lackey.App("test_cases.py")
app2 = lackey.App("appveyor_test_cases.py")
#app.setUsing("test_cases.py")
lackey.sleep(1)
app2.close()
app.focus()
print(app.getPID())
self.assertTrue(app.isRunning())
self.assertEqual(app.getName()[-len("TextEdit"):], "TextEdit")
#self.assertEqual(app.getWindow(), "test_cases.py") # Doesn't work on `open`-triggered apps
self.assertNotEqual(app.getPID(), -1)
region = app.window()
self.assertIsInstance(region, lackey.Region)
self.assertGreater(region.getW(), 0)
self.assertGreater(region.getH(), 0)
app.close()
else:
raise NotImplementedError("Platforms supported include: Windows, OS X")

def test_launchers(self):
if sys.platform.startswith("win"):
app = lackey.App("notepad.exe")
app.setUsing("tests\\test_cases.py")
app.open()
lackey.wait(1)
self.assertEqual(app.getName(), "notepad.exe")
self.assertTrue(app.isRunning())
self.assertRegex(app.getWindow(), "test_cases(.py)? - Notepad")
self.assertNotEqual(app.getPID(), -1)
app.close()
lackey.wait(0.9)
elif sys.platform.startswith("darwin"):
if "TRAVIS" in os.environ:
return # Skip these tests in travis build environment
a = lackey.App("open")
a.setUsing("-a TextEdit tests/test_cases.py")
a.open()
lackey.wait(1)
app = lackey.App("test_cases.py")
self.assertTrue(app.isRunning())
self.assertEqual(app.getName()[-len("TextEdit"):], "TextEdit")
#self.assertEqual(app.getWindow(), "test_cases.py") # Doesn't work on `open`-triggered apps
self.assertNotEqual(app.getPID(), -1)
app.close()
lackey.wait(0.9)
else:
raise NotImplementedError("Platforms supported include: Windows, OS X")

class TestScreenMethods(unittest.TestCase):
def setUp(self):
Expand All @@ -128,7 +50,8 @@ def testScreenInfo(self):

def testCapture(self):
tpath = self.primaryScreen.capture()
self.assertIsInstance(tpath, numpy.ndarray)
self.assertIsInstance(tpath, str)


class TestLocationMethods(unittest.TestCase):
def setUp(self):
Expand Down Expand Up @@ -170,7 +93,6 @@ def test_screen_methods(self):
self.assertIsInstance(self.test_loc.getColor(), numpy.ndarray) # No color outside all screens, should return None



class TestPatternMethods(unittest.TestCase):
def setUp(self):
self.file_path = os.path.join("tests", "test_pattern.png")
Expand Down Expand Up @@ -319,7 +241,6 @@ def test_highlighter(self):
center_region.highlight()
center_region.highlight(2, "blue")
center_region.highlight(True, 0)
print("Doing stuff...")
time.sleep(1)
center_region.highlight(False)

Expand Down Expand Up @@ -356,241 +277,5 @@ def test_getters(self):
with self.assertRaises(TypeError) as context:
self.generic_event.getChanges()

class TestInterfaces(unittest.TestCase):
""" This class tests Sikuli interface compatibility on a surface level.
Makes sure the class has the correct methods, and that the methods have the
expected number of arguments.
"""
def test_app_interface(self):
""" Checking App class interface methods """
## Class methods
self.assertHasMethod(lackey.App, "pause", 2)
self.assertHasMethod(lackey.App, "open", 2)
self.assertHasMethod(lackey.App, "focus", 2)
self.assertHasMethod(lackey.App, "close", 2)
self.assertHasMethod(lackey.App, "focusedWindow", 1)

## Instance methods
app = lackey.App()
self.assertHasMethod(app, "__init__", 2)
self.assertHasMethod(app, "isRunning", 2)
self.assertHasMethod(app, "hasWindow", 1)
self.assertHasMethod(app, "getWindow", 1)
self.assertHasMethod(app, "getPID", 1)
self.assertHasMethod(app, "getName", 1)
self.assertHasMethod(app, "setUsing", 2)
self.assertHasMethod(app, "open", 2)
self.assertHasMethod(app, "focus", 1)
self.assertHasMethod(app, "close", 1)
self.assertHasMethod(app, "window", 2)

def test_region_interface(self):
""" Checking Region class interface methods """
self.assertHasMethod(lackey.Region, "__init__", 1) # uses *args
self.assertHasMethod(lackey.Region, "setX", 2)
self.assertHasMethod(lackey.Region, "setY", 2)
self.assertHasMethod(lackey.Region, "setW", 2)
self.assertHasMethod(lackey.Region, "setH", 2)
self.assertHasMethod(lackey.Region, "moveTo", 2)
self.assertHasMethod(lackey.Region, "setROI", 1) # uses *args
self.assertHasMethod(lackey.Region, "setRect", 1) # uses *args
self.assertHasMethod(lackey.Region, "morphTo", 2)
self.assertHasMethod(lackey.Region, "getX", 1)
self.assertHasMethod(lackey.Region, "getY", 1)
self.assertHasMethod(lackey.Region, "getW", 1)
self.assertHasMethod(lackey.Region, "getH", 1)
self.assertHasMethod(lackey.Region, "getTopLeft", 1)
self.assertHasMethod(lackey.Region, "getTopRight", 1)
self.assertHasMethod(lackey.Region, "getBottomLeft", 1)
self.assertHasMethod(lackey.Region, "getBottomRight", 1)
self.assertHasMethod(lackey.Region, "getScreen", 1)
self.assertHasMethod(lackey.Region, "getLastMatch", 1)
self.assertHasMethod(lackey.Region, "getLastMatches", 1)
self.assertHasMethod(lackey.Region, "getTime", 1)
self.assertHasMethod(lackey.Region, "isRegionValid", 1)
self.assertHasMethod(lackey.Region, "setAutoWaitTimeout", 2)
self.assertHasMethod(lackey.Region, "getAutoWaitTimeout", 1)
self.assertHasMethod(lackey.Region, "setWaitScanRate", 2)
self.assertHasMethod(lackey.Region, "getWaitScanRate", 1)
self.assertHasMethod(lackey.Region, "get", 2)
self.assertHasMethod(lackey.Region, "getRow", 3)
self.assertHasMethod(lackey.Region, "getCol", 3)
self.assertHasMethod(lackey.Region, "setRows", 2)
self.assertHasMethod(lackey.Region, "setCols", 2)
self.assertHasMethod(lackey.Region, "setRaster", 3)
self.assertHasMethod(lackey.Region, "getCell", 3)
self.assertHasMethod(lackey.Region, "isRasterValid", 1)
self.assertHasMethod(lackey.Region, "getRows", 1)
self.assertHasMethod(lackey.Region, "getCols", 1)
self.assertHasMethod(lackey.Region, "getRowH", 1)
self.assertHasMethod(lackey.Region, "getColW", 1)
self.assertHasMethod(lackey.Region, "offset", 3)
self.assertHasMethod(lackey.Region, "inside", 1)
self.assertHasMethod(lackey.Region, "grow", 3)
self.assertHasMethod(lackey.Region, "nearby", 2)
self.assertHasMethod(lackey.Region, "above", 2)
self.assertHasMethod(lackey.Region, "below", 2)
self.assertHasMethod(lackey.Region, "left", 2)
self.assertHasMethod(lackey.Region, "right", 2)
self.assertHasMethod(lackey.Region, "find", 2)
self.assertHasMethod(lackey.Region, "findAll", 2)
self.assertHasMethod(lackey.Region, "wait", 3)
self.assertHasMethod(lackey.Region, "waitVanish", 3)
self.assertHasMethod(lackey.Region, "has", 2)
self.assertHasMethod(lackey.Region, "exists", 3)
self.assertHasMethod(lackey.Region, "click", 3)
self.assertHasMethod(lackey.Region, "doubleClick", 3)
self.assertHasMethod(lackey.Region, "rightClick", 3)
self.assertHasMethod(lackey.Region, "highlight", 1) # Uses *args
self.assertHasMethod(lackey.Region, "hover", 2)
self.assertHasMethod(lackey.Region, "dragDrop", 4)
self.assertHasMethod(lackey.Region, "drag", 2)
self.assertHasMethod(lackey.Region, "dropAt", 3)
self.assertHasMethod(lackey.Region, "type", 1) # Uses *args
self.assertHasMethod(lackey.Region, "paste", 1) # Uses *args
self.assertHasMethod(lackey.Region, "text", 1)
self.assertHasMethod(lackey.Region, "mouseDown", 2)
self.assertHasMethod(lackey.Region, "mouseUp", 2)
self.assertHasMethod(lackey.Region, "mouseMove", 3)
self.assertHasMethod(lackey.Region, "wheel", 1) # Uses *args
self.assertHasMethod(lackey.Region, "keyDown", 2)
self.assertHasMethod(lackey.Region, "keyUp", 2)
# OCR Methods
self.assertHasMethod(lackey.Region, "findText", 2)
self.assertHasMethod(lackey.Region, "findWord", 2)
self.assertHasMethod(lackey.Region, "findLine", 2)
self.assertHasMethod(lackey.Region, "waitText", 3)
self.assertHasMethod(lackey.Region, "hasText", 2)
self.assertHasMethod(lackey.Region, "existsText", 3)
self.assertHasMethod(lackey.Region, "waitVanishText", 3)
self.assertHasMethod(lackey.Region, "findAllText", 2)
# Event Handler Methods
self.assertHasMethod(lackey.Region, "onAppear", 3)
self.assertHasMethod(lackey.Region, "onVanish", 3)
self.assertHasMethod(lackey.Region, "onChange", 3)
self.assertHasMethod(lackey.Region, "isChanged", 3)
self.assertHasMethod(lackey.Region, "observe", 2)
self.assertHasMethod(lackey.Region, "observeInBackground", 2)
self.assertHasMethod(lackey.Region, "stopObserver", 1)
self.assertHasMethod(lackey.Region, "hasObserver", 1)
self.assertHasMethod(lackey.Region, "isObserving", 1)
self.assertHasMethod(lackey.Region, "hasEvents", 1)
self.assertHasMethod(lackey.Region, "getEvents", 1)
self.assertHasMethod(lackey.Region, "getEvent", 2)
self.assertHasMethod(lackey.Region, "setInactive", 2)
self.assertHasMethod(lackey.Region, "setActive", 2)
# FindFailed event methods
self.assertHasMethod(lackey.Region, "setFindFailedResponse", 2)
self.assertHasMethod(lackey.Region, "setFindFailedHandler", 2)
self.assertHasMethod(lackey.Region, "getFindFailedResponse", 1)
self.assertHasMethod(lackey.Region, "setThrowException", 2)
self.assertHasMethod(lackey.Region, "getThrowException", 1)
self.assertHasMethod(lackey.Region, "_raiseFindFailed", 2)
self.assertHasMethod(lackey.Region, "_findFailedPrompt", 2)

def test_pattern_interface(self):
""" Checking App class interface methods """
self.assertHasMethod(lackey.Pattern, "__init__", 2)
self.assertHasMethod(lackey.Pattern, "similar", 2)
self.assertHasMethod(lackey.Pattern, "exact", 1)
self.assertHasMethod(lackey.Pattern, "targetOffset", 3)
self.assertHasMethod(lackey.Pattern, "getFilename", 1)
self.assertHasMethod(lackey.Pattern, "getTargetOffset", 1)

def test_match_interface(self):
""" Checking Match class interface methods """
self.assertHasMethod(lackey.Match, "getScore", 1)
self.assertHasMethod(lackey.Match, "getTarget", 1)

def test_location_interface(self):
""" Checking Location class interface methods """
self.assertHasMethod(lackey.Location, "__init__", 3)
self.assertHasMethod(lackey.Location, "getX", 1)
self.assertHasMethod(lackey.Location, "getY", 1)
self.assertHasMethod(lackey.Location, "setLocation", 3)
self.assertHasMethod(lackey.Location, "offset", 3)
self.assertHasMethod(lackey.Location, "above", 2)
self.assertHasMethod(lackey.Location, "below", 2)
self.assertHasMethod(lackey.Location, "left", 2)
self.assertHasMethod(lackey.Location, "right", 2)

def test_screen_interface(self):
""" Checking Screen class interface methods """
self.assertHasMethod(lackey.Screen, "__init__", 2)
self.assertHasMethod(lackey.Screen, "getNumberScreens", 1)
self.assertHasMethod(lackey.Screen, "getBounds", 1)
self.assertHasMethod(lackey.Screen, "capture", 1) # Uses *args
self.assertHasMethod(lackey.Screen, "selectRegion", 2)

def test_platform_manager_interface(self):
""" Checking Platform Manager interface methods """

## Screen methods
self.assertHasMethod(lackey.PlatformManager, "getBitmapFromRect", 5)
self.assertHasMethod(lackey.PlatformManager, "getScreenBounds", 2)
self.assertHasMethod(lackey.PlatformManager, "getScreenDetails", 1)
self.assertHasMethod(lackey.PlatformManager, "isPointVisible", 3)

## Clipboard methods
self.assertHasMethod(lackey.PlatformManager, "osCopy", 1)
self.assertHasMethod(lackey.PlatformManager, "osPaste", 1)

## Window methods
self.assertHasMethod(lackey.PlatformManager, "getWindowByTitle", 3)
self.assertHasMethod(lackey.PlatformManager, "getWindowByPID", 3)
self.assertHasMethod(lackey.PlatformManager, "getWindowRect", 2)
self.assertHasMethod(lackey.PlatformManager, "focusWindow", 2)
self.assertHasMethod(lackey.PlatformManager, "getWindowTitle", 2)
self.assertHasMethod(lackey.PlatformManager, "getWindowPID", 2)
self.assertHasMethod(lackey.PlatformManager, "getForegroundWindow", 1)

## Process methods
self.assertHasMethod(lackey.PlatformManager, "isPIDValid", 2)
self.assertHasMethod(lackey.PlatformManager, "killProcess", 2)
self.assertHasMethod(lackey.PlatformManager, "getProcessName", 2)


def assertHasMethod(self, cls, mthd, args=0):
""" Custom test to make sure a class has the specified method (and that it takes `args` parameters) """
self.assertTrue(callable(getattr(cls, mthd, None)))
if args > 0:
self.assertEqual(len(inspect.getargspec(getattr(cls, mthd))[0]), args)

class TestConvenienceFunctions(unittest.TestCase):
def test_function_defs(self):
self.assertHasMethod(lackey, "sleep", 1)
self.assertHasMethod(lackey, "exit", 1)
self.assertHasMethod(lackey, "setShowActions", 1)
self.assertHasMethod(lackey, "getBundlePath", 0)
self.assertHasMethod(lackey, "getBundleFolder", 0)
self.assertHasMethod(lackey, "setBundlePath", 1)
self.assertHasMethod(lackey, "getImagePath", 0)
self.assertHasMethod(lackey, "addImagePath", 1)
self.assertHasMethod(lackey, "addHTTPImagePath", 1)
self.assertHasMethod(lackey, "getParentPath", 0)
self.assertHasMethod(lackey, "getParentFolder", 0)
self.assertHasMethod(lackey, "makePath", 0) # Uses *args
self.assertHasMethod(lackey, "makeFolder", 0) # Uses *args
self.assertHasMethod(lackey, "unzip", 2)
self.assertHasMethod(lackey, "popat", 0) # Uses *args
self.assertHasMethod(lackey, "popup", 2)
self.assertHasMethod(lackey, "popError", 2)
self.assertHasMethod(lackey, "popAsk", 2)
self.assertHasMethod(lackey, "input", 4)
self.assertHasMethod(lackey, "inputText", 5)
self.assertHasMethod(lackey, "select", 4)
self.assertHasMethod(lackey, "popFile", 1)

def test_renamed_builtin_functions(self):
self.assertEqual(lackey.exit_, sys.exit)
self.assertEqual(lackey.input_, input)
self.assertEqual(lackey.type_, type)

def assertHasMethod(self, cls, mthd, args=0):
""" Custom test to make sure a class has the specified method (and that it takes `args` parameters) """
self.assertTrue(callable(getattr(cls, mthd, None)))
if args > 0:
self.assertEqual(len(inspect.getargspec(getattr(cls, mthd))[0]), args)

if __name__ == '__main__':
unittest.main()

0 comments on commit 4a67a76

Please sign in to comment.