Skip to content

Commit

Permalink
Add screenshot test for OSX (kivy#458)
Browse files Browse the repository at this point in the history
* Add screenshot test for OSX

* Fix style and mkdir errors

* Disable test for Py3 until PyOBJus works
  • Loading branch information
KeyWeeUsr authored and AndreMiras committed Apr 24, 2023
1 parent e5adcfc commit b10f230
Showing 1 changed file with 91 additions and 0 deletions.
91 changes: 91 additions & 0 deletions plyer/tests/test_screenshot.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
'''
TestScreenshot
==============
Tested platforms:
* MacOS
'''

import unittest

from os import mkdir, remove
from os.path import join, expanduser, exists

from mock import patch
from plyer.compat import PY2
from plyer.tests.common import PlatformTest, platform_import


class MockedScreenCapture(object):
'''
Mocked object used instead of the console-like calling
of screencapture binary with parameters.
'''
@staticmethod
def whereis_exe(binary):
'''
Mock whereis_exe, so that it looks like
MacOS screencapture binary is present on the system.
'''
return binary == 'screencapture'

@staticmethod
def call(args):
'''
Mocked subprocess.call to check console parameters.
'''
assert len(args) == 2, len(args)
assert args[0] == 'screencapture', args
assert args[1] == join(
expanduser('~'), 'Pictures', 'screenshot.png'
), args
with open(args[1], 'w') as scr:
scr.write('')


class TestScreenshot(unittest.TestCase):
'''
TestCase for plyer.screenshot.
'''

def setUp(self):
path = join(expanduser('~'), 'Pictures')
if not exists(path):
mkdir(path)

@PlatformTest('macosx')
def test_screenshot_screencapture(self):
'''
Test mocked MacOS screencapture for plyer.screenshot.
'''
if not PY2:
print('Can not run until PyOBJus works on Py3.')
return

scr = platform_import(
platform='macosx',
module_name='screenshot',
whereis_exe=MockedScreenCapture.whereis_exe
)

# such class exists in screenshot module
self.assertIn('OSXScreenshot', dir(scr))

# the required instance is created
scr = scr.instance()
self.assertIn('OSXScreenshot', str(scr))

# move capture from context manager to run without mock
with patch(target='subprocess.call', new=MockedScreenCapture.call):
self.assertIsNone(scr.capture())

scr_path = join(
expanduser('~'), 'Pictures', 'screenshot.png'
)
self.assertTrue(exists(scr_path))
remove(scr_path)


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

0 comments on commit b10f230

Please sign in to comment.