| OLD | NEW |
| (Empty) |
| 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() | |
| OLD | NEW |