Home | History | Annotate | Download | only in functional
      1 #!/usr/bin/env python
      2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 
      6 import pyauto_functional
      7 import pyauto
      8 
      9 import chromeos.file_browser
     10 import test_utils
     11 
     12 
     13 class ChromeosFileBrowserTest(pyauto.PyUITest):
     14   """Tests for ChromeOS File Browser (full page and dialog)."""
     15 
     16   def _GetFullPageFileBrowser(self, tab_index=0, windex=0):
     17     """Display the full page file browser in the current tab.
     18 
     19     Returns:
     20       ChromeosFileBrowser object.
     21     """
     22     self.NavigateToURL('chrome://files')
     23     executor = pyauto.PyUITest.JavascriptExecutorInTab(self, tab_index, windex)
     24     file_browser = chromeos.file_browser.FileBrowser(self, executor)
     25     if file_browser.WaitUntilInitialized():
     26       return file_browser
     27     else:
     28       return None
     29 
     30   def _GetSaveAsDialogFileBrowser(self):
     31     """Display the save-as file browser dialog.
     32 
     33     The current tab should not be 'about:blank'.
     34 
     35     Returns:
     36       ChromeosFileBrowser object.
     37     """
     38     self.ApplyAccelerator(pyauto.IDC_SAVE_PAGE)
     39     dialog = self.WaitUntilExtensionViewLoaded(view_type='EXTENSION_DIALOG')
     40     self.assertTrue(
     41         dialog,
     42         msg='Could not find a loaded "save-as" file browser'
     43             'dialog (views = %s).' % self.GetBrowserInfo()['extension_views'])
     44     executor = \
     45         pyauto.PyUITest.JavascriptExecutorInRenderView(self, dialog)
     46     file_browser = chromeos.file_browser.FileBrowser(self, executor)
     47     if file_browser.WaitUntilInitialized():
     48       return file_browser
     49     else:
     50       return None
     51 
     52   def _GetOpenDialogFileBrowser(self):
     53     """Display the open file browser dialog.
     54 
     55     Returns:
     56       ChromeosFileBrowser object.
     57     """
     58     self.ApplyAccelerator(pyauto.IDC_OPEN_FILE)
     59     dialog = self.WaitUntilExtensionViewLoaded(view_type='EXTENSION_DIALOG')
     60     self.assertTrue(
     61         dialog,
     62         msg='Could not find a loaded "open" file browser dialog: views = %s.' %
     63         self.GetBrowserInfo()['extension_views'])
     64     executor = \
     65         pyauto.PyUITest.JavascriptExecutorInRenderView(self, dialog)
     66     file_browser = chromeos.file_browser.FileBrowser(self, executor)
     67     if file_browser.WaitUntilInitialized():
     68       return file_browser
     69     else:
     70       return None
     71 
     72   def testOpenMediaFiles(self):
     73     """Test we can open media files from the file browser dialog."""
     74     media_files = ['bear.mp4', 'bear.ogv', 'bear_pcm.wav', 'bear.webm']
     75     private_media_files = ['emerge.m4a', 'sample.mp3', 'sample.m4v',
     76                            'sample.ogg']
     77     # TODO: .avi, .wmv are not yet (fully) supported on ChromeOS.
     78     #       .mov and .3gp only work in the Media Player. Once these format are
     79     #        supported on ChromeOS, include them in the test.
     80     for fname in media_files:
     81       test_utils.CopyFileFromContentDataDirToDownloadDir(self,
     82                                                          'media/' + fname)
     83     for fname in private_media_files:
     84       test_utils.CopyFileFromDataDirToDownloadDir(self, 'pyauto_private/media/' +\
     85                                                   fname)
     86     for fname in media_files + private_media_files:
     87       file_browser = self._GetOpenDialogFileBrowser()
     88       self.assertTrue(file_browser, msg='File browser failed to initialize.')
     89       if file_browser.CurrentDirectory() != '/Downloads':
     90         file_browser.ChangeDirectory('/Downloads/')
     91       self.assertTrue(file_browser.Select(fname),
     92                       msg='"%s" does not exist.' % fname)
     93       dialog = self.WaitUntilExtensionViewLoaded(view_type='EXTENSION_DIALOG')
     94       file_browser.Open()
     95       self.assertTrue(self.WaitUntilExtensionViewClosed(dialog),
     96                       msg='File browser dialog was not closed.')
     97       self.assertFalse(self.IsDownloadShelfVisible(),
     98                        msg='Download shelf is visible. ' +
     99                            'Media format not recognized for %s.' % fname)
    100 
    101   def testSavePage(self):
    102     """Test we can save the current page using the file browser dialog."""
    103     self.NavigateToURL('chrome://version')
    104     file_browser = self._GetSaveAsDialogFileBrowser()
    105     self.assertTrue(file_browser, msg='File browser failed to initialize.')
    106     dialog = self.WaitUntilExtensionViewLoaded(view_type='EXTENSION_DIALOG')
    107     file_browser.Save('apple.html')
    108     self.assertTrue(self.WaitUntilExtensionViewClosed(dialog))
    109     file_browser = self._GetOpenDialogFileBrowser()
    110     self.assertTrue(file_browser.Select('apple.html'))
    111 
    112   def testSelectMultipleFoldersInFullPage(self):
    113     """Test we can select multiple folders in the full page file browser."""
    114     file_browser = self._GetFullPageFileBrowser()
    115     self.assertTrue(file_browser, msg='File browser failed to initialize.')
    116     file_browser.CreateDirectory('apples')
    117     file_browser.CreateDirectory('oranges')
    118     self.assertEqual(file_browser.DirectoryContents(),
    119                      set(['apples', 'oranges']),
    120                      msg='Failed to create directories (list = %s).' %
    121                          file_browser.DirectoryContents())
    122     file_browser.Select('apples')
    123     file_browser.Select('oranges')
    124     file_browser.Delete()
    125     self.assertFalse(file_browser.DirectoryContents(),
    126                      msg='Failed to delete directories (list = %s).' %
    127                          file_browser.DirectoryContents())
    128 
    129   def _CreateFolder(self, file_browser):
    130     """Create folders and then change into them."""
    131     top_directory = file_browser.CurrentDirectory()
    132     tree = ['deep', 'deeper', 'deepest']
    133     for directory in tree:
    134       file_browser.CreateDirectory(directory)
    135       file_browser.ChangeDirectory(directory)
    136     self.assertEqual(file_browser.CurrentDirectory(),
    137                      top_directory + '/' + '/'.join(tree),
    138                      msg='Ended up in wrong directory (%s)' %
    139                          file_browser.CurrentDirectory())
    140 
    141   def testCreateFolderInFullPage(self):
    142     """Test we can create a folder in the full page file browser."""
    143     file_browser = self._GetFullPageFileBrowser()
    144     self.assertTrue(file_browser, msg='File browser failed to initialize.')
    145     self._CreateFolder(file_browser)
    146 
    147   def testCreateFolderInDialog(self):
    148     """Test we can create a folder in a save-as file browser dialog."""
    149     self.NavigateToURL('chrome://version')
    150     file_browser = self._GetSaveAsDialogFileBrowser()
    151     self.assertTrue(file_browser, msg='File browser failed to initialize.')
    152     self._CreateFolder(file_browser)
    153 
    154   def _RenameFolder(self, file_browser):
    155     """Create a folder and then rename it."""
    156     file_browser.CreateDirectory('apples')
    157     file_browser.Select('apples')
    158     file_browser.Rename('oranges')
    159     self.assertFalse(file_browser.Select('apples'))
    160     self.assertTrue(file_browser.Select('oranges'))
    161 
    162   def testRenameFolderInFullPage(self):
    163     """Test we can rename a folder in the full page file browser."""
    164     file_browser = self._GetFullPageFileBrowser()
    165     self.assertTrue(file_browser, msg='File browser failed to initialize.')
    166     self._RenameFolder(file_browser)
    167 
    168   def testRenameFolderInDialog(self):
    169     """Test we can rename a folder in a save-as file browser dialog."""
    170     self.NavigateToURL('chrome://version')
    171     file_browser = self._GetSaveAsDialogFileBrowser()
    172     self.assertTrue(file_browser, msg='File browser failed to initialize.')
    173     self._RenameFolder(file_browser)
    174 
    175   def _DeleteFolder(self, file_browser):
    176     """Create a folder and then delete it."""
    177     file_browser.CreateDirectory('apples')
    178     file_browser.Select('apples')
    179     file_browser.Delete()
    180     self.assertFalse(file_browser.Select('apples'))
    181 
    182   def testDeleteFolderInFullPage(self):
    183     """Test we can delete a folder in the full page file browser."""
    184     file_browser = self._GetFullPageFileBrowser()
    185     self.assertTrue(file_browser, msg='File browser failed to initialize.')
    186     self._DeleteFolder(file_browser)
    187 
    188   def testDeleteFolderInDialog(self):
    189     """Test we can delete a folder in a save-as file browser dialog."""
    190     self.NavigateToURL('chrome://version')
    191     file_browser = self._GetSaveAsDialogFileBrowser()
    192     self.assertTrue(file_browser, msg='File browser failed to initialize.')
    193     self._DeleteFolder(file_browser)
    194 
    195   def _CopyFolder(self, file_browser):
    196     """Create a folder and then copy and paste it to itself."""
    197     file_browser.CreateDirectory('apples')
    198     file_browser.Select('apples')
    199     file_browser.Copy()
    200     file_browser.CreateDirectory('oranges')
    201     file_browser.ChangeDirectory('oranges')
    202     file_browser.Paste()
    203     self.assertTrue(file_browser.Select('apples'))
    204 
    205   def testCopyFolderInFullPage(self):
    206     """Test we can copy and paste a folder in the full page file browser."""
    207     file_browser = self._GetFullPageFileBrowser()
    208     self.assertTrue(file_browser, msg='File browser failed to initialize.')
    209     self._CopyFolder(file_browser)
    210 
    211   def _CutFolder(self, file_browser):
    212     """Create two folders and cut and paste one inside the other."""
    213     top_directory = file_browser.CurrentDirectory()
    214     file_browser.CreateDirectory('apples')
    215     file_browser.Select('apples')
    216     file_browser.Cut()
    217     file_browser.CreateDirectory('oranges')
    218     file_browser.ChangeDirectory('oranges')
    219     file_browser.Paste()
    220     self.assertTrue(file_browser.Select('apples'))
    221     file_browser.ChangeDirectory(top_directory)
    222     self.assertFalse(file_browser.Select('apples'))
    223 
    224   def testCutFolderInFullPage(self):
    225     """Test we can cut and paste a folder in the full page file browser."""
    226     file_browser = self._GetFullPageFileBrowser()
    227     self.assertTrue(file_browser, msg='File browser failed to initialize.')
    228     self._CutFolder(file_browser)
    229 
    230   def testGetSelectedDirectorySizeStats(self):
    231     """Test we can get remaining and total size of the file shelf."""
    232     file_browser = self._GetFullPageFileBrowser()
    233     self.assertTrue(file_browser, msg='File browser failed to initialize.')
    234     file_browser.CreateDirectory('apples')
    235     file_browser.Select('apples')
    236     remaining, total = file_browser.GetSelectedDirectorySizeStats()
    237     self.assertTrue(remaining > 0,
    238                     msg='Remaining disk space = %dKB.' % remaining)
    239     self.assertTrue(total > 0,
    240                     msg='Total disk space = %dKB.' % total)
    241     self.assertTrue(total > remaining,
    242                     msg='Total space(%dKB) <= remaining space(%dKB).' %
    243                     (total, remaining))
    244 
    245 
    246 if __name__ == '__main__':
    247   pyauto_functional.Main()
    248