<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>README.api_diff</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -46,8 +46,8 @@ class Speclenium(SpecleniumBase):
         self._event_list = []
         self._registered_global_listener = False
 
-    def xmlrpc_start(self, browser_start_cmd):
-        SpecleniumBase.xmlrpc_start(self, browser_start_cmd)
+    def xmlrpc_start(self, browser_start_cmd, record_events):
+        SpecleniumBase.xmlrpc_start(self, browser_start_cmd, record_events)
         self._top_frame = None
         pyatspi.Registry.registerEventListener(
             self._get_win, 'document:load-complete')</diff>
      <filename>speclenium/speclenium_atspi.py</filename>
    </modified>
    <modified>
      <diff>@@ -49,13 +49,18 @@ class SpecleniumBase(xmlrpc.XMLRPC):
         xmlrpc.XMLRPC.__init__(self)
         self._event_list = []
         self._registered_global_listener = False
+        self._store_events = False
 
-    def xmlrpc_start(self, browser_start_cmd):
+    def xmlrpc_start(self, browser_start_cmd, store_events):
         # Capture target frame here.
+        self._store_events = store_events
+        self._stored_event_list = []
         self.xmlrpc_start_event_cache()
         self._browser_start_cmd = browser_start_cmd
 
     def xmlrpc_flush_event_cache(self):
+        if self._store_events:
+            self._stored_event_list += self._event_list
         self._event_list = []
         return True
 
@@ -65,6 +70,10 @@ class SpecleniumBase(xmlrpc.XMLRPC):
     def xmlrpc_stop_event_cache(self):
         raise NotImplementedError
 
+    def xmlrpc_get_stored_events(self):
+        events = self._stored_event_list + self._event_list
+        return map(str, events)
+
     def _event_cache_cb(self, event):
         if self._is_in_frame(event):
             e = specular_event_from_event(event)</diff>
      <filename>speclenium/speclenium_base.py</filename>
    </modified>
    <modified>
      <diff>@@ -43,8 +43,8 @@ class Speclenium(SpecleniumBase):
     def __init__(self):
         SpecleniumBase.__init__(self)
 
-    def xmlrpc_start(self, browser_start_cmd):
-        SpecleniumBase.xmlrpc_start(self, browser_start_cmd)
+    def xmlrpc_start(self, browser_start_cmd, record_events):
+        SpecleniumBase.xmlrpc_start(self, browser_start_cmd, record_events)
         self._top_frame = None
         self._target_pid = -1
         self._window_id = -1</diff>
      <filename>speclenium/speclenium_win32.py</filename>
    </modified>
    <modified>
      <diff>@@ -5,10 +5,10 @@ from xml.dom.minidom import parseString
 
 class SpecleniumClient(selenium):
     SPECLENIUM_PORT = 4117
-    def start(self):
+    def start(self, record_events=False):
         self._speclenium_server =  \
             ServerProxy('http://%s:%d' % (self.host, self.SPECLENIUM_PORT))
-        self._speclenium_server.start(self.browserStartCommand)
+        self._speclenium_server.start(self.browserStartCommand, record_events)
         selenium.start(self)
 
     def do_command(self, verb, args):
@@ -30,6 +30,9 @@ class SpecleniumClient(selenium):
     def get_accessible_match(self, match_criteria):
         return self._speclenium_server.get_accessible_match(match_criteria)
 
+    def get_stored_events(self):
+        return self._speclenium_server.get_stored_events()
+
     def get_accessible_event_match(self, match_criteria, index):
         return self._speclenium_server.get_accessible_event_match(
             match_criteria, index)</diff>
      <filename>speclenium_client.py</filename>
    </modified>
    <modified>
      <diff>@@ -50,6 +50,10 @@ class SpecularAccessible(SpecularSerial):
                 return n
         return None
 
+    def __str__(self):
+        e = self.documentElement
+        return '[%s | %s]' % (e.getAttribute('name'), e.getAttribute('role'))
+
 def specular_accessible_from_string(acc_str):
     dom = parseString(acc_str.encode('utf-8'))
     strip_whitespace(dom.documentElement)</diff>
      <filename>specular/specular_accessible.py</filename>
    </modified>
    <modified>
      <diff>@@ -85,6 +85,9 @@ class SpecularEvent(SpecularSerial):
     def native_type(self):
         return events_map[self.type]
 
+    def __str__(self):
+        return '%s %s' % (self.type, self.source)
+
     def match(self, other):
         if other.type == self.type:
             if self.source.compareNode(other.source):</diff>
      <filename>specular/specular_event.py</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>eafc6beb8579fc0b495ac9a3e24175e02fd25cc6</id>
    </parent>
  </parents>
  <author>
    <name>Eitan Isaacson</name>
    <email>eitan@sparky.(none)</email>
  </author>
  <url>http://github.com/eeejay/specular/commit/647a1571f4eed773248ed1f39cf57ddc2d2d0a1d</url>
  <id>647a1571f4eed773248ed1f39cf57ddc2d2d0a1d</id>
  <committed-date>2008-12-14T00:07:46-08:00</committed-date>
  <authored-date>2008-12-14T00:07:46-08:00</authored-date>
  <message>README.api_diff: Documentation for API comparisons.
speclenium/speclenium_atspi.py:
speclenium/speclenium_base.py:
speclenium/speclenium_win32.py:
speclenium_client.py:
specular/specular_accessible.py:
specular/specular_event.py: Added event logging.</message>
  <tree>0d1fdef5c3c2064dc262e59a8437d7ef04c26f23</tree>
  <committer>
    <name>Eitan Isaacson</name>
    <email>eitan@sparky.(none)</email>
  </committer>
</commit>
