145 lines
3.8 KiB
Python
145 lines
3.8 KiB
Python
'''
|
|
TestBluetooth
|
|
=============
|
|
|
|
Tested platforms:
|
|
|
|
* macOS - system_profiler
|
|
'''
|
|
|
|
import unittest
|
|
|
|
from plyer.tests.common import platform_import
|
|
from textwrap import dedent
|
|
|
|
|
|
class MockedSystemProfiler:
|
|
'''
|
|
Mocked object used instead of Apple's system_profiler
|
|
'''
|
|
value = "On"
|
|
output = dedent(
|
|
"""Bluetooth:
|
|
|
|
Apple Bluetooth Software Version: 6.0.7f11
|
|
Hardware, Features, and Settings:
|
|
Address: AA-00-BB-11-CC-22
|
|
Bluetooth Low Energy Supported: Yes
|
|
Handoff Supported: Yes
|
|
Instant Hot Spot Supported: Yes
|
|
Manufacturer: Broadcom
|
|
Transport: UART
|
|
Chipset: 1234
|
|
Firmware Version: v00 c0000
|
|
Bluetooth Power: {}
|
|
Auto Seek Pointing: On
|
|
Remote wake: On
|
|
Vendor ID: 0x0000
|
|
Product ID: 0x0000
|
|
HCI Version: (0x0)
|
|
HCI Revision: 0x0000
|
|
LMP Version: (0x0)
|
|
LMP Subversion: 0x0000
|
|
Auto Seek Keyboard: On
|
|
Devices (Paired, Configured, etc.):
|
|
iPhone:
|
|
Address: AA-00-BB-11-CC-22
|
|
Major Type: Miscellaneous
|
|
Minor Type: Unknown
|
|
Services:
|
|
Paired: No
|
|
Configured: Yes
|
|
Connected: No
|
|
Class of Device: 0x00 0x00 0x0000
|
|
Services:
|
|
Bluetooth File Transfer:
|
|
Folder other devices can browse: ~/Public
|
|
When receiving items: Accept all without warning
|
|
State: Disabled
|
|
Bluetooth File Exchange:
|
|
Folder for accepted items: ~/Downloads
|
|
When other items are accepted: Save to location
|
|
When receiving items: Accept all without warning
|
|
State: Disabled
|
|
Bluetooth Internet Sharing:
|
|
State: Disabled
|
|
Incoming Serial Ports:
|
|
Bluetooth-Incoming-Port:
|
|
RFCOMM Channel: 3
|
|
Requires Authentication: No"""
|
|
).format(value).encode('utf-8')
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
# only to ignore all args, kwargs
|
|
pass
|
|
|
|
@staticmethod
|
|
def communicate():
|
|
'''
|
|
Mock Popen.communicate, so that 'system_profiler'
|
|
isn't used.
|
|
'''
|
|
return (MockedSystemProfiler.output, )
|
|
|
|
@staticmethod
|
|
def whereis_exe(binary):
|
|
'''
|
|
Mock whereis_exe, so that it looks like
|
|
macOS system_profiler binary is present on the system.
|
|
'''
|
|
return binary == 'system_profiler'
|
|
|
|
@staticmethod
|
|
def get_info():
|
|
'''
|
|
Return current bluetooth status from mocked output.
|
|
'''
|
|
return MockedSystemProfiler.value
|
|
|
|
|
|
class TestBluetooth(unittest.TestCase):
|
|
'''
|
|
TestCase for plyer.bluetooth.
|
|
'''
|
|
|
|
def test_bluetooth_macosx(self):
|
|
'''
|
|
Test macOS system_profiler for plyer.bluetooth.
|
|
'''
|
|
bluetooth = platform_import(
|
|
platform='macosx',
|
|
module_name='bluetooth',
|
|
whereis_exe=MockedSystemProfiler.whereis_exe
|
|
)
|
|
|
|
bluetooth.Popen = MockedSystemProfiler
|
|
self.assertIn('OSXBluetooth', dir(bluetooth))
|
|
bluetooth = bluetooth.instance()
|
|
self.assertIn('OSXBluetooth', str(bluetooth))
|
|
|
|
self.assertEqual(
|
|
bluetooth.info, MockedSystemProfiler.get_info()
|
|
)
|
|
|
|
def test_bluetooth_macosx_instance(self):
|
|
'''
|
|
Test macOS instance for plyer.bluetooth.
|
|
'''
|
|
|
|
def no_exe(*args, **kwargs):
|
|
return
|
|
|
|
bluetooth = platform_import(
|
|
platform='macosx',
|
|
module_name='bluetooth',
|
|
whereis_exe=no_exe
|
|
)
|
|
|
|
bluetooth = bluetooth.instance()
|
|
self.assertNotIn('OSXBluetooth', str(bluetooth))
|
|
self.assertIn('Bluetooth', str(bluetooth))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|