blob: fbd2025d2dc0257dc162b6ce844edffe0e283da7 [file] [log] [blame]
'''
Created on 2012-10-25
@author: diego
'''
import sys
import os
import unittest
# PyDev sets PYTHONPATH, use it
try:
for p in os.environ['PYTHONPATH'].split(':'):
if not p in sys.path:
sys.path.append(p)
except:
pass
try:
sys.path.insert(0, os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
except:
pass
from com.dtmilano.android.viewclient import *
from mocks import MockDevice
VERBOSE = True
# NOTE:
# Because there's no way of disconnect a MonkeyDevice and there's no
# either the alternative of connecting twice from the same script
# this is the only alternative
SERIALNO = '1.*' # 'emulator-5554'
#sys.argv = ['ViewClientConnectedTest', SERIALNO]
#device, serialno = ViewClient.connectToDeviceOrExit(verbose=VERBOSE, serialno=SERIALNO)
class ViewClientConnectedTest(unittest.TestCase):
def setUp(self):
device, serialno = ViewClient.connectToDeviceOrExit(serialno=SERIALNO)
self.device = device
self.serialno = serialno
def tearDown(self):
# WARNING:
# There's no way of disconnect the device
pass
@unittest.skip("icannot connect adb to mock device")
def testInit_adbNone(self):
device = MockDevice()
vc = ViewClient(device, serialno=device.serialno, adb=None, autodump=False)
self.assertNotEqual(None, vc)
def testAutodumpVsDump(self):
vc = ViewClient(self.device, self.serialno, forceviewserveruse=True)
ids = vc.getViewIds()
views = vc.dump()
self.assertEquals(len(ids), len(views))
def testNewViewClientInstancesDontDuplicateTreeConnected(self):
vc = {}
n = {}
m = {}
d = {}
for i in range(10):
vc[i] = ViewClient(self.device, self.serialno, forceviewserveruse=True)
n[i] = len(vc[i].getViewIds())
m[i] = len(vc[i].dump())
d[i] = len(vc[i].getViewIds())
if VERBOSE:
print "Pass %d: Found %d views and %d after dump with %d view Ids" % \
(i, n[i], m[i], d[i])
for i in range(1, 10):
self.assertEquals(n[0], n[i])
self.assertEquals(n[0], m[i])
self.assertEquals(n[0], d[i])
def testViewClientBackendsConsistency(self):
kwargs1 = {'verbose': True, 'ignoresecuredevice': False, 'ignoreversioncheck': False}
kwargs2 = {'forceviewserveruse': False, 'startviewserver': True, 'autodump': False, 'ignoreuiautomatorkilled': True}
device1, serialno1 = ViewClient.connectToDeviceOrExit(serialno=SERIALNO, **kwargs1)
vc1 = ViewClient(device1, serialno1, **kwargs2)
self.assertTrue(vc1.useUiAutomator)
kwargs2['forceviewserveruse'] = True
device2, serialno2 = ViewClient.connectToDeviceOrExit(serialno=SERIALNO, **kwargs1)
vc2 = ViewClient(device1, serialno1, **kwargs2)
self.assertFalse(vc2.useUiAutomator)
# UiAutomator
dump1 = vc1.dump(-1)
# ViewServer
dump2 = vc2.dump(-1)
# Can't do this, v2 usually has much more views than v1
#self.assertEqual(len(dump1), len(dump2), "Different number of views (%d != %d)" % (len(dump1), len(dump2)))
found = False
for v2 in dump2:
for v1 in dump1:
# At least, let's verify that all unique Ids from dump2 (smaller) are in dump1 (bigger)
if v2.getUniqueId() == v1.getUniqueId():
found = True
break
self.assertTrue(found)
missing = ''
# The smallest
for v2 in dump2:
coords = v2.getCoords()
found = False
for v1 in dump1:
msg = "Comparing %s{%s} and %s{%s}" % (v1.getClass(), v1.getId(), v2.getClass(), v2.getId())
if coords == v1.getCoords():
found = True
break
if not found:
missing += "Couldn't find view with coords=%s in dump1\n" % (str(v2.getCoords()))
self.assertEqual('', missing, missing)
if __name__ == "__main__":
#import sys;sys.argv = ['', 'Test.testName']
unittest.main()