@@ -27,7 +27,7 @@ import textwrap
2727import  culebratester_client 
2828from  culebratester_client  import  WindowHierarchy 
2929
30- __version__  =  '21.14.1 ' 
30+ __version__  =  '21.15.0 ' 
3131
3232import  calendar 
3333import  codecs 
@@ -38,6 +38,8 @@ import sys
3838import  warnings 
3939from  datetime  import  date 
4040
41+ from  com .dtmilano .android .code_generator  import  HelperCodeGenerator , VcCodeGenerator 
42+ 
4143try :
4244    sys .path .insert (0 , os .path .join (os .environ ['ANDROID_VIEW_CLIENT_HOME' ], 'src' ))
4345except :
@@ -334,7 +336,8 @@ You have to set PYTHONIOENCODING environment variable. For example:
334336            else :
335337                logAction (f'setting view with text={ text }  ' )
336338                find_object_line  =  textwrap .indent (f'obj_ref = helper.until.find_object(body={ view .obtain_selector ()}  )' ,
337-                                                    '    '  *  6 , lambda  line : not  line .startswith ('obj_ref =' ))
339+                                                    ' '  *  40 ,
340+                                                    lambda  line : not  line .startswith ('obj_ref =' ))
338341                print (textwrap .dedent (f''' 
339342                    { find_object_line }  
340343                    response = helper.ui_device.wait(oid=obj_ref.oid) 
@@ -796,20 +799,23 @@ def traverseAndPrint(view):
796799    if  type (view ) ==  WindowHierarchy :
797800        # The root element is a WindowHierarchy (id=hierarchy) 
798801        return 
799-     if  options [CulebraOptions .VERBOSE_COMMENTS ]:
800-         printVerboseComments (view )
801-     if  options [CulebraOptions .FIND_VIEWS_BY_ID ]:
802-         printFindViewById (view )
803-     if  options [CulebraOptions .FIND_VIEWS_WITH_TEXT ]:
804-         printFindViewWithText (view , options [CulebraOptions .USE_REGEXPS ])
805-     if  options [CulebraOptions .FIND_VIEWS_WITH_CONTENT_DESCRIPTION ]:
806-         printFindViewWithContentDescription (view , options [CulebraOptions .USE_REGEXPS ])
807-     if  options [CulebraOptions .SAVE_VIEW_SCREENSHOTS ]:
808-         _format  =  'PNG' 
809-         filename  =  options [
810-                        CulebraOptions .SAVE_VIEW_SCREENSHOTS ] +  os .sep  +  View .variableNameFromId (
811-             view ) +  '.'  +  _format .lower ()
812-         printSaveViewScreenshot (view , filename , _format )
802+     if  vc .uiAutomatorHelper :
803+         printFindObjectUiAutomatorViewer (view .obtain_selector ())
804+     else :
805+         if  options [CulebraOptions .VERBOSE_COMMENTS ]:
806+             printVerboseComments (view )
807+         if  options [CulebraOptions .FIND_VIEWS_BY_ID ]:
808+             printFindViewById (view )
809+         if  options [CulebraOptions .FIND_VIEWS_WITH_TEXT ]:
810+             printFindViewWithText (view , options [CulebraOptions .USE_REGEXPS ])
811+         if  options [CulebraOptions .FIND_VIEWS_WITH_CONTENT_DESCRIPTION ]:
812+             printFindViewWithContentDescription (view , options [CulebraOptions .USE_REGEXPS ])
813+         if  options [CulebraOptions .SAVE_VIEW_SCREENSHOTS ]:
814+             _format  =  'PNG' 
815+             filename  =  options [
816+                            CulebraOptions .SAVE_VIEW_SCREENSHOTS ] +  os .sep  +  View .variableNameFromId (
817+                 view ) +  '.'  +  _format .lower ()
818+             printSaveViewScreenshot (view , filename , _format )
813819
814820
815821def  printStartActivity (component ):
@@ -851,7 +857,7 @@ def printTouchViewUiAutomatorHelper(selector: culebratester_client.Selector) ->
851857    else :
852858        logAction (f'touching by selector={ selector }  ' )
853859        indented_line  =  None 
854-         indentation  =  indent  +  ' '  *  4 
860+         indentation  =  indent  +  ' '  *  40 
855861        # FIXME: should be find_objects and before clicking we should verify the list contains 
856862        # only 1 object, otherwise we aren't sure which one is being clicked 
857863        for  line  in  f'{ indent }  obj_ref = { prefix }  helper.until.find_object(body={ selector }  )' .splitlines ():
@@ -873,17 +879,21 @@ def printLongTouchViewUiAutomatorHelper(selector):
873879        warnings .warn ('Multi-device not implemented yet for this case' )
874880    else :
875881        logAction (f'long-touching by selector={ selector }  ' )
876-         indented_line  =  None 
877-         indentation  =  indent  +  ' '  *  4 
878-         for  line  in  f'{ indent }  obj_ref = { prefix }  helper.ui_device.find_object(body={ selector }  )' .splitlines ():
879-             if  not  indented_line :
880-                 indented_line  =  line 
881-             else :
882-                 indented_line  =  f'{ indented_line } \n { indentation } { line }  ' 
883-         print (f'{ indented_line }  ' )
882+         printFindObjectUiAutomatorViewer (selector )
884883        print (f'{ indent } { prefix }  helper.ui_object2.long_click(oid=obj_ref.oid)' )
885884
886885
886+ def  printFindObjectUiAutomatorViewer (selector ):
887+     indented_line  =  None 
888+     indentation  =  indent  +  ' '  *  4 
889+     for  line  in  f'{ indent }  obj_ref = { prefix }  helper.ui_device.find_object(body={ selector }  )' .splitlines ():
890+         if  not  indented_line :
891+             indented_line  =  line 
892+         else :
893+             indented_line  =  f'{ indented_line } \n { indentation } { line }  ' 
894+     print (f'{ indented_line }  ' )
895+ 
896+ 
887897def  printSwipeUiAutomatorHelper (startX , startY , endX , endY , steps , unit , orientation ):
888898    ''' 
889899    Prints a swipe 
@@ -1027,17 +1037,16 @@ def printTraverseUiAutomatorHelper(dump=None):
10271037        for  view  in  dump :
10281038            transform (view )
10291039    else :
1030-         if  DEBUG :
1031-             print ('🤷♀️ printTraverseUiAutomatorHelper: need to traverse the tree: not implemented yet' ,
1032-                   file = sys .stderr )
1040+         print ('🤷♀️ printTraverseUiAutomatorHelper: need to traverse the tree: not implemented yet' , file = sys .stderr )
10331041        # We can do something like this for UiAutomatorHelper. 
1034-         # adb/dump: 
1035-         # vc.traverse(transform=transform) 
1036-         # uiAutromatorHelper: 
1042+         # (however, we have a view hierarchy obtained before using uiAutomatorHelper) 
10371043        # wh = vc.uiAutomatorHelper.ui_device.dump_window_hierarchy() 
10381044        # whch: WindowHierarchyChild = None 
10391045        # for whch in wh.children: 
10401046        #    print(whch.id, whch.text, whch.clazz) 
1047+         # print(vc.views) 
1048+         #vc.root = vc.views[0] 
1049+         vc .traverse (transform = transform )
10411050    print ()
10421051
10431052
@@ -1050,9 +1059,7 @@ def printTestUiAutomatorHelper(selector):
10501059    else :
10511060        logAction (f'test by selector={ selector }  ' )
10521061        indented_line  =  None 
1053-         indentation  =  indent  +  ' '  *  4 
1054-         # FIXME: we need has_object POST 
1055-         # We are just raising the exception if the object is not found, we could trap it 
1062+         indentation  =  indent  +  ' '  *  40 
10561063        for  line  in  f'{ indent }  assert { prefix }  helper.ui_device.has_object(body={ selector }  )' .splitlines ():
10571064            if  not  indented_line :
10581065                indented_line  =  line 
@@ -1505,6 +1512,11 @@ if options[CulebraOptions.MULTI_DEVICE] and not options[CulebraOptions.UNIT_TEST
15051512        "--"  +  CulebraOptions .MULTI_DEVICE  +  " only supported for unit tests (please specify --"  +  CulebraOptions .UNIT_TEST_CLASS  +  ")" ,
15061513        fatal = True )
15071514
1515+ if  kwargs2 .get (ViewClientOptions .USE_UIAUTOMATOR_HELPER , True ):
1516+     code_generator  =  HelperCodeGenerator (options )
1517+ else :
1518+     code_generator  =  VcCodeGenerator (options )
1519+ 
15081520device , serialno  =  ViewClient .connectToDeviceOrExit (serialno = serialno , ** kwargs1 )
15091521if  options [CulebraOptions .ORIENTATION_LOCKED ] ==  'PENDING' :
15101522    options [CulebraOptions .ORIENTATION_LOCKED ] =  device .display ['orientation' ]
@@ -1522,65 +1534,20 @@ if options[CulebraOptions.OUTPUT]:
15221534    os .chmod (options [CulebraOptions .OUTPUT ], st .st_mode  |  stat .S_IEXEC )
15231535
15241536if  options [CulebraOptions .UNIT_TEST_CLASS ] or  (not  options [CulebraOptions .UNIT_TEST_METHOD ]):
1525-     printScriptHeader ()
1537+     code_generator . header ()
15261538
15271539if  options [CulebraOptions .UNIT_TEST_CLASS ]:
1528-     printUnittestImport ()
1540+     code_generator . import_unittest ()
15291541
15301542if  options [CulebraOptions .PREPEND_TO_SYS_PATH ]:
1531-     printPrependToSysPath ()
1543+     code_generator . prepend_to_syspath ()
15321544
15331545if  options [CulebraOptions .UNIT_TEST_CLASS ] or  (not  options [CulebraOptions .UNIT_TEST_METHOD ]):
1534-     print ('''\  
1535-  from com.dtmilano.android.viewclient import ViewClient, KEY_EVENT%s
1536- 
1537- TAG = '%s' 
1538- '''  %  (', CulebraTestCase'  if  options [CulebraOptions .UNIT_TEST_CLASS ] else  '' , TAG ))
1546+     code_generator .import_viewclient ()
1547+     code_generator .tag (TAG )
15391548
15401549if  options [CulebraOptions .UNIT_TEST_CLASS ]:
1541-     print (''' 
1542- class CulebraTests(CulebraTestCase): 
1543- 
1544-     @classmethod 
1545-     def setUpClass(cls): 
1546-         cls.kwargs1 = %s 
1547-         cls.kwargs2 = %s 
1548-         cls.options = %s 
1549-         cls.sleep = 5 
1550- 
1551- '''  %  (kwargs1 , kwargs2 , options ), end = ' ' )
1552- 
1553-     print (''' 
1554-     def setUp(self): 
1555-         super(CulebraTests, self).setUp() 
1556- ''' )
1557- 
1558-     print (''' 
1559-     def tearDown(self): 
1560-         super(CulebraTests, self).tearDown() 
1561- ''' )
1562- 
1563-     print (''' 
1564-     def preconditions(self): 
1565-         if not super(CulebraTests, self).preconditions(): 
1566-             return False 
1567- ''' , end = ' ' )
1568- 
1569-     if  options [CulebraOptions .INSTALL_APK ]:
1570-         print (''' 
1571-         if self.vc.installPackage(\" %s\" ) != 0: 
1572-             return False 
1573- '''  %  (options [CulebraOptions .INSTALL_APK ]), end = ' ' )
1574- 
1575-     print (''' 
1576-         return True 
1577- 
1578-     def %s(self): 
1579-         if not self.preconditions(): 
1580-             self.fail('Preconditions failed') 
1581- '''  %  (options [CulebraOptions .UNIT_TEST_METHOD ] if  options [CulebraOptions .UNIT_TEST_METHOD ] else  'testSomething' ))
1582- 
1583-     printShortcutVariables ()
1550+     code_generator .unittest (kwargs1 , kwargs2 )
15841551
15851552    if  options [CulebraOptions .SAVE_SCREENSHOT ]:
15861553        print ('''\  
@@ -1597,13 +1564,6 @@ class CulebraTests(CulebraTestCase):
15971564    indent  =  ' '  *  8 
15981565    prefix  =  'self.' 
15991566
1600-     #     if not options[CulebraOptions.DO_NOT_VERIFY_SCREEN_DUMP]: 
1601-     #         print '''\ 
1602-     #         self.vc.dump(%s) 
1603-     #         ''' % getWindowOption() 
1604-     #         vc.traverse(transform=transform) 
1605-     #         print 
1606- 
16071567    if  options [CulebraOptions .GUI ]:
16081568        runCulebron ()
16091569    elif  not  options [CulebraOptions .DO_NOT_VERIFY_SCREEN_DUMP ]:
0 commit comments