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