Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3487)

Unified Diff: chrome/test/functional/ui_model.py

Issue 10830193: Remove SWIGged use of BrowserProxy and TabProxy from PyAuto tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Used named arguments and deleted unused test files, as suggested by Nirnimesh. Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/test/functional/translate.py ('k') | chrome/test/functional/ui_runner.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/functional/ui_model.py
diff --git a/chrome/test/functional/ui_model.py b/chrome/test/functional/ui_model.py
deleted file mode 100644
index aac358758f343c629f1795ea87fae7ba4d111bf3..0000000000000000000000000000000000000000
--- a/chrome/test/functional/ui_model.py
+++ /dev/null
@@ -1,424 +0,0 @@
-# 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.
-
-"""Logic for generating random ui actions on the browser.
-
-Takes into account the expected state of the browser in order to generate
-relevant ui actions.
-"""
-
-import random
-
-
-class TabState(object):
- """A set of properties representing a browser tab."""
-
- def __init__(self, location):
- """Init for a new tab.
-
- Args:
- location: url string for the initial location of this tab.
- """
- self._history = [location]
- self._position = 0
-
- @property
- def navs(self):
- return self._position
-
- @property
- def backs(self):
- return len(self._history) - self._position - 1
-
- @property
- def location(self):
- return self._history[self._position]
-
- def Navigate(self, target):
- self._history = self._history[:self._position + 1]
- self._position += 1
- self._history.append(target)
-
- def Back(self):
- assert self.navs > 0, 'illegal Back'
- self._position -= 1
-
- def Forward(self):
- assert self.backs > 0, 'illegal Forward'
- self._position += 1
-
-
-class WindowState(object):
- """A set of properties representing state of browser window."""
-
- def __init__(self, tab=None, private=False):
- self._tabs = []
- self._saved_position = 0
- self._position = 0
- self._private = private
- if tab:
- self._tabs.append(tab)
- else:
- self.NewTab()
-
- @property
- def tab(self):
- return self._tabs[self._position]
-
- @property
- def num_tabs(self):
- return len(self._tabs)
-
- @property
- def tab_position(self):
- return self._position
-
- @property
- def private(self):
- return self._private
-
- def NewTab(self, location='chrome://newtab'):
- new_tab = TabState(location)
- self._tabs.append(new_tab)
- self._saved_position = self._position
- self._position = len(self._tabs) - 1
-
- def FindTab(self, location):
- """Return position of first tab at location, or -1"""
- for position in xrange(self.num_tabs):
- tab = self._tabs[position]
- if tab.location == location:
- return position
- return -1
-
- def ForgetPosition(self):
- self._saved_position = None
-
- def DragLeft(self):
- assert self._position > 0, 'illegal DragLeft'
- tab = self.tab
- self._position -= 1
- self._tabs.remove(tab)
- self._tabs.insert(self._position, tab)
-
- def DragRight(self):
- assert self._position < self.num_tabs - 1, 'illegal DragRight'
- tab = self.tab
- self._position += 1
- self._tabs.remove(tab)
- self._tabs.insert(self._position, tab)
-
- def RemoveTab(self):
- self._tabs.pop(self._position)
- if self._saved_position != None:
- self._position = self._saved_position
- if self._position == self.num_tabs:
- self._position -= 1
- self.ForgetPosition()
-
- def RestoreTab(self, tab, position):
- self._tabs.insert(position, tab)
- self._position = position
- self.ForgetPosition()
-
- def Focus(self, position):
- self._position = position
- self.ForgetPosition()
-
- def TabLeft(self):
- if self._position == 0:
- self.Focus(self.num_tabs - 1)
- else:
- self.Focus(self._position - 1)
-
- def TabRight(self):
- if self._position == self.num_tabs - 1:
- self.Focus(0)
- else:
- self.Focus(self._position + 1)
-
-
-class BrowserState(object):
- """A set of properties representing browser after an action sequence."""
-
- def __init__(self, advanced_actions=False):
- self._windows = []
- self._focus_stack = []
- self._closed = []
- blank_tab = TabState('about:blank')
- self.NewWindow(tab=blank_tab)
- self.advanced = advanced_actions
-
- @property
- def num_windows(self):
- return len(self._windows)
-
- @property
- def window(self):
- return self._focus_stack[self.num_windows - 1]
-
- @property
- def window_position(self):
- return self._windows.index(self.window)
-
- def NewWindow(self, tab=None, private=False):
- window = WindowState(tab=tab, private=private)
- self._windows.append(window)
- self._focus_stack.append(window)
-
- def RemoveWindow(self):
- assert self.num_windows > 1, 'not enough windows to RemoveWindow'
- window = self._focus_stack.pop()
- window.ForgetPosition()
- self._windows.remove(window)
- self._Remember(window)
-
- def _Remember(self, window, tab=None, position=None):
- if window.private:
- return
- self._closed.append((window, tab, position))
- if len(self._closed) > 10:
- self._closed = self._closed[-10:]
-
- def _Focus(self, position):
- window = self._windows[position]
- self._focus_stack.remove(window)
- self._focus_stack.append(window)
-
- def NewTab(self, location='chrome://newtab'):
- self.window.NewTab(location)
-
- def Downloads(self):
- position = self.window.FindTab('chrome://downloads')
- if position >= 0:
- self.window.Focus(position)
- else:
- self.NewTab('chrome://downloads')
- self.window.ForgetPosition()
-
- def RemoveTab(self, destroy_tab=True):
- """Remove active tab from active window.
-
- Args:
- destroy_tab: boolean, true if the tab is being closed.
- """
- assert self.window.num_tabs > 1 or self.num_windows > 1, 'illegal RemoveTab'
- if self.window.num_tabs == 1:
- self.RemoveWindow()
- return
- if destroy_tab and not self.window.private:
- self._Remember(self.window, self.window.tab, self.window.tab_position)
- self.window.RemoveTab()
-
- def CanRestore(self):
- """Return True if Restore is a valid action."""
- if self.window.private:
- return False
- if self._closed:
- return True
- return False
-
- def Restore(self):
- """Restore a previously removed tab/window.
-
- Expected behavior:
- - If a private window is in focus, you cannot restore tabs.
- - If the last removed tab was in a different window, that window comes back
- into focus.
- - If the window is gone, a new window will come to focus with the restored
- tab.
- - Tabs restore to the same index they were removed at, else the last
- position.
- """
- assert self._closed, 'nothing to Restore'
- assert not self.window.private, 'cannot Restore (private window)'
- window, tab, position = self._closed.pop()
- try:
- i = self._windows.index(window)
- self._Focus(i)
- except ValueError:
- pass
- if self.window == window:
- self.window.RestoreTab(tab, position)
- else:
- self._windows.append(window)
- self._focus_stack.append(window)
-
- def DragOut(self):
- """Drag tab out of window, spawns new window."""
- assert self.window.num_tabs > 1, 'not enough tabs to DragOut'
- tab = self.window.tab
- self.RemoveTab(destroy_tab=False)
- self.NewWindow(tab=tab, private=self.window.private)
-
- def DragLeft(self):
- self.window.DragLeft()
-
- def DragRight(self):
- self.window.DragRight()
-
- def Navigate(self, target):
- self.window.ForgetPosition()
- self.window.tab.Navigate(target)
-
- def Back(self):
- self.window.tab.Back()
-
- def Forward(self):
- self.window.tab.Forward()
-
- def NextTab(self):
- self.window.TabRight()
-
- def LastTab(self):
- self.window.TabLeft()
-
-
-def UpdateState(browser, action):
- """Return new browser state after performing action.
-
- Args:
- browser: current browser state.
- action: next action performed.
-
- Returns:
- new browser state.
- """
- a = action.split(';')[0]
- if a == 'openwindow':
- browser.NewWindow()
- elif a == 'goofftherecord':
- browser.NewWindow(private=True)
- elif a == 'newtab':
- browser.NewTab()
- elif a == 'dragtabout':
- browser.DragOut()
- elif a == 'dragtableft':
- browser.DragLeft()
- elif a == 'dragtabright':
- browser.DragRight()
- elif a == 'closetab':
- browser.RemoveTab()
- elif a == 'closewindow':
- browser.RemoveWindow()
- elif a == 'restoretab':
- browser.Restore()
- elif a == 'navigate':
- browser.Navigate(action.split(';')[1])
- elif a == 'downloads':
- browser.Downloads()
- elif a == 'back':
- browser.Back()
- elif a == 'forward':
- browser.Forward()
- elif a == 'nexttab':
- browser.NextTab()
- elif a == 'lasttab':
- browser.LastTab()
- return browser
-
-
-def GetRandomAction(browser):
- """Return a random possible action for a UI sequence in given state.
-
- Args:
- browser: current browser state.
-
- Returns:
- UI action (string).
- """
- possible_actions = []
-
- def AddActionWithWeight(action, weight=1):
- """Add action to possible actions list with given weight.
-
- Args:
- action: action string.
- weight: integer weight value.
- """
- for _ in xrange(weight):
- possible_actions.append(action)
-
- AddActionWithWeight('showbookmarks')
- if browser.num_windows < 6:
- AddActionWithWeight('openwindow')
- if browser.window.num_tabs < 10:
- AddActionWithWeight('newtab', weight=3)
-
- # Throw in some navigates to generate a realistic environment.
- nav_options = ['http://www.craigslist.com',
- 'http://www.google.com',
- 'http://www.bing.com']
- for location in nav_options:
- if browser.window.tab.location != location:
- AddActionWithWeight('navigate;%s' % location)
-
- if browser.window.tab.location != 'Downloads':
- AddActionWithWeight('downloads')
-
- # Actions on a web page.
- if browser.window.tab.navs > 0:
- AddActionWithWeight('star')
- AddActionWithWeight('zoomplus')
- AddActionWithWeight('zoomminus')
- AddActionWithWeight('pagedown', weight=3)
-
- # Other conditional actions.
- if browser.window.tab.navs > 0:
- AddActionWithWeight('back', weight=3)
- if browser.window.tab.backs > 0:
- AddActionWithWeight('forward', weight=2)
- if browser.window.num_tabs > 1 or browser.num_windows > 1:
- AddActionWithWeight('closetab', weight=2)
- if browser.window.num_tabs > 1:
- AddActionWithWeight('dragtabout')
- if browser.window.tab_position > 0:
- AddActionWithWeight('dragtableft')
- if browser.window.tab_position < browser.window.num_tabs - 1:
- AddActionWithWeight('dragtabright')
-
- # (v2) actions. separated for backwards compatability.
- if browser.advanced:
- if browser.num_windows > 1:
- AddActionWithWeight('closewindow')
- #TODO(ace): fix support for restore action.
- #if browser.CanRestore():
- # AddActionWithWeight('restoretab')
- if browser.window.tab_position > 0:
- AddActionWithWeight('lasttab')
- if browser.window.tab_position < browser.window.num_tabs - 1:
- AddActionWithWeight('nexttab')
- if browser.num_windows < 6:
- AddActionWithWeight('goofftherecord')
-
- return ChooseFrom(possible_actions)
-
-
-def Seed(seed=None):
- """Seed random for reproducible command sequences.
-
- Args:
- seed: optional long int input for random.seed. If none is given,
- one is generated.
-
- Returns:
- The given or generated seed.
- """
- if not seed:
- random.seed()
- seed = random.getrandbits(64)
- random.seed(seed)
- return seed
-
-
-def ChooseFrom(choice_list):
- """Return a random choice from given list.
-
- Args:
- choice_list: list of possible choices.
-
- Returns:
- One random element from choice_list
- """
- return random.choice(choice_list)
« no previous file with comments | « chrome/test/functional/translate.py ('k') | chrome/test/functional/ui_runner.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698