r16316 - gnucash/branches/dogtail/src - add new dogtail files

Ahmed Sayed asayed at cvs.gnucash.org
Sun Jul 15 18:40:15 EDT 2007


Author: asayed
Date: 2007-07-15 18:40:12 -0400 (Sun, 15 Jul 2007)
New Revision: 16316
Trac: http://svn.gnucash.org/trac/changeset/16316

Added:
   gnucash/branches/dogtail/src/test-dogtail/
   gnucash/branches/dogtail/src/test-dogtail/GnuCash.py
   gnucash/branches/dogtail/src/test-dogtail/act/
   gnucash/branches/dogtail/src/test-dogtail/act/mytest_act
   gnucash/branches/dogtail/src/test-dogtail/act/test_new_account_dialog_act
   gnucash/branches/dogtail/src/test-dogtail/act/test_style_sheets_2_act
   gnucash/branches/dogtail/src/test-dogtail/act/test_style_sheets_act
   gnucash/branches/dogtail/src/test-dogtail/ref/
   gnucash/branches/dogtail/src/test-dogtail/ref/mytest_ref
   gnucash/branches/dogtail/src/test-dogtail/ref/test_new_account_dialog_ref
   gnucash/branches/dogtail/src/test-dogtail/ref/test_style_sheets_2_ref
   gnucash/branches/dogtail/src/test-dogtail/ref/test_style_sheets_ref
   gnucash/branches/dogtail/src/test-dogtail/runtest.py
   gnucash/branches/dogtail/src/test-dogtail/validator.py
Log:
add new dogtail files


Added: gnucash/branches/dogtail/src/test-dogtail/GnuCash.py
===================================================================
--- gnucash/branches/dogtail/src/test-dogtail/GnuCash.py	2007-07-15 20:24:42 UTC (rev 16315)
+++ gnucash/branches/dogtail/src/test-dogtail/GnuCash.py	2007-07-15 22:40:12 UTC (rev 16316)
@@ -0,0 +1,1104 @@
+""" wrapper code to help when scripting GnuCash
+    Author: Ahmed Sayed Hassan <ahmadsayed83 at yahoo.com>
+"""
+__author__ = 'Ahmed Sayed Hassan <ahmadsayed83 at yahoo.com>'
+
+import os
+import re
+from dogtail.tree import Node
+from dogtail.tree import root
+from dogtail.tree import Window
+from dogtail.tree import predicate
+from dogtail.tree import Application
+from dogtail.procedural import click
+import dogtail.procedural
+import dogtail.rawinput
+from time import sleep
+from dogtail import tree, predicate
+from dogtail.config import config
+from dogtail.procedural import focus
+
+# use the the following list to dismiss the code in this Order Cancel, No, Then Close, .... Add more if others
+default_dismiss_list = ['Close', 'Cancel', 'No'] 
+def in_dismiss_list(button, dismiss_list=default_dismiss_list):
+    """Check if the Button already in the dismiss list you could override the default behaviour by passing
+        your own dismiss list to the code
+    """
+    for button_name in dismiss_list:
+        if button_name == button.name:
+            return button
+    return None
+
+def cleanup():
+    """ Remove only the First Entry of the recent in order to avoid opening recent application """
+    os.system("gconftool-2 --unset /apps/gnucash/history/file0")        
+
+def ungraceful_close():
+    """ kill gnuCash Process used when Hang expected """
+    os.system("killall gnucash-bin")
+
+def cleanup_all():
+    """ usefull to delete all GnuCash to run first time wizard or when things go extemely wrong"""
+    ungraceful_close()
+    sleep(5)
+    os.system("gconftool-2 --recursive-unset /apps/gnucash")        
+
+class GnuCashApp (Application):
+
+    """ Wrapper for GnuCash Application"""
+    def __init__(self):
+        Application.__init__(self, root.application("gnucash"))
+
+    def __close(self):
+        """ Close GnuCash Application """
+        filemenu = self.menu("File")
+        exitmenu = filemenu.menuItem("Quit")
+        exitmenu.click()
+
+    def close_without_saving(self):
+        self.__close()
+        focus.application('gnucash')
+        click('Close Without Saving', roleName='push button')
+
+    def close_and_save(self):
+        self.__close()
+        focus.application('gnucash')
+        click('Save', roleName='push button')
+
+    def dismiss_all_dialogs(self):
+        """ dismiss all dialogs using procedural this should be migrated to tree but there is a problem with the
+        Yes/No dialogs apears after dismiss the first wizard"""
+        dialogs = self.findChildren(predicate.GenericPredicate(roleName='dialog'))
+        if dialogs == None: return
+        focus.application('gnucash')
+        focus.dialog('GnuCash Tip Of The Day')
+        click('Close', roleName='push button')
+        if len(dialogs) == 2:
+            focus.dialog('')
+            click('Cancel', roleName='push button')
+            click('Yes', roleName='push button')
+
+    def add_new_account(self):
+        """ Add new Account Just Call add new account """
+        newAccount = NewAccount()
+        newAccount.invoke()
+        return newAccount
+
+    def add_new_account_page(self):
+        """ add new account page """
+        self.menu("File").menu("New").child("New Accounts Page").click()
+        account_page = self.tab("Accounts")
+        return account_page
+    
+    def add_account (self, account_name, account_type=None, account_parent=None, smallest_fraction=None, account_code=None,   description=None, notes=None):
+        if account_parent != None:
+            account_table = self.findChild(predicate.GenericPredicate(roleName='page tab', name='Accounts'))
+            parent_cell = account_table.findChild(predicate.GenericPredicate(roleName='table cell', name=account_parent))
+            parent_cell.rawClick()
+
+        newAccount = NewAccount()
+        newAccount.invoke()
+
+        if account_code != None:
+            newAccount.account_code = account_code
+        if description != None:
+            newAccount.description = description
+        if notes != None:
+            newAccount.notes = notes
+        if smallest_fraction != None:
+            newAccount.smallest_fraction_text = smallest_fraction
+        if account_type != None:
+            newAccount.account_type = account_type
+        newAccount.account_name = account_name
+        newAccount.accept()
+    
+class GnucashWindow(Window):
+    """ A base for all Gnucash Dialogs dialogs """
+
+    def __init__(self, node):
+        Window.__init__(self, node)
+
+    def initialize(self):
+        """ Method to be overriden in the children """
+        pass
+
+    def invoke(self):
+        """ Invoke the dialog, based on the overriden list of path """
+        gnucash = GnuCashApp()
+        for i in range(len(self.invoke_list)):
+            if i == 0:
+                menu_item = gnucash.menu(self.invoke_list[i])
+            elif i == (len(self.invoke_list)-1):
+                menu_item.child(self.invoke_list[i]).click()
+            else:
+                menu_item = menu_item.menu(self.invoke_list[i])
+        sleep(1)
+        dialog_list = gnucash.findChildren(predicate.GenericPredicate(roleName='dialog'))
+        sleep(5)
+        for dialog in dialog_list:
+            result = re.match(self.dialog_name, dialog.name)
+            print self.dialog_name
+            print dialog.name
+            if result != None:
+                Window.__init__(self, dialog)
+                self.initialize()
+                return
+            else:
+                print "Not called"
+
+    def dismiss(self):
+        """" when calling dismiss the expected action is Cancel, Close and No """
+        button_list = self.findChildren(predicate.GenericPredicate(roleName='push button'))
+        for button in button_list:
+            dismiss_button = in_dismiss_list(button)
+            if dismiss_button != None:
+                if dismiss_button.showing:
+                    dismiss_button.click()
+                    return True
+        return False
+
+class NewAccount(GnucashWindow):
+    """ Wrapper class for new Account Dialog """	
+
+    def initialize (self):
+        """ Define Widgets called at gnucash Constructor after invoke """
+        print ("initialization")
+        self.GeneralTab = self.tab("General")
+        self.OpeninigBalanceTab = self.tab("Opening Balance")
+        self.account_name_text = \
+        self.GeneralTab.findChild (predicate.IsLabelledAs("Account name:"))
+        self.account_code_text = \
+        self.GeneralTab.findChild (predicate.IsLabelledAs("Account code:"))
+        self.description_text  = \
+        self.GeneralTab.findChild (predicate.IsLabelledAs("Description:"))
+        self.notes_text = \
+        self.GeneralTab.findChild (predicate.IsLabelledAs("Notes:"))
+        self.smallest_fraction = \
+        self.GeneralTab.findChild (predicate.IsLabelledAs("Smallest fraction:"))
+        self.account_type_table  = \
+        self.GeneralTab.findChild (predicate.IsLabelledAs("Account Type"))
+        self.account_parent_table = \
+        self.GeneralTab.findChild (predicate.IsLabelledAs("Parent Account"))
+        self.place_holder_checkbox = \
+        self.GeneralTab.findChild (predicate.GenericPredicate(\
+        roleName="check box", name="Placeholder"))
+        self.hidden_checkbox = \
+        self.GeneralTab.findChild (predicate.GenericPredicate(\
+        roleName="check box", name="Hidden"))
+        self.tax_related_checkbox = \
+        self.GeneralTab.findChild(predicate.GenericPredicate(\
+        roleName="check box", name="Tax related"))
+        self.ok_button = self.button("OK")
+        
+    def __init__(self):
+        self.invoke_list = ["File", "New", "New Account..."]
+        self.dialog_name = 'New Account - .'
+        
+
+    def __setattr__(self, name, value):
+        """ Always set the account name as your last account because it changes the dialog title which may lead to failure
+        TODO: Fix up this issue, find a way to search using the regex, or implement it
+        """
+        if name == 'account_name':
+            self.account_name_text.text = value
+        elif name == 'account_code':
+            self.account_code_text.text = value
+        elif name == 'description':
+            self.description_text.text = value
+        elif name == 'notes':
+            self.notes_text.text = value
+        elif name == 'smallest_fraction_text':
+            self.smallest_fraction.combovalue = value
+        elif name == 'account_type':
+            self.account_type_table.findChild(predicate.GenericPredicate(roleName="table cell", name=value )).select()
+        elif name == 'account_parent':
+            self.account_parent_table.findChild(predicate.GenericPredicate(roleName="table cell", name='New top level account')).doAction('activate')
+            self.account_parent_table.findChild(predicate.GenericPredicate(roleName="table cell", name=value )).doAction('activate')
+            
+        elif name == 'hidden':
+            if value and not self.hidden_checkbox.checked:
+                self.hidden_checkbox.click()
+            elif not value and self.hidden_checkbox.checked:
+                self.hidden_checkbox.click()
+        elif name == 'place_holder':
+            if value and not self.place_holder_checkbox.checked:
+                self.place_holder_checkbox.click()
+            elif not value and self.place_holder_checkbox.checked:
+                self.place_holder_checkbox.click()
+        elif name == 'tax_related':
+            if value and not self.tax_related_checkbox.checked:
+                self.tax_related_checkbox.click()
+            elif not value and self.tax_related_checkbox.checked:
+                self.tax_related_checkbox.click()
+        else:
+            self.__dict__[name]=value
+
+    def set_currency(self, value):
+        """ TODO: Try to figure out why It does not work  """
+        click('Select...', roleName='push button')
+        focus.dialog('Select currency')
+        click(value, roleName='menu item')
+
+    def dismiss(self):
+        self.button('Cancel').click()
+
+    def accept(self):
+        self.ok_button.click()
+
+class Preferences(GnucashWindow):
+    """ GnuCash prefernces Wrapper """
+    class AccountingPeriodTab(Node):
+
+        def __init__(self, initializer):
+            """ Init method for Accounting Dialog Calender does not work, can not find a way to use it """
+            Node.__init__(self, initializer)
+            self.include_grand_total_checkbox = \
+            self.findChild(predicate.GenericPredicate \
+            (roleName='check box', name='Include grand total'))
+            self.include_non_currency_totals_checkbox = \
+            self.findChild(predicate.GenericPredicate \
+            (roleName='check box', name='Include non-currency totals'))
+            self.start_date_relative_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button', \
+            name='Relative:', \
+            description=\
+            'Use the specified relative starting date for profit/loss calculations.'))
+            self.start_date_absolute_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button', \
+            name='Absolute:', \
+            description='Use the specified absolute starting date for profit/loss calculations.'))
+            self.start_of_combobox = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='combo box', \
+            name='Start of this year'))
+            
+    class Accounts(Node):
+        
+        def __init__(self, initializer):
+            Node.__init__(self, initializer)
+            self.charachter_text = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='text', \
+            description='The character that will be used between components of an account name.  A legal value is any single character except letters and numbers, or any of the following strings: "colon" "slash", "backslash", "dash" and "period".'))
+            self.income_expense_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button',\
+             name='Income & expense'))
+            self.credit_accounts_rb = \
+            self.findChild(predicate.GenericPredicate(roleName='radio button', \
+            name='Credit accounts'))
+            self.none_rb = \
+            self.findChild(predicate.GenericPredicate( \
+            roleName='radio button', name='None'))
+            self.user_formal_accounting_lables_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Use formal accounting labels'))
+            self.currency_combo_box = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='combo box', \
+            name='USD (US Dollar)'))
+            self.choose_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button', \
+            name='Choose:'))
+            self.local_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button', \
+            name='Locale:'))
+
+    class Business(Node):
+        
+        def __init__(self, initializer):
+            Node.__init__(self, initializer)
+            self.open_in_new_window_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Open in new window'))
+            self.number_of_rows_spin_button = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='spin button', \
+            description='Default number of register rows to display in Invoices.'))
+            self.accumulate_splits_on_post_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Accumulate splits on post'))
+            self.invoice_tax_included_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', name='Tax included', \
+            description='Whether tax is included by default in entries on Invoices. This setting is inherited by new customers and vendors.'))
+            self.notify_when_due_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Notify when due'))
+            self.days_in_advance_spin_button = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='spin button', \
+            description='How many days in the future to warn about Bills coming due.'))
+            self.bills_tax_included_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Tax included', \
+            description='Whether tax is included by default in entries on Bills. This setting is inherited by new customers and vendors.'))
+
+    class History(Node):
+
+        def __init__(self, initializer):
+            Node.__init__(self, initializer)
+            self.use_24_hour_clock_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Use 24-hour clock'))
+            self.local_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button', \
+            name='Locale:'))
+            self.us_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button', \
+            name='US:'))
+            self.uk_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button', \
+            name='UK:'))
+            self.europe_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button', \
+            name='Europe:'))
+            self.iso_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button', \
+            name='ISO'))
+
+    class General(Node):
+        
+        def __init__(self, initializer):
+            Node.__init__(self, initializer)
+            self.show_splash_screen_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Show splash screen'))
+            self.new_search_limit_spin_button = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='spin button', \
+            description="Default to 'new search' if fewer than this number of items is returned."))
+            self.display_negative_amounts_in_red_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Display negative amounts in red'))
+            self.automatic_decimal_point_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Automatic decimal point'))
+            self.decimal_places_spin_button = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='spin button', \
+            description='How many automatic decimal places will be filled in.'))
+            self.display_tod_dialog_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Display "tip of the day" dialog'))
+            self.enable_euro_support = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Enable euro support'))
+            self.perform_account_list_setup_on_new_file_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Perform account list setup on new file'))
+            
+    class OnlineBanking(Node):
+
+        def __init__(self, initializer):
+            Node.__init__(self, initializer)
+            self.show_documentation_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Show documentation'))
+            self.use_bayesian_matching_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Use bayesian matching'))
+            self.match_display_threshold_spin_button = \
+            self.findChild(\
+            predicate.IsLabelledAs('Match display threshold'))
+            self.auto_add_threshold_spin_button = \
+            self.findChild(predicate.IsLabelledAs('Auto-add threshold'))
+            self.auto_clear_threshold_spin_button = \
+            self.findChild(predicate.IsLabelledAs('Auto-clear threshold'))
+            self.commercial_atm_fees_threshold_spin_button = \
+            self.findChild(predicate.IsLabelledAs('Commercial ATM fees threshold'))
+
+    class Printing(Node):
+
+        def __init__(self, initializer):
+            Node.__init__(self, initializer)
+            self.print_date_format_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Print date format'))
+            self.print_blocking_chars_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Print blocking chars'))
+            self.default_font = \
+            self.findChild(predicate.IsLabelledAs('Default font:'))
+
+    class Register(Node):
+
+        def __init__(self, initializer):
+            Node.__init__(self, initializer)
+            self.use_system_theme_colors_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Use system theme colors'))
+            self.double_mode_colors_alternate_with_transactions_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Double mode colors alternate with transactions'))
+            self.draw_horizontal_lines_between_rows_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Draw horizontal lines between rows'))
+            self.draw_vertical_lines_between_columns_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Draw vertical lines between columns'))
+            self.automatic_credit_card_payment_cb = \
+            self.findChild(\
+            predicate.GenericPredicate(roleName='check box', \
+            name='Automatic credit card payment'))
+            self.automatic_interest_transfer_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Automatic interest transfer'))
+            self.Check_cleared_transactions_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Check cleared transactions'))
+            self.auto_raise_lists_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Auto-raise lists'))
+            self.enter_moves_to_blank_transaction_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name="'Enter' moves to blank transaction"))
+
+    class RegisterDefaults(Node):
+        
+        def __init__(self, initializer):
+            Node.__init__(self, initializer)
+            self.number_of_rows_spin_button = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='spin button', \
+            description='Display this many rows when a register is created.'))
+            self.register_opens_in_a_new_window_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Register opens in a new window'))
+            self.double_line_mode_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Double line mode'))
+            self.number_of_transactions_spin_button = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='spin button', \
+            description='Show this many transactions in a register. A value of zero means show all transactions.'))
+            self.transaction_journal_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button', \
+            name='Transaction journal'))
+            self.auto_split_ledger_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button', \
+            name='Auto-split ledger'))
+            self.basic_ledger_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button', \
+            name = 'Basic ledger'))
+
+    class Reports(Node):
+
+        def __init__(self, initializer):
+            Node.__init__(self, initializer)
+            self.report_opens_in_a_new_window_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Report opens in a new window'))
+            self.locale_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button', \
+            name='Locale:'))
+            self.choose_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button', \
+            name='Choose:'))
+            self.select_currency_combo_box = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='combo box', \
+            name='USD (US Dollar)'))
+
+    class ScheduledTransactions(Node):
+        
+        def __init__(self, initializer):
+            Node.__init__(self, initializer)
+            self.notify_before_transactions_are_created_cb = \
+            self.findChild(predicate.GenericPredicate(roleName='check box', \
+            name='Notify before transactions are created '))
+            self.create_days_spin_button = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='spin button', \
+            description='Begin notifications this many days before the transaction is created.'))
+            self.remind_days_spin_button = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='spin button', \
+            description='Begin notifications this many days before the transaction is created.'))
+            self.auto_create_new_transactions_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Auto-create new transactions'))
+            self.run_when_data_file_opened_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Run when data file opened'))
+
+    class Windows(Node):
+        
+        def __init__(self, initializer):
+            Node.__init__(self, initializer)
+            self.width_spin_button = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='spin button'))
+            self.show_close_button_on_notebook_tabs_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Show close button on notebook tabs'))
+            self.right_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button', \
+            name='Right'))
+            self.left_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button', \
+            name='Left'))
+            self.bottom_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button', \
+            name='Bottom'))
+            self.top_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button', \
+            name='Top'))
+            self.bring_the_most_recent_tab_to_the_front_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Bring the most recent tab to the front'))
+            self.save_window_size_and_position_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='check box', \
+            name='Save window size and position'))
+            self.use_system_default_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button', \
+            name='Use system default'))
+            self.text_below_icons_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button', \
+            name='Text below icons'))
+            self.priority_text_beside_icons_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button', \
+            name='Priority text beside icons'))
+            self.icons_only_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button', \
+            name='Icons only'))
+            self.text_only_rb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName='radio button', \
+            name='Text only'))
+
+
+    def __init__(self):
+        self.invoke_list = ["Edit", "Preferences"]
+        self.dialog_name = 'GnuCash Preferences'
+
+    def initialize(self):
+        """ define controls called after GnucashWindow call invoke """
+        self.account_period = \
+        self.AccountingPeriodTab(self.tab('Accounting Period'))
+        self.accounts = \
+        self.Accounts(self.tab('Accounts'))
+        self.general = \
+        self.General(self.tab('General'))
+        self.online_banking = \
+        self.OnlineBanking(self.tab('Online Banking'))
+        self.printing = \
+        self.Printing(self.tab('Printing'))
+        self.register = self.Register(self.tab('Register'))
+        self.register_defaults = \
+        self.RegisterDefaults(self.tab('Register Defaults'))
+        self.reports = self.Reports(self.tab('Reports'))
+        self.scheduled_transactions = \
+        self.ScheduledTransactions(self.tab('Scheduled Transactions'))
+        self.windows = self.Windows(self.tab('Windows'))
+
+class Find(GnucashWindow):
+    """ Wrapper for all gnucash Find include Find txns, Find Customer, Find Job, ... """
+    
+    def __init__(self):
+        pass
+
+    def initialize(self):
+        """ initialize Common components """
+
+        self.add_btn = self.button('Add')
+        self.remove_btn_list = \
+        self.findChildren(\
+        predicate.GenericPredicate(roleName='push button', name='Remove'))
+        self.search_criteria_filler_list = \
+        self.findChildren(\
+        predicate.GenericPredicate(roleName='filler'))
+        self.find_btn = self.button('Find')
+        self.new_search_rb = \
+        self.findChild(\
+        predicate.GenericPredicate(roleName='radio button', name='New search'))
+        self.refine_current_search_rb = \
+        self.findChild(\
+        predicate.GenericPredicate(roleName='radio button', name='Refine current search'))
+        self.add_results_to_current_search_rb = \
+        self.findChild(\
+        predicate.GenericPredicate(roleName='radio button', name='Add results to current search'))
+        self.delete_results_from_current_search = \
+        self.findChild(\
+        predicate.GenericPredicate(roleName='radio button', name='Delete results from current search'))
+
+
+
+class FindTransaction(Find):
+    """ Find Transaction Wrapper """
+
+    def __init__(self):
+        self.invoke_list = ["Edit", "Find..."]
+        self.dialog_name = 'Find Transaction'
+
+class TaxOption(GnucashWindow):
+    """ Gnucash Taxoptions Dialog Wrapper """
+
+    def __init__(self):
+        self.invoke_list = ["Edit", "Tax Options"]
+        self.dialog_name = 'Tax Information'
+
+    def initialize(self):
+        """ intialize Tax options dialog components 
+            TODO: Compelete the remaining fields after thing became more clear with this dialog
+        """
+        self.income_rb = self.findChild(predicate.GenericPredicate(\
+        roleName='radio button', name='Income'))
+        self.expense_rb = self.findChild(predicate.GenericPredicate(\
+        roleName='radio button', name='Expense'))
+        self.select_subaccounts_btn = self.button('Select Subaccounts')
+        self.tax_related_cb = self.findChild(predicate.GenericPredicate(\
+        roleName='check box', name='Tax Related'))
+        self.current_account_rb = self.findChild(predicate.GenericPredicate(\
+        roleName='radio button', name='Current Account'))
+        self.parent_account_rb = self.findChild(predicate.GenericPredicate(\
+        roleName='radio button', name='Parent Account'))
+        self.ok_btn = self.button('OK')
+        self.cancel_btn = self.button('Cancel')
+
+
+class StyleSheets(GnucashWindow):
+    """ Style Sheet Dialogs Wrapper """
+
+    def __init__(self):
+        self.invoke_list = ["Edit", "Style Sheets"]
+        self.dialog_name = 'Select HTML Style Sheet'
+
+    def initialize(self):
+        """ initilize the Style Sheets Components """
+        self.edit_btn = self.button('Edit')
+        self.new_btn = self.button('New')
+        self.delete_btn = self.button('Delete')
+        self.close_btn = self.button('Close')
+        self.style_sheets_table = self.findChild(predicate.GenericPredicate(roleName='table'))
+
+
+class NewStyleSheet(Window):
+    """ New Style Sheet dialog """
+
+    def __init__(self, Node):
+        Window.__init__(self, Node)
+        self.name_text = self.findChild(predicate.GenericPredicate(roleName='text'))
+        self.template_combo = self.findChild(predicate.GenericPredicate(roleName='combo box'))
+        self.ok_btn = self.button('OK')
+        self.cancel_btn = self.button('Cancel')
+
+    def __setattr__(self, name, value):
+        """ Set The Style Sheet """
+        if name == 'style_name':
+            self.name_text.text = value
+        elif name == 'template':
+            self.template_combo.combovalue = value
+        else:
+            self.__dict__[name]=value
+
+    def accept(self):
+        self.ok_btn.click()
+
+    def dismiss(self):
+        self.cancel_btn.click()
+
+class HTMLStyleSheet(Window):
+    """ 
+        HTML Style Sheet dialog  
+        TODO: Not compeleted yet compelete it only accept the default values
+    """
+    def __init__(self, Node):
+        Window.__init__(self, Node)
+        self.ok_btn = self.button('OK')
+        self.cancel_btn = self.button('Cancel')
+        self.defaults_btn = self.button('Defaults')
+
+    def accept(self):
+        self.ok_btn.click()
+
+    def dismiss(self):
+        self.cancel_btn.click()
+
+
+class ResetWarnings(GnucashWindow):
+    """ Reset Warning wrapper """
+
+    def __init__(self):
+        self.invoke_list = ["Actions", "Reset Warnings..."]
+        self.dialog_name = 'Reset Warnings'
+
+    def initialize(self):
+        """ Reset Warning controls 
+            TODO: confirm the selet all and unselect those controls not visible while writing this code
+        """
+        self.select_all_btn = self.button('Select All')
+        self.unselect_all_btn = self.button('Unselect All')
+        self.ok_btn = self.button('OK')
+        self.apply_btn = self.button('Apply')
+        self.cancel_btn = self.button('Cancel')
+
+class SetupAccountingPeriods(GnucashWindow):
+    """ Setup Accounting Period """
+
+    def __init__(self):
+        self.invoke_list = ["Actions", "Close Books"]
+        self.dialog_name = 'Setup Accounting Periods'
+
+
+class NewXXX(GnucashWindow):
+    """ This class used to hold the common controls between the New Customer, New Vendor and New Empolyee 
+        TODO: Replace XXX with a nice name, this name is terrible, i can not call other one
+    """
+
+    class XXX(Node):
+        """ 
+        Class for 
+            Vendor Tab in New Vendor
+            Customer in New Customer
+            Empolyee in New Empolyee
+        """
+
+        def __init__(self, initialize):
+            Node.__init__(self, initialize)
+            #self.company_name_txt = self.findChild(\
+            #predicate.IsLabelledAs('Company Name: '))
+            self.billing_information = \
+            self.findChild(predicate.GenericPredicate\
+            (roleName='panel', name ='Billing Address'))
+            self.billing_information_elements = \
+            self.findChildren(predicate.GenericPredicate\
+            (roleName='text'))
+            self.active_cb = self.findChild(predicate.GenericPredicate(\
+            roleName='check box', name='Active'))
+            self.name_txt = self.billing_information_elements[0]
+            self.address_1_txt = self.billing_information_elements[1]
+            self.address_2_txt = self.billing_information_elements[2]
+            self.address_3_txt = self.billing_information_elements[3]
+            self.address_4_txt = self.billing_information_elements[4]
+            self.phone_txt = self.billing_information_elements[5]
+            self.fax_txt = self.billing_information_elements[6]
+            self.email_txt = self.billing_information_elements[7]
+
+    class YYYInformation(Node):
+        """
+        Class to wrap 
+            1 - Billing Information in New Customer
+            2 - Payment Information in New Vendor (Not all member variable used in this case
+        """
+        def __init__(self, initializer):
+            Node.__init__(self, initializer)
+            self.currency_combobox = \
+            self.findChild(predicate.GenericPredicate(roleName='combo box', name='USD (US Dollar)'))
+            self.terms_combobox = \
+            self.findChild(predicate.GenericPredicate(roleName='combo box', name='None'))
+            self.info_elements = self.findChildren(predicate.GenericPredicate(roleName='text'))
+            self.discount_txt = self.info_elements[0]
+            self.credit_limit_txt = self.info_elements[1]
+            self.tax_included_combobox = \
+            self.findChild(predicate.GenericPredicate(roleName='combo box', name='Use Global'))
+            self.override_global_tax_cb = \
+            self.findChild(predicate.GenericPredicate(\
+            roleName= 'check box', \
+            description='Override the global Tax Table?'))
+            self.tax_table_combobox = \
+            self.findChild(predicate.GenericPredicate\
+            (roleName='combo box', \
+            description='What Tax Table should be applied to this customer?'))
+
+    def __init__(self):
+        pass
+
+    def initialize(self):
+        """ Initialize new generic components """
+        self.ok_btn = self.button('OK')
+        self.cancel_btn = self.button('Cancel')
+        self.help_btn = self.button('Help')
+
+
+class NewCustomer(NewXXX):
+    """ New Customer wrapper """
+    class ShippingAddress(Node):
+
+        def __init__(self, initializer):
+            Node.__init__(self, intializer)
+            self.name_txt = self.findChild(predicate.IsLabelledAs('Name: '))
+            self.address_txt = self.findChild(predicate.IsLabelledAs('Address: '))
+            self.phone_txt = self.findChild(predicate.IsLabelledAs('Phone: '))
+            self.fax_txt = self.findChild(predicate.IsLabelledAs('Fax: '))
+            self.email_txt = self.findChild(predicate.IsLabelledAs('Email: '))
+            
+    def __init__(self):
+        self.invoke_list = ["Business", "Customer", "New Customer..."]
+        self.dialog_name = 'New Customer'
+        
+
+    def initialize(self):
+        NewXXX.initialize(self)
+        self.customer = self.XXX(self.tab('Customer'))
+        self.billing_information = self.YYYInformation(self.tab('Billing Information'))
+        self.identification_panel = \
+        self.customer.findChild(predicate.GenericPredicate(roleName='panel', name='Identification'))
+        self.identification_panel_element = \
+        self.identification_panel.findChildren(predicate.GenericPredicate(roleName='text'))
+        self.customer.customer_number_txt = self.identification_panel_element[0]
+        self.billing_information = \
+        self.YYYInformation(self.tab('Billing Information'))
+        self.shipping_information = self.tab('Shipping Address')
+        self.ok_btn = self.button('OK')
+        self.cancel_btn = self.button('Cancel')
+        self.help_btn = self.button('Help')
+
+class NewVendor(NewXXX):
+
+    def __init__(self):
+        self.invoke_list = ["Business", "Customer", "New Vendor..."]
+        self.dialog_name = 'New Vendor'
+
+    def initialize(self):
+        NewXXX.initialize(self)
+        self.vendor = self.XXX(self.tab('Vendor'))
+        self.vendor.vendor_number_txt = \
+        self.vendor.findChild(predicate.IsLabelledAs('Vendor Number: '))
+        self.payment_information = \
+        self.YYYInformation(self.tab('Payment Information'))
+
+class NewEmpolyee(NewXXX):
+    """ Wrapper for New Empolyee Dialog """
+    def __init__(self):
+        self.invoke_list = ["Business", "Customer", "New Empolyee..."]
+        self.dialog_name = 'New Empolyee'
+
+    def initialize(self):
+        NewXXX.initialize(self)
+        self.empolyee = self.XXX(self.tab('Empolyee'))
+        self.empolyee.empolyee_number_txt = \
+        self.empolyee.findChild(predicate.IsLabelledAs('Employee Number: '))
+        self.empolyee.username_txt = \
+        self.empolyee.findChild(predicate.IsLabelledAs('Username: '))
+        self.empolyee.language_txt = \
+        self.empolyee.findChild(predicate.IsLabelledAs('Language: '))
+        self.empolyee.default_hours_per_day_txt = \
+        self.empolyee.findChild(predicate.IsLabelledAs('Default Hours per Day: '))
+        self.empolyee.credit_account_cb = \
+        self.empolyee.findChild(predicate.IsLabelledAs('Credit Account'))
+        self.empolyee.currency_combobox = \
+        self.empolyee.findChild(predicate.IsLabelledAs('Currency'))
+        self.empolyee.default_rate = \
+        self.empolyee.findChild(predicate.IsLabelledAs('Default Rate: '))
+        self.empolyee.default_hours_per_day = \
+        self.empolyee.findChild(predicate.IsLabelledAs('Default Hours per Day: '))
+
+class FindCustomer(Find):
+    """ Find Customer wrapper """
+
+    def __init__(self):
+        self.invoke_list = ["Business", "Customer", "Find Customer..."]
+        self.dialog_name = 'Find Customer'
+
+
+class NewInvoice(GnucashWindow):
+    """ New Invoice wrapper """
+
+    def __init__(self):
+        self.invoke_list = ["Business", "Customer", "New Invoice..."]
+        self.dialog_name = 'New Invoice'
+
+
+class FindInvoice(Find):
+    """ Find Invoice wrapper """
+
+    def __init__(self):
+        self.invoke_list = ["Business", "Customer", "Find Invoice..."]
+        self.dialog_name = 'Find Invoice'
+
+class NewJob(GnucashWindow):
+    """ New Job wrapper """
+
+    def __init__(self):
+        self.invoke_list = ["Business", "Customer", "New Job..."]
+        self.dialog_name = 'New Job .'
+
+
+class FindJob(Find):
+    """ Find Job wrapper """
+
+    def __init__(self):
+        self.invoke_list = ["Business", "Customer", "Find Job..."]
+        self.dialog_name = 'Find Job'
+
+
+
+class ProcessPayment(GnucashWindow):
+    """ Process Payment i use the name of the menu because this dialog has no title ?!"""
+
+    def __init__(self):
+        self.invoke_list = ["Business", "Customer", "Process Payment..."]
+        self.dialog_name = '' # TODO: Code update required here, to give this dialog an
+
+class NewVendor(GnucashWindow):
+    """ New Vendor """
+
+    def __init__(self):
+        self.invoke_list = ["Business", "Vendor", "New Vendor..."]
+        self.dialog_name = 'New Vendor'
+
+
+class FindVendor(Find):
+    """ Find Vendor wrapper """
+
+    def __init__(self):
+        self.invoke_list = ["Business", "Vendor", "Find Vendor..."]
+        self.dialog_name = 'Find Vendor'
+
+
+
+class NewVendorJob(GnucashWindow):
+    """ New Job for Vendor 
+        TODO: refactor it with the new Job in the customer meny
+    """
+
+    def __init__(self):
+        self.invoke_list = ["Business", "Vendor", "New Job..."]
+        self.dialog_name = 'New Job .'
+    
+
+class FindVendorJob(Find):
+    """ Find Job for Vendor """
+    
+    def __init__(self):
+        self.invoke_list = ["Business", "Vendor", "Find Job..."]
+        self.dialog_name = 'Find Job'
+
+
+class Register(Node):
+    """ Wrapper class for gnucash register """ 
+
+    def __init__(self, initializer):
+        Node.__init__(self, initializer)
+        dogtail.rawinput.click(self.position[0], self.position[1])
+        self.column_val = 0
+        self.prev_col_val = 0
+
+    def __goto(self, x, y):
+        sleep(1)
+        dogtail.rawinput.click(self.position[0], self.position[1])
+        for j in range(x):
+            self.typeText('\n')
+        for i in range(y):
+            self.keyCombo("Tab")
+
+    def set_cell_text(self, text):
+        relative_pos = self.column_val - self.prev_col_val
+        print relative_pos
+        if relative_pos > 0 :
+            for i in range(relative_pos):
+                self.keyCombo("Tab")
+        else:
+            for i in range(abs(relative_pos)):
+                self.keyCombo("<Shift>ISO_Left_Tab")
+        self.keyCombo("<Control>a")
+        self.keyCombo("Delete")
+        self.typeText(text)
+#        sleep(5)
+
+    def end_trans(self):
+        self.keyCombo("Enter")
+        GnuCashApp().menu('File').menuItem('Close').click()
+
+    def __setattr__(self, name, value):
+        if name == 'row':
+            self.row_val = value
+            self.__goto(int(value), 0)
+        elif name == 'column':
+            self.prev_col_val = self.column_val
+            self.column_val = value
+        elif name == 'date':
+            self.prev_col_val = self.column_val
+            self.column_val = 0
+            self.set_cell_text(value)
+        elif name == 'num':
+            self.prev_col_val = self.column_val
+            self.column_val = 1
+            self.set_cell_text(value)
+        elif name == 'description':
+            self.prev_col_val = self.column_val
+            self.column_val = 2
+            self.set_cell_text(value)
+        elif name == 'transfer':
+            self.prev_col_val = self.column_val
+            self.column_val = 3
+            self.set_cell_text(value)
+        elif name == 'deposite':
+            self.prev_col_val = self.column_val
+            self.column_val = 4
+            self.set_cell_text(value)
+        elif name == 'withdrawal':
+            self.prev_col_val = self.column_val
+            self.column_val = 5
+            self.set_cell_text(value)
+        else:
+            self.__dict__[name]=value
+
+
+class Reconcile(GnucashWindow):
+    """ Wrapper Class for  """
+    
+    def __init__(self):
+        self.invoke_list = ["Actions", "Reconcile..."]
+        self.dialog_name = ". Reconcile"
+
+if __name__ == '__main__':
+    reconcile = Reconcile()
+    reconcile.invoke()
+    reconcile.dismiss()
+

Added: gnucash/branches/dogtail/src/test-dogtail/act/mytest_act
===================================================================
--- gnucash/branches/dogtail/src/test-dogtail/act/mytest_act	2007-07-15 20:24:42 UTC (rev 16315)
+++ gnucash/branches/dogtail/src/test-dogtail/act/mytest_act	2007-07-15 22:40:12 UTC (rev 16316)
@@ -0,0 +1,107 @@
+{child with roleName='table'}
+ Node roleName='table column header' name='Account Name' description='' text='Account Name'
+ Node roleName='table column header' name='Type' description='' text='Type'
+ Node roleName='table column header' name='Commodity' description='' text='Commodity'
+ Node roleName='table column header' name='Account Code' description='' text='Account Code'
+ Node roleName='table column header' name='Description' description='' text='Description'
+ Node roleName='table column header' name='Last Num' description='' text='Last Num'
+ Node roleName='table column header' name='Present' description='' text='Present'
+ Node roleName='table column header' name='Present (USD)' description='' text='Present (USD)'
+ Node roleName='table column header' name='Balance' description='' text='Balance'
+ Node roleName='table column header' name='Balance (USD)' description='' text='Balance (USD)'
+ Node roleName='table column header' name='Balance (Period)' description='' text='Balance (Period)'
+ Node roleName='table column header' name='Cleared' description='' text='Cleared'
+ Node roleName='table column header' name='Cleared (USD)' description='' text='Cleared (USD)'
+ Node roleName='table column header' name='Reconciled' description='' text='Reconciled'
+ Node roleName='table column header' name='Reconciled (USD)' description='' text='Reconciled (USD)'
+ Node roleName='table column header' name='Future Minimum' description='' text='Future Minimum'
+ Node roleName='table column header' name='Future Minimum (USD)' description='' text='Future Minimum (USD)'
+ Node roleName='table column header' name='Total' description='' text='Total'
+ Node roleName='table column header' name='Total (USD)' description='' text='Total (USD)'
+ Node roleName='table column header' name='Total (Period)' description='' text='Total (Period)'
+ Node roleName='table column header' name='Notes' description='' text='Notes'
+ Node roleName='table column header' name='Tax Info' description='' text='Tax Info'
+ Node roleName='table column header' name='P' description='Placeholder' text='P'
+ Node roleName='table column header' name='' description='' text=''
+ Node roleName='table column header' name='' description='' text=''
+ Node roleName='table cell' name='' description=''
+  Node roleName='table cell' name='' description=''
+  Node roleName='table cell' name='test' description='' text='test'
+ Node roleName='table cell' name='Bank' description='' text='Bank'
+ Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='' description=''
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='' description=''
+  Node roleName='table cell' name='' description=''
+  Node roleName='table cell' name='ahmed' description='' text='ahmed'
+ Node roleName='table cell' name='Asset' description='' text='Asset'
+ Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='' description=''
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='' description=''
+  Node roleName='table cell' name='' description=''
+  Node roleName='table cell' name='ahmed' description='' text='ahmed'
+ Node roleName='table cell' name='Asset' description='' text='Asset'
+ Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='' description=''
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='' description='' text=''

Added: gnucash/branches/dogtail/src/test-dogtail/act/test_new_account_dialog_act
===================================================================
--- gnucash/branches/dogtail/src/test-dogtail/act/test_new_account_dialog_act	2007-07-15 20:24:42 UTC (rev 16315)
+++ gnucash/branches/dogtail/src/test-dogtail/act/test_new_account_dialog_act	2007-07-15 22:40:12 UTC (rev 16316)
@@ -0,0 +1,439 @@
+{"Accounts" tab}
+ Node roleName='filler' name='' description=''
+  Node roleName='scroll pane' name='' description=''
+   Node roleName='table' name='' description=''
+    Node roleName='table column header' name='Account Name' description='' text='Account Name'
+    Node roleName='table column header' name='Type' description='' text='Type'
+    Node roleName='table column header' name='Commodity' description='' text='Commodity'
+    Node roleName='table column header' name='Account Code' description='' text='Account Code'
+    Node roleName='table column header' name='Description' description='' text='Description'
+    Node roleName='table column header' name='Last Num' description='' text='Last Num'
+    Node roleName='table column header' name='Present' description='' text='Present'
+    Node roleName='table column header' name='Present (USD)' description='' text='Present (USD)'
+    Node roleName='table column header' name='Balance' description='' text='Balance'
+    Node roleName='table column header' name='Balance (USD)' description='' text='Balance (USD)'
+    Node roleName='table column header' name='Balance (Period)' description='' text='Balance (Period)'
+    Node roleName='table column header' name='Cleared' description='' text='Cleared'
+    Node roleName='table column header' name='Cleared (USD)' description='' text='Cleared (USD)'
+    Node roleName='table column header' name='Reconciled' description='' text='Reconciled'
+    Node roleName='table column header' name='Reconciled (USD)' description='' text='Reconciled (USD)'
+    Node roleName='table column header' name='Future Minimum' description='' text='Future Minimum'
+    Node roleName='table column header' name='Future Minimum (USD)' description='' text='Future Minimum (USD)'
+    Node roleName='table column header' name='Total' description='' text='Total'
+    Node roleName='table column header' name='Total (USD)' description='' text='Total (USD)'
+    Node roleName='table column header' name='Total (Period)' description='' text='Total (Period)'
+    Node roleName='table column header' name='Notes' description='' text='Notes'
+    Node roleName='table column header' name='Tax Info' description='' text='Tax Info'
+    Node roleName='table column header' name='P' description='Placeholder' text='P'
+    Node roleName='table column header' name='' description='' text=''
+    Node roleName='table column header' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Asset' description='' text='Asset'
+    Node roleName='table cell' name='Asset' description='' text='Asset'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Equity' description='' text='Equity'
+    Node roleName='table cell' name='Equity' description='' text='Equity'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Expense' description='' text='Expense'
+    Node roleName='table cell' name='Expense' description='' text='Expense'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Income' description='' text='Income'
+    Node roleName='table cell' name='Income' description='' text='Income'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Liability' description='' text='Liability'
+    Node roleName='table cell' name='Liability' description='' text='Liability'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Checking' description='' text='Checking'
+    Node roleName='table cell' name='Bank' description='' text='Bank'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Savings' description='' text='Savings'
+    Node roleName='table cell' name='Bank' description='' text='Bank'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Opening Balance' description='' text='Opening Balance'
+    Node roleName='table cell' name='Equity' description='' text='Equity'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Electricity' description='' text='Electricity'
+    Node roleName='table cell' name='Expense' description='' text='Expense'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Groceries' description='' text='Groceries'
+    Node roleName='table cell' name='Expense' description='' text='Expense'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Phone' description='' text='Phone'
+    Node roleName='table cell' name='Expense' description='' text='Expense'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Rent' description='' text='Rent'
+    Node roleName='table cell' name='Expense' description='' text='Expense'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Taxes' description='' text='Taxes'
+    Node roleName='table cell' name='Expense' description='' text='Expense'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Salary' description='' text='Salary'
+    Node roleName='table cell' name='Income' description='' text='Income'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Visa' description='' text='Visa'
+    Node roleName='table cell' name='Credit Card' description='' text='Credit Card'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+  Node roleName='filler' name='' description=''
+   Node roleName='combo box' name='$, Grand Total:' description=''
+    Node roleName='menu' name='' description=''
+     Node roleName='menu item' name='$, Grand Total:' description='' text=''
+     Node roleName='menu item' name='$:' description='' text=''

Added: gnucash/branches/dogtail/src/test-dogtail/act/test_style_sheets_2_act
===================================================================
--- gnucash/branches/dogtail/src/test-dogtail/act/test_style_sheets_2_act	2007-07-15 20:24:42 UTC (rev 16315)
+++ gnucash/branches/dogtail/src/test-dogtail/act/test_style_sheets_2_act	2007-07-15 22:40:12 UTC (rev 16316)
@@ -0,0 +1,5 @@
+{child with roleName='table'}
+ Node roleName='table column header' name='Style Sheet Name' description='' text='Style Sheet Name'
+ Node roleName='table cell' name='Default' description='' text='Default'
+ Node roleName='table cell' name='Easy' description='' text='Easy'
+ Node roleName='table cell' name='Technicolor' description='' text='Technicolor'

Added: gnucash/branches/dogtail/src/test-dogtail/act/test_style_sheets_act
===================================================================
--- gnucash/branches/dogtail/src/test-dogtail/act/test_style_sheets_act	2007-07-15 20:24:42 UTC (rev 16315)
+++ gnucash/branches/dogtail/src/test-dogtail/act/test_style_sheets_act	2007-07-15 22:40:12 UTC (rev 16316)
@@ -0,0 +1,6 @@
+{child with roleName='table'}
+ Node roleName='table column header' name='Style Sheet Name' description='' text='Style Sheet Name'
+ Node roleName='table cell' name='Default' description='' text='Default'
+ Node roleName='table cell' name='Easy' description='' text='Easy'
+ Node roleName='table cell' name='Technicolor' description='' text='Technicolor'
+ Node roleName='table cell' name='test' description='' text='test'

Added: gnucash/branches/dogtail/src/test-dogtail/ref/mytest_ref
===================================================================
--- gnucash/branches/dogtail/src/test-dogtail/ref/mytest_ref	2007-07-15 20:24:42 UTC (rev 16315)
+++ gnucash/branches/dogtail/src/test-dogtail/ref/mytest_ref	2007-07-15 22:40:12 UTC (rev 16316)
@@ -0,0 +1,80 @@
+{child with roleName='table'}
+ Node roleName='table column header' name='Account Name' description='' text='Account Name'
+ Node roleName='table column header' name='Type' description='' text='Type'
+ Node roleName='table column header' name='Commodity' description='' text='Commodity'
+ Node roleName='table column header' name='Account Code' description='' text='Account Code'
+ Node roleName='table column header' name='Description' description='' text='Description'
+ Node roleName='table column header' name='Last Num' description='' text='Last Num'
+ Node roleName='table column header' name='Present' description='' text='Present'
+ Node roleName='table column header' name='Present (USD)' description='' text='Present (USD)'
+ Node roleName='table column header' name='Balance' description='' text='Balance'
+ Node roleName='table column header' name='Balance (USD)' description='' text='Balance (USD)'
+ Node roleName='table column header' name='Balance (Period)' description='' text='Balance (Period)'
+ Node roleName='table column header' name='Cleared' description='' text='Cleared'
+ Node roleName='table column header' name='Cleared (USD)' description='' text='Cleared (USD)'
+ Node roleName='table column header' name='Reconciled' description='' text='Reconciled'
+ Node roleName='table column header' name='Reconciled (USD)' description='' text='Reconciled (USD)'
+ Node roleName='table column header' name='Future Minimum' description='' text='Future Minimum'
+ Node roleName='table column header' name='Future Minimum (USD)' description='' text='Future Minimum (USD)'
+ Node roleName='table column header' name='Total' description='' text='Total'
+ Node roleName='table column header' name='Total (USD)' description='' text='Total (USD)'
+ Node roleName='table column header' name='Total (Period)' description='' text='Total (Period)'
+ Node roleName='table column header' name='Notes' description='' text='Notes'
+ Node roleName='table column header' name='Tax Info' description='' text='Tax Info'
+ Node roleName='table column header' name='P' description='Placeholder' text='P'
+ Node roleName='table column header' name='' description='' text=''
+ Node roleName='table column header' name='' description='' text=''
+ Node roleName='table cell' name='' description=''
+  Node roleName='table cell' name='' description=''
+  Node roleName='table cell' name='Ahmed' description='' text='Ahmed'
+ Node roleName='table cell' name='Cash' description='' text='Cash'
+ Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+ Node roleName='table cell' name='Sayed' description='' text='Sayed'
+ Node roleName='table cell' name='Hassan' description='' text='Hassan'
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='$0' description='' text='$0'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0' description='' text='$0'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0' description='' text='$0'
+ Node roleName='table cell' name='$0' description='' text='$0'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0' description='' text='$0'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0' description='' text='$0'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0' description='' text='$0'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0' description='' text='$0'
+ Node roleName='table cell' name='notes' description='' text='notes'
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='' description=''
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='' description=''
+  Node roleName='table cell' name='' description=''
+  Node roleName='table cell' name='Ahmed' description='' text='Ahmed'
+ Node roleName='table cell' name='Cash' description='' text='Cash'
+ Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+ Node roleName='table cell' name='Sayed' description='' text='Sayed'
+ Node roleName='table cell' name='Hassan' description='' text='Hassan'
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='$0' description='' text='$0'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0' description='' text='$0'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0' description='' text='$0'
+ Node roleName='table cell' name='$0' description='' text='$0'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0' description='' text='$0'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0' description='' text='$0'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0' description='' text='$0'
+ Node roleName='table cell' name='$0.00' description='' text='$0.00'
+ Node roleName='table cell' name='$0' description='' text='$0'
+ Node roleName='table cell' name='notes' description='' text='notes'
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='' description=''
+ Node roleName='table cell' name='' description='' text=''
+ Node roleName='table cell' name='' description='' text=''

Added: gnucash/branches/dogtail/src/test-dogtail/ref/test_new_account_dialog_ref
===================================================================
--- gnucash/branches/dogtail/src/test-dogtail/ref/test_new_account_dialog_ref	2007-07-15 20:24:42 UTC (rev 16315)
+++ gnucash/branches/dogtail/src/test-dogtail/ref/test_new_account_dialog_ref	2007-07-15 22:40:12 UTC (rev 16316)
@@ -0,0 +1,439 @@
+{"Accounts" tab}
+ Node roleName='filler' name='' description=''
+  Node roleName='scroll pane' name='' description=''
+   Node roleName='table' name='' description=''
+    Node roleName='table column header' name='Account Name' description='' text='Account Name'
+    Node roleName='table column header' name='Type' description='' text='Type'
+    Node roleName='table column header' name='Commodity' description='' text='Commodity'
+    Node roleName='table column header' name='Account Code' description='' text='Account Code'
+    Node roleName='table column header' name='Description' description='' text='Description'
+    Node roleName='table column header' name='Last Num' description='' text='Last Num'
+    Node roleName='table column header' name='Present' description='' text='Present'
+    Node roleName='table column header' name='Present (USD)' description='' text='Present (USD)'
+    Node roleName='table column header' name='Balance' description='' text='Balance'
+    Node roleName='table column header' name='Balance (USD)' description='' text='Balance (USD)'
+    Node roleName='table column header' name='Balance (Period)' description='' text='Balance (Period)'
+    Node roleName='table column header' name='Cleared' description='' text='Cleared'
+    Node roleName='table column header' name='Cleared (USD)' description='' text='Cleared (USD)'
+    Node roleName='table column header' name='Reconciled' description='' text='Reconciled'
+    Node roleName='table column header' name='Reconciled (USD)' description='' text='Reconciled (USD)'
+    Node roleName='table column header' name='Future Minimum' description='' text='Future Minimum'
+    Node roleName='table column header' name='Future Minimum (USD)' description='' text='Future Minimum (USD)'
+    Node roleName='table column header' name='Total' description='' text='Total'
+    Node roleName='table column header' name='Total (USD)' description='' text='Total (USD)'
+    Node roleName='table column header' name='Total (Period)' description='' text='Total (Period)'
+    Node roleName='table column header' name='Notes' description='' text='Notes'
+    Node roleName='table column header' name='Tax Info' description='' text='Tax Info'
+    Node roleName='table column header' name='P' description='Placeholder' text='P'
+    Node roleName='table column header' name='' description='' text=''
+    Node roleName='table column header' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Asset' description='' text='Asset'
+    Node roleName='table cell' name='Asset' description='' text='Asset'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Equity' description='' text='Equity'
+    Node roleName='table cell' name='Equity' description='' text='Equity'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Expense' description='' text='Expense'
+    Node roleName='table cell' name='Expense' description='' text='Expense'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Income' description='' text='Income'
+    Node roleName='table cell' name='Income' description='' text='Income'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Liability' description='' text='Liability'
+    Node roleName='table cell' name='Liability' description='' text='Liability'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Checking' description='' text='Checking'
+    Node roleName='table cell' name='Bank' description='' text='Bank'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Savings' description='' text='Savings'
+    Node roleName='table cell' name='Bank' description='' text='Bank'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Opening Balance' description='' text='Opening Balance'
+    Node roleName='table cell' name='Equity' description='' text='Equity'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Electricity' description='' text='Electricity'
+    Node roleName='table cell' name='Expense' description='' text='Expense'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Groceries' description='' text='Groceries'
+    Node roleName='table cell' name='Expense' description='' text='Expense'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Phone' description='' text='Phone'
+    Node roleName='table cell' name='Expense' description='' text='Expense'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Rent' description='' text='Rent'
+    Node roleName='table cell' name='Expense' description='' text='Expense'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Taxes' description='' text='Taxes'
+    Node roleName='table cell' name='Expense' description='' text='Expense'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Salary' description='' text='Salary'
+    Node roleName='table cell' name='Income' description='' text='Income'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='' description=''
+     Node roleName='table cell' name='Visa' description='' text='Visa'
+    Node roleName='table cell' name='Credit Card' description='' text='Credit Card'
+    Node roleName='table cell' name='US Dollar' description='' text='US Dollar'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='$0.00' description='' text='$0.00'
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description=''
+    Node roleName='table cell' name='' description='' text=''
+    Node roleName='table cell' name='' description='' text=''
+  Node roleName='filler' name='' description=''
+   Node roleName='combo box' name='$, Grand Total:' description=''
+    Node roleName='menu' name='' description=''
+     Node roleName='menu item' name='$, Grand Total:' description='' text=''
+     Node roleName='menu item' name='$:' description='' text=''

Added: gnucash/branches/dogtail/src/test-dogtail/ref/test_style_sheets_2_ref
===================================================================
--- gnucash/branches/dogtail/src/test-dogtail/ref/test_style_sheets_2_ref	2007-07-15 20:24:42 UTC (rev 16315)
+++ gnucash/branches/dogtail/src/test-dogtail/ref/test_style_sheets_2_ref	2007-07-15 22:40:12 UTC (rev 16316)
@@ -0,0 +1,5 @@
+{child with roleName='table'}
+ Node roleName='table column header' name='Style Sheet Name' description='' text='Style Sheet Name'
+ Node roleName='table cell' name='Default' description='' text='Default'
+ Node roleName='table cell' name='Easy' description='' text='Easy'
+ Node roleName='table cell' name='Technicolor' description='' text='Technicolor'

Added: gnucash/branches/dogtail/src/test-dogtail/ref/test_style_sheets_ref
===================================================================
--- gnucash/branches/dogtail/src/test-dogtail/ref/test_style_sheets_ref	2007-07-15 20:24:42 UTC (rev 16315)
+++ gnucash/branches/dogtail/src/test-dogtail/ref/test_style_sheets_ref	2007-07-15 22:40:12 UTC (rev 16316)
@@ -0,0 +1,6 @@
+{child with roleName='table'}
+ Node roleName='table column header' name='Style Sheet Name' description='' text='Style Sheet Name'
+ Node roleName='table cell' name='Default' description='' text='Default'
+ Node roleName='table cell' name='Easy' description='' text='Easy'
+ Node roleName='table cell' name='Technicolor' description='' text='Technicolor'
+ Node roleName='table cell' name='test' description='' text='test'

Added: gnucash/branches/dogtail/src/test-dogtail/runtest.py
===================================================================
--- gnucash/branches/dogtail/src/test-dogtail/runtest.py	2007-07-15 20:24:42 UTC (rev 16315)
+++ gnucash/branches/dogtail/src/test-dogtail/runtest.py	2007-07-15 22:40:12 UTC (rev 16316)
@@ -0,0 +1,333 @@
+import unittest
+from dogtail.utils import run
+#from dogtail import tree, predicate
+from os import system
+from GnuCash import *
+import GnuCash
+import types
+from validator import *
+
+def appstate (func):
+    """ Default application state when start run the application when done close it """
+    def wrapper(* args, **kwargs):
+        print "Run GnuCash"
+        run('gnucash')
+        sleep (10)
+        gnuCash = GnuCashApp()
+        gnuCash.dismiss_all_dialogs()
+
+        func(*args, **kwargs)
+        gnuCash.close_without_saving()
+    return wrapper
+
+
+class SimpleTest(unittest.TestCase):
+    """ Test the Basic Gnucash functionality """
+    def setUp(self):
+        cleanup_all()
+
+    def tearDown(self):
+        ungraceful_close()
+
+
+    def test_start_gnucash_first_time(self):
+        """ Clean all gnucash data in gconf and start it then close it without saving """
+        run('gnucash')
+        sleep (10)
+        gnuCash = GnuCashApp()
+        gnuCash.dismiss_all_dialogs()
+        gnuCash.close_without_saving()
+
+    def test_start_gnucash_tip_of_day(self):
+        """  Start gnucash Tip of days appear properly. """
+        #cleanup_all()
+        run('gnucash')
+        sleep (10)
+        gnuCash = GnuCashApp()
+        # TODO : move Tip of Day Dialog to wrapper
+        tip_of_day_dlg = gnuCash.findChild(predicate.GenericPredicate(roleName='dialog', name='GnuCash Tip Of The Day'))
+        if tip_of_day_dlg == None:
+            raise Exception()
+        gnuCash.dismiss_all_dialogs()
+
+    def test_disable_tip_of_day(self):
+        """ test Disable tip of day open gnucash """
+        run('gnucash')
+        sleep(10)
+        gnuCash = GnuCashApp()
+        # TODO : move Tip of Day Dialog to wrapper
+        tip_of_day_dlg = \
+        gnuCash.findChild\
+        (predicate.GenericPredicate(roleName='dialog', \
+        name='GnuCash Tip Of The Day'))
+        show_at_startup_cb = \
+        tip_of_day_dlg.findChild\
+        (predicate.GenericPredicate(roleName='check box', \
+        name='Show tips at startup'))
+        show_at_startup_cb.click()
+        gnuCash.dismiss_all_dialogs()
+        run('gnucash')
+        sleep(10)
+        gnuCash = GnuCashApp()
+        tip_of_day_dlg = \
+        gnuCash.findChild(predicate.GenericPredicate(roleName='dialog', \
+        name='GnuCash Tip Of The Day'), \
+        requireResult=False)
+        if tip_of_day_dlg != None:
+            raise Exception()
+
+
+class DialogTest(unittest.TestCase):
+    """ Test that dialog loaded as expected """
+    def setUp(self):
+        run('gnucash')
+        sleep (10)
+        gnuCash = GnuCashApp()
+        gnuCash.dismiss_all_dialogs()
+        gnuCash.add_new_account_page()
+
+    def tearDown(self):
+        gnuCash = GnuCashApp()
+        gnuCash.close_without_saving()
+
+    def create_test_suite(self):
+        """ This helper method could create python code for this test """
+        list_dialogs = [method for method in dir(GnuCash) if type(getattr(GnuCash, method)) == types.ClassType]
+        for i in list_dialogs:
+            if issubclass(getattr(GnuCash, i), GnucashWindow):
+                print "    def test_invoke_" + str(i)+"(self):"
+                var_name = i.lower()
+                print "       "+var_name+ " = "+i+"()"
+                print "       "+var_name+".invoke()"
+                print "       "+var_name+".dismiss()"
+                print
+
+
+    def test_invoke_FindCustomer(self):
+       findcustomer = FindCustomer()
+       findcustomer.invoke()
+       findcustomer.dismiss()
+
+    def test_invoke_FindInvoice(self):
+       findinvoice = FindInvoice()
+       findinvoice.invoke()
+       findinvoice.dismiss()
+
+    def test_invoke_FindJob(self):
+       findjob = FindJob()
+       findjob.invoke()
+       findjob.dismiss()
+
+    def test_invoke_FindTransaction(self):
+       findtransaction = FindTransaction()
+       findtransaction.invoke()
+       findtransaction.dismiss()
+
+    def test_invoke_FindVendor(self):
+       findvendor = FindVendor()
+       findvendor.invoke()
+       findvendor.dismiss()
+
+    def test_invoke_FindVendorJob(self):
+       findvendorjob = FindVendorJob()
+       findvendorjob.invoke()
+       findvendorjob.dismiss()
+
+    def test_invoke_NewAccount(self):
+       newaccount = NewAccount()
+       newaccount.invoke()
+       newaccount.dismiss()
+
+    def test_invoke_NewCustomer(self):
+       newcustomer = NewCustomer()
+       newcustomer.invoke()
+       newcustomer.dismiss()
+
+    def test_invoke_NewInvoice(self):
+       newinvoice = NewInvoice()
+       newinvoice.invoke()
+       newinvoice.dismiss()
+
+    def test_invoke_NewJob(self):
+       newjob = NewJob()
+       newjob.invoke()
+       newjob.dismiss()
+
+    def test_invoke_NewVendor(self):
+       newvendor = NewVendor()
+       newvendor.invoke()
+       newvendor.dismiss()
+
+    def test_invoke_NewVendorJob(self):
+       newvendorjob = NewVendorJob()
+       newvendorjob.invoke()
+       newvendorjob.dismiss()
+
+    def test_invoke_Prefernces(self):
+       preferences = Preferences()
+       preferences.invoke()
+       preferences.dismiss()
+
+    def test_invoke_ProcessPayment(self):
+       processpayment = ProcessPayment()
+       processpayment.invoke()
+       processpayment.dismiss()
+
+    def test_invoke_ResetWarnings(self):
+       resetwarnings = ResetWarnings()
+       resetwarnings.invoke()
+       resetwarnings.dismiss()
+
+    def test_invoke_SetupAccountingPeriods(self):
+        """ TODO: Setup Accounting Periods start wizard the roleName is frame not dialog """
+        setupaccountingperiods = SetupAccountingPeriods()
+        setupaccountingperiods.invoke()
+        setupaccountingperiods.dismiss()
+
+    def test_invoke_StyleSheets(self):
+       stylesheets = StyleSheets()
+       stylesheets.invoke()
+       stylesheets.dismiss()
+
+    def test_invoke_TaxOption(self):
+       taxoption = TaxOption()
+       taxoption.invoke()
+
+class TestDialogs(unittest.TestCase):
+    """ Test Each dialog functionality """
+    def setUp(self):
+        run('gnucash')
+        sleep(20)
+        gnuCash = GnuCashApp()
+        gnuCash.dismiss_all_dialogs()
+
+    def tearDown(self):
+        gnuCash = GnuCashApp()
+        gnuCash.close_without_saving()
+
+    def test_add_remove_style_sheets(self):
+        """ Test Adding new Style Sheet """
+        gnucash = GnuCashApp()
+        style_sheet = StyleSheets()
+        style_sheet.invoke()
+        style_sheet.new_btn.click()
+        new_style_dlg = gnucash.findChild(predicate.GenericPredicate(roleName='dialog', name='New Style Sheet'))
+        new_style = NewStyleSheet(new_style_dlg)
+        new_style.style_name = "test"
+        new_style.template = "Fancy"
+        new_style.accept()
+        sleep(5)
+        html_style_dlg_list = gnucash.findChildren(predicate.GenericPredicate(roleName='dialog'))
+        html_style_dlg = None
+        for dialog in html_style_dlg_list:
+            result = re.match('HTML Style Sheet Properties: .', dialog.name)
+            if result != None:
+                print dialog.name
+                html_style_dlg = HTMLStyleSheet(dialog)
+        html_style_dlg.defaults_btn.click()
+        html_style_dlg.accept()
+        # validate the the whole table 
+        validate_node(style_sheet.style_sheets_table, 'test_style_sheets')
+        test_cell = style_sheet.style_sheets_table.findChild\
+        (predicate.GenericPredicate(roleName='table cell', name='test'))
+        test_cell.doAction('activate')
+        style_sheet.delete_btn.click()
+        # after removing the node confirm that the state resotred to the previous State before Adding
+        validate_node(style_sheet.style_sheets_table, 'test_style_sheets_2')
+        style_sheet.dismiss()
+
+class ScenarioTest(unittest.TestCase):
+    """ Test a compelete Scenario """
+
+    def transaction(self, account):
+        """ Helper method to open the account register tab """
+        config.childrenLimit = 500
+        gnucash = GnuCashApp()
+        accounts = gnucash.tab('Accounts')
+        account = accounts.findChild(predicate.GenericPredicate(roleName='table cell', name=account))
+        account.doAction('activate')
+
+
+    def setUp(self):
+        """ a setup  for the test case in this type of test just run gnucash and go dismiss first dialog """
+        cleanup_all()
+        run('gnucash')
+        sleep (20)
+        gnuCash = GnuCashApp()
+        gnuCash.dismiss_all_dialogs()
+
+    def tearDown(self):
+        """ just close gnucash without Saving """
+       # gnuCash = GnuCashApp()
+      #  gnuCash.close_without_saving()
+
+    def test_new_account_dialog(self):
+        """ Test creating new Account currently I could able only two test and account with only 2 levels 
+            No validation here 
+            TODO: add validation
+        """
+        config.childrenLimit=500 
+        gnucash = GnuCashApp()
+        gnucash.add_new_account_page()
+        account_list = [
+                ['Asset', 'Asset'],
+                ['Liability','Liability'],
+                ['Equity', 'Equity'],
+                ['Income', 'Income'],
+                ['Expense', 'Expense'],
+                ['Checking', 'Bank', 'Asset'],
+                ['Savings', 'Bank', 'Asset'],
+                ['Visa', 'Credit Card', 'Liability'],
+                ['Salary', 'Income', 'Income'],
+                ['Phone', 'Expense', 'Expense'],
+                ['Electricity', 'Expense', 'Expense'],
+                ['Rent', 'Expense', 'Expense'],
+                ['Groceries', 'Expense', 'Expense'],
+                ['Taxes', 'Expense', 'Expense'],
+                ['Opening Balance', 'Equity', 'Equity']
+            ]
+        for account in account_list:
+            gnucash.add_account(*account)
+        # Validation
+        account_tab = gnucash.tab('Accounts')
+        validate_node(account_tab, 'test_new_account_dialog')
+
+    def test_perform_transaction(self):
+        """ Call the previos test case and then perform some transaction 
+            TODO: validatior not yet but it will be on the affect of the transaction by checking the account page not the register page
+        """
+        self.test_new_account_dialog()
+        gnucash = GnuCashApp()
+        self.transaction("Checking")
+        reg = gnucash.tab("Checking").findChild(predicate.GenericPredicate(roleName='layered pane'))
+        register = Register(reg)
+        register.row = 0
+        register.date = "07/15/2007"
+        register.transfer = "Equity:Opening Balance"
+        register.deposite = "1000"
+        register.end_trans()
+
+        self.transaction("Savings")
+        reg = gnucash.tab("Savings").findChild(predicate.GenericPredicate(roleName='layered pane'))
+        register = Register(reg)
+        register.row = 0
+        register.date = "07/15/2007"
+        register.transfer = "Equity:Opening Balance"
+        register.deposite = "1000"
+        register.end_trans()
+
+        self.transaction("Visa")
+        reg = gnucash.tab("Visa").findChild(predicate.GenericPredicate(roleName='layered pane'))
+        register = Register(reg)
+        register.row = 0
+        register.date = "07/15/2007"
+        register.transfer = "Equity:Opening Balance"
+        register.withdrawal = "500"
+        register.end_trans()
+        # Validation
+        account_tab = gnucash.tab('Accounts')
+        validate_node(account_tab, 'test_perform_transaction')
+
+
+if __name__ == "__main__":
+    unittest.main()

Added: gnucash/branches/dogtail/src/test-dogtail/validator.py
===================================================================
--- gnucash/branches/dogtail/src/test-dogtail/validator.py	2007-07-15 20:24:42 UTC (rev 16315)
+++ gnucash/branches/dogtail/src/test-dogtail/validator.py	2007-07-15 22:40:12 UTC (rev 16316)
@@ -0,0 +1,42 @@
+""" untility functions Work as a generic validator """
+
+__author__ = "Ahmed Sayed <ahmadsayed83 at yahoo.com>"
+import os
+spacer = ' '
+EXIT_SUCCESS  = 0
+EXIT_FAILURE  = 1
+EXIT_TROUBLE  = 2
+
+def validate_node (node, testname, ref_filename=None, act_filename=None):
+    """
+        brows the children and out the result to file hold the same method name concatenated with _act to be diffed with the testcase name concatenated with _ref
+        if i have a testcase called test1
+        the generated file is act/test1_act the expected file to compare with is ref/test1_ref
+    """
+    if act_filename == None:
+        act_filename = 'act/%s_act' % (testname)
+    if ref_filename == None:
+        ref_filename = 'ref/%s_ref' % (testname)
+    act_file = open(act_filename, 'w')
+    generate_act_file (node, act_file)
+    act_file.close()
+    # get divided 265 to get the exact system status
+    error_code = os.system("diff %s %s" % (act_filename, ref_filename))/256
+    if error_code == EXIT_SUCCESS:
+        return 
+    elif error_code == EXIT_FAILURE:
+        raise Exception('Exit Failure: Refernece file not match the act file')
+    elif error_code == EXIT_TROUBLE:
+        raise Exception('Exit Trouble: Reference file not found')
+    else:
+        raise Exception('Unknown Error')
+
+def generate_act_file (node, file, depth = 0):
+    """ helper method that Generate the act file, The file Generated in the testcase """
+    file.write(spacer*(depth) + str (node) + '\n' )
+    try:
+        for child in node.children:
+            generate_act_file  (child, file, depth + 1)
+    except AttributeError:
+            pass
+



More information about the gnucash-changes mailing list