blob: 7329ea236bbd94f6af9fd4330340796a8834fdc5 [file] [log] [blame]
#!/usr/bin/python
# Copyright (c) 2011 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import pyauto_functional
import pyauto
import chromeos.file_browser
import test_utils
class ChromeosFileBrowserTest(pyauto.PyUITest):
"""Tests for ChromeOS File Browser (full page and dialog)."""
def _GetFullPageFileBrowser(self, tab_index=0, windex=0):
"""Display the full page file browser in the current tab.
Returns:
ChromeosFileBrowser object.
"""
self.NavigateToURL('chrome://files')
executor = pyauto.PyUITest.JavascriptExecutorInTab(self, tab_index, windex)
file_browser = chromeos.file_browser.FileBrowser(self, executor)
if file_browser.WaitUntilInitialized():
return file_browser
else:
return None
def _GetSaveAsDialogFileBrowser(self):
"""Display the save-as file browser dialog.
The current tab should not be 'about:blank'.
Returns:
ChromeosFileBrowser object.
"""
self.ApplyAccelerator(pyauto.IDC_SAVE_PAGE)
dialog = self.WaitUntilExtensionViewLoaded(view_type='EXTENSION_DIALOG')
self.assertTrue(
dialog,
msg='Could not find a loaded "save-as" file browser'
'dialog (views = %s).' % self.GetBrowserInfo()['extension_views'])
executor = \
pyauto.PyUITest.JavascriptExecutorInRenderView(self, dialog)
file_browser = chromeos.file_browser.FileBrowser(self, executor)
if file_browser.WaitUntilInitialized():
return file_browser
else:
return None
def _GetOpenDialogFileBrowser(self):
"""Display the open file browser dialog.
Returns:
ChromeosFileBrowser object.
"""
self.ApplyAccelerator(pyauto.IDC_OPEN_FILE)
dialog = self.WaitUntilExtensionViewLoaded(view_type='EXTENSION_DIALOG')
self.assertTrue(
dialog,
msg='Could not find a loaded "open" file browser dialog: views = %s.' %
self.GetBrowserInfo()['extension_views'])
executor = \
pyauto.PyUITest.JavascriptExecutorInRenderView(self, dialog)
file_browser = chromeos.file_browser.FileBrowser(self, executor)
if file_browser.WaitUntilInitialized():
return file_browser
else:
return None
def testOpenMediaFiles(self):
"""Test we can open media files from the file browser dialog."""
media_files = ['bear.mp4', 'bear.ogv', 'bear.wav', 'bear.webm']
private_media_files = ['emerge.m4a', 'sample.mp3', 'sample.m4v',
'sample.ogg']
# TODO: .avi, .wmv are not yet (fully) supported on ChromeOS.
# .mov and .3gp only work in the Media Player. Once these format are
# supported on ChromeOS, include them in the test.
for fname in media_files:
test_utils.CopyFileFromDataDirToDownloadDir(self, 'media/' + fname)
for fname in private_media_files:
test_utils.CopyFileFromDataDirToDownloadDir(self, 'pyauto_private/media/' +\
fname)
for fname in media_files + private_media_files:
file_browser = self._GetOpenDialogFileBrowser()
self.assertTrue(file_browser, msg='File browser failed to initialize.')
if file_browser.CurrentDirectory() != '/Downloads':
file_browser.ChangeDirectory('/Downloads/')
self.assertTrue(file_browser.Select(fname),
msg='"%s" does not exist.' % fname)
dialog = self.WaitUntilExtensionViewLoaded(view_type='EXTENSION_DIALOG')
file_browser.Open()
self.assertTrue(self.WaitUntilExtensionViewClosed(dialog),
msg='File browser dialog was not closed.')
self.assertFalse(self.IsDownloadShelfVisible(),
msg='Download shelf is visible. ' +
'Media format not recognized for %s.' % fname)
def testSavePage(self):
"""Test we can save the current page using the file browser dialog."""
self.NavigateToURL('chrome://version')
file_browser = self._GetSaveAsDialogFileBrowser()
self.assertTrue(file_browser, msg='File browser failed to initialize.')
dialog = self.WaitUntilExtensionViewLoaded(view_type='EXTENSION_DIALOG')
file_browser.Save('apple')
self.assertTrue(self.WaitUntilExtensionViewClosed(dialog))
file_browser = self._GetOpenDialogFileBrowser()
self.assertTrue(file_browser.Select('apple.html'))
def testSelectMultipleFoldersInFullPage(self):
"""Test we can select multiple folders in the full page file browser."""
file_browser = self._GetFullPageFileBrowser()
self.assertTrue(file_browser, msg='File browser failed to initialize.')
file_browser.CreateDirectory('apples')
file_browser.CreateDirectory('oranges')
self.assertEqual(file_browser.DirectoryContents(),
set(['apples', 'oranges']),
msg='Failed to create directories (list = %s).' %
file_browser.DirectoryContents())
file_browser.Select('apples')
file_browser.Select('oranges')
file_browser.Delete()
self.assertFalse(file_browser.DirectoryContents(),
msg='Failed to delete directories (list = %s).' %
file_browser.DirectoryContents())
def _CreateFolder(self, file_browser):
"""Create folders and then change into them."""
top_directory = file_browser.CurrentDirectory()
tree = ['deep', 'deeper', 'deepest']
for directory in tree:
file_browser.CreateDirectory(directory)
file_browser.ChangeDirectory(directory)
self.assertEqual(file_browser.CurrentDirectory(),
top_directory + '/' + '/'.join(tree),
msg='Ended up in wrong directory (%s)' %
file_browser.CurrentDirectory())
def testCreateFolderInFullPage(self):
"""Test we can create a folder in the full page file browser."""
file_browser = self._GetFullPageFileBrowser()
self.assertTrue(file_browser, msg='File browser failed to initialize.')
self._CreateFolder(file_browser)
def testCreateFolderInDialog(self):
"""Test we can create a folder in a save-as file browser dialog."""
self.NavigateToURL('chrome://version')
file_browser = self._GetSaveAsDialogFileBrowser()
self.assertTrue(file_browser, msg='File browser failed to initialize.')
self._CreateFolder(file_browser)
def _RenameFolder(self, file_browser):
"""Create a folder and then rename it."""
file_browser.CreateDirectory('apples')
file_browser.Select('apples')
file_browser.Rename('oranges')
self.assertFalse(file_browser.Select('apples'))
self.assertTrue(file_browser.Select('oranges'))
def testRenameFolderInFullPage(self):
"""Test we can rename a folder in the full page file browser."""
file_browser = self._GetFullPageFileBrowser()
self.assertTrue(file_browser, msg='File browser failed to initialize.')
self._RenameFolder(file_browser)
def testRenameFolderInDialog(self):
"""Test we can rename a folder in a save-as file browser dialog."""
self.NavigateToURL('chrome://version')
file_browser = self._GetSaveAsDialogFileBrowser()
self.assertTrue(file_browser, msg='File browser failed to initialize.')
self._RenameFolder(file_browser)
def _DeleteFolder(self, file_browser):
"""Create a folder and then delete it."""
file_browser.CreateDirectory('apples')
file_browser.Select('apples')
file_browser.Delete()
self.assertFalse(file_browser.Select('apples'))
def testDeleteFolderInFullPage(self):
"""Test we can delete a folder in the full page file browser."""
file_browser = self._GetFullPageFileBrowser()
self.assertTrue(file_browser, msg='File browser failed to initialize.')
self._DeleteFolder(file_browser)
def testDeleteFolderInDialog(self):
"""Test we can delete a folder in a save-as file browser dialog."""
self.NavigateToURL('chrome://version')
file_browser = self._GetSaveAsDialogFileBrowser()
self.assertTrue(file_browser, msg='File browser failed to initialize.')
self._DeleteFolder(file_browser)
def _CopyFolder(self, file_browser):
"""Create a folder and then copy and paste it to itself."""
file_browser.CreateDirectory('apples')
file_browser.Select('apples')
file_browser.Copy()
file_browser.ChangeDirectory('apples')
file_browser.Paste()
self.assertTrue(file_browser.Select('apples'))
def testCopyFolderInFullPage(self):
"""Test we can copy and paste a folder in the full page file browser."""
file_browser = self._GetFullPageFileBrowser()
self.assertTrue(file_browser, msg='File browser failed to initialize.')
self._CopyFolder(file_browser)
def testCopyFolderInDialog(self):
"""Test we can copy and paste a folder in a save-as file browser dialog."""
self.NavigateToURL('chrome://version')
file_browser = self._GetSaveAsDialogFileBrowser()
self.assertTrue(file_browser, msg='File browser failed to initialize.')
self._CopyFolder(file_browser)
def _CutFolder(self, file_browser):
"""Create two folders and cut and paste one inside the other."""
top_directory = file_browser.CurrentDirectory()
file_browser.CreateDirectory('apples')
file_browser.Select('apples')
file_browser.Cut()
file_browser.CreateDirectory('oranges')
file_browser.ChangeDirectory('oranges')
file_browser.Paste()
self.assertTrue(file_browser.Select('apples'))
file_browser.ChangeDirectory(top_directory)
self.assertFalse(file_browser.Select('apples'))
def testCutFolderInFullPage(self):
"""Test we can cut and paste a folder in the full page file browser."""
file_browser = self._GetFullPageFileBrowser()
self.assertTrue(file_browser, msg='File browser failed to initialize.')
self._CutFolder(file_browser)
def testCutFolderInDialog(self):
"""Test we can cut and paste a folder in a save-as file browser dialog."""
self.NavigateToURL('chrome://version')
file_browser = self._GetSaveAsDialogFileBrowser()
self.assertTrue(file_browser, msg='File browser failed to initialize.')
self._CutFolder(file_browser)
def testGetSelectedDirectorySizeStats(self):
"""Test we can get remaining and total size of the file shelf."""
file_browser = self._GetFullPageFileBrowser()
self.assertTrue(file_browser, msg='File browser failed to initialize.')
file_browser.CreateDirectory('apples')
file_browser.Select('apples')
remaining, total = file_browser.GetSelectedDirectorySizeStats()
self.assertTrue(remaining > 0,
msg='Remaining disk space = %dKB.' % remaining)
self.assertTrue(total > 0,
msg='Total disk space = %dKB.' % total)
self.assertTrue(total > remaining,
msg='Total space(%dKB) <= remaining space(%dKB).' %
(total, remaining))
if __name__ == '__main__':
pyauto_functional.Main()