4 new revisions:

Revision: d36d2429f26b
Author:   Mikko Korpela <[email protected]>
Date:     Wed Jun  8 04:19:42 2011
Log:      webcontent: expand failed before navigating to hash source
http://code.google.com/p/robotframework/source/detail?r=d36d2429f26b

Revision: 1b521a35d0eb
Author:   Mikko Korpela <[email protected]>
Date:     Wed Jun  8 04:21:18 2011
Log:      merge
http://code.google.com/p/robotframework/source/detail?r=1b521a35d0eb

Revision: beba41bb43f5
Author:   Mikko Korpela <[email protected]>
Date:     Wed Jun  8 04:44:13 2011
Log:      remove keywords before generating report
http://code.google.com/p/robotframework/source/detail?r=beba41bb43f5

Revision: 8d3c6664b245
Author:   Mikko Korpela <[email protected]>
Date:     Wed Jun  8 05:26:16 2011
Log:      remove unneeded keyword information from report
http://code.google.com/p/robotframework/source/detail?r=8d3c6664b245

==============================================================================
Revision: d36d2429f26b
Author:   Mikko Korpela <[email protected]>
Date:     Wed Jun  8 04:19:42 2011
Log:      webcontent: expand failed before navigating to hash source
http://code.google.com/p/robotframework/source/detail?r=d36d2429f26b

Modified:
 /src/robot/webcontent/log.html

=======================================
--- /src/robot/webcontent/log.html      Wed Jun  8 03:28:50 2011
+++ /src/robot/webcontent/log.html      Wed Jun  8 04:19:42 2011
@@ -320,11 +320,11 @@
     addStatistics();
     addErrors();
     addTestExecutionLog(main);
+    expandFailed(main);
     if (window.location.hash) {
         makeElementVisible(window.location.hash.substring(1));
         window.location.hash = window.location.hash.substring(1);
     };
-    expandFailed(main);
 });

 function addHeader() {

==============================================================================
Revision: 1b521a35d0eb
Author:   Mikko Korpela <[email protected]>
Date:     Wed Jun  8 04:21:18 2011
Log:      merge
http://code.google.com/p/robotframework/source/detail?r=1b521a35d0eb

Modified:
 /src/robot/webcontent/log.html

=======================================
--- /src/robot/webcontent/log.html      Wed Jun  8 04:19:42 2011
+++ /src/robot/webcontent/log.html      Wed Jun  8 04:21:18 2011
@@ -338,14 +338,10 @@
 }

 function addErrors() {
-    if(window.testdata.error(0)){
-        var errors = $.tmpl(window.templates.errors, {});
-        errors.appendTo($('body'));
-        for (var i = 0; window.testdata.error(i) !== undefined; i++) {
-            var message = window.testdata.error(i);
- var err = $.tmpl((message.link === undefined) ? window.templates.errorElement : window.templates.linkableErrorElement, message);
-            err.appendTo($('#errors_list'));
-        }
+    var errors = window.testdata.errors();
+    if (errors.length) {
+        $.tmpl(window.templates.errorHeader).appendTo($('body'));
+        $.tmpl(window.templates.error, errors).appendTo($('#error_table'));
     }
 }

@@ -388,20 +384,12 @@
         tagStatRow: $('#tag_statistics_row').template(),
         suiteStatRow: $('#suite_statistics_row').template(),
         noTagsRow: $('#no_tags_row').template(),
+        errorHeader: $('#error_header_template').template(),
+        error: $('#error_template').template(),
         suite: $('#suite_template').template(),
-        metadata: $('#metadata_template').template(),
         test: $('#test_template').template(),
         keyword: $('#keyword_template').template(),
         message: $('#message_template').template(),
-        metadataElement: $('#metadata_element_template').template(),
- documentationElement: $('#documentation_element_template').template(), - failureAndStatsMessageElement: $('#failure_and_stats_message_template').template(),
-        statsMessageElement: $('#stats_message_template').template(),
-        sourceElement: $('#source_element_template').template(),
-        statusElement: $('#status_element_template').template(),
-        errors: $('#errors_template').template(),
- linkableErrorElement: $('#linkable_error_element_template').template(),
-        errorElement: $('#error_element_template').template()
     };
 };
 </script>
@@ -482,24 +470,20 @@
   </tr>
 </script>

-<script type="text/html" id="errors_template">
+<script type="text/html" id="error_header_template">
   <h2>Test Execution Errors</h2>
-  <table class="errors" id="errors_list"></table>
+  <table class="errors" id="error_table"></table>
 </script>

-<script type="text/html" id="error_element_template">
-  <tr>
-    <td class="time">${date()}</td>
-    <td class="${level} level">${levelText}</td>
-    <td class="msg">{{html text}}</td>
-  </tr>
-</script>
-
-<script type="text/html" id="linkable_error_element_template">
+<script type="text/html" id="error_template">
   <tr>
     <td class="time">
+      {{if link}}
       <a onclick="makeElementVisible('${link}')"
          href="#${link}" title="Link to details.">${date}</a>
+      {{else}}
+      ${date}
+      {{/if}}
     </td>
     <td class="${level} level">${levelText}</td>
     <td class="msg">{{html text}}</td>

==============================================================================
Revision: beba41bb43f5
Author:   Mikko Korpela <[email protected]>
Date:     Wed Jun  8 04:44:13 2011
Log:      remove keywords before generating report
http://code.google.com/p/robotframework/source/detail?r=beba41bb43f5

Modified:
 /src/robot/serializing/jsparser.py
 /src/robot/serializing/testoutput.py
 /utest/serializing/test_js_serializer.py

=======================================
--- /src/robot/serializing/jsparser.py  Wed Jun  8 02:54:43 2011
+++ /src/robot/serializing/jsparser.py  Wed Jun  8 04:44:13 2011
@@ -558,6 +558,17 @@
         json_dump(self._texts, output)
         output.write(';\n')

+    def remove_keywords(self):
+        self._robot_data = self._remove_keywords_from(self._robot_data)
+
+    def _remove_keywords_from(self, data):
+        if not isinstance(data, list):
+            return data
+ return [self._remove_keywords_from(item) for item in data if not self._is_keyword(item)]
+
+    def _is_keyword(self, item):
+ return isinstance(item, list) and item and item[0] in ['kw', 'setup', 'teardown']
+
 def encode_basestring(string):
     def get_matching_char(c):
         val = ord(c)
=======================================
--- /src/robot/serializing/testoutput.py        Sun Jun  5 10:31:11 2011
+++ /src/robot/serializing/testoutput.py        Wed Jun  8 04:44:13 2011
@@ -76,8 +76,9 @@
         data_model = jsparser.create_datamodel_from(data_sources[0])
         report_path = self._parse_file(settings['Report'])
         log_path = self._parse_file(settings['Log'])
-        self._make_report(report_path, log_path, data_model, settings)
         self._make_log(log_path, data_model, settings)
+        data_model.remove_keywords()
+        self._make_report(report_path, log_path, data_model, settings)
         xunit_path = self._parse_file(settings['XUnitFile'])
         self._make_xunit(xunit_path, data_sources, settings)
         if self._temp_file:
=======================================
--- /utest/serializing/test_js_serializer.py    Wed Jun  8 02:54:43 2011
+++ /utest/serializing/test_js_serializer.py    Wed Jun  8 04:44:13 2011
@@ -10,6 +10,23 @@

 class TestJsSerializer(unittest.TestCase):

+    SUITE_XML = """<suite source="/tmp/verysimple.txt" name="Verysimple">
+                    <doc></doc>
+                    <metadata></metadata>
+                    <test name="Test" timeout="">
+                        <doc></doc>
+                        <kw type="kw" name="BuiltIn.Log" timeout="">
+ <doc>Logs the given message with the given level.</doc>
+                            <arguments><arg>simple</arg></arguments>
+ <msg timestamp="20110601 12:01:51.353" level="WARN">simple</msg> + <status status="PASS" endtime="20110601 12:01:51.353" starttime="20110601 12:01:51.353"></status>
+                        </kw>
+                        <tags></tags>
+ <status status="PASS" endtime="20110601 12:01:51.354" critical="yes" starttime="20110601 12:01:51.353"></status>
+                    </test>
+ <status status="PASS" endtime="20110601 12:01:51.354" starttime="20110601 12:01:51.329"></status>
+                    </suite>"""
+
     def setUp(self):
         self._context = Context()
         self._handler = _RobotOutputHandler(self._context)
@@ -96,23 +113,7 @@
assert_equals(data_model._texts, ['*', '*Test', '*Log', '*Logging', '*simple'])

     def test_suite_xml_parsing(self):
- suite_xml = """<suite source="/tmp/verysimple.txt" name="Verysimple">
-                    <doc></doc>
-                    <metadata></metadata>
-                    <test name="Test" timeout="">
-                        <doc></doc>
-                        <kw type="kw" name="BuiltIn.Log" timeout="">
- <doc>Logs the given message with the given level.</doc>
-                            <arguments><arg>simple</arg></arguments>
- <msg timestamp="20110601 12:01:51.353" level="WARN">simple</msg> - <status status="PASS" endtime="20110601 12:01:51.353" starttime="20110601 12:01:51.353"></status>
-                        </kw>
-                        <tags></tags>
- <status status="PASS" endtime="20110601 12:01:51.354" critical="yes" starttime="20110601 12:01:51.353"></status>
-                    </test>
- <status status="PASS" endtime="20110601 12:01:51.354" starttime="20110601 12:01:51.329"></status>
-                    </suite>"""
-        data_model = self._get_data_model(suite_xml)
+        data_model = self._get_data_model(self.SUITE_XML)
         assert_equals(data_model._basemillis, 1306918911353)
assert_equals(data_model._robot_data, ['suite', '/tmp/verysimple.txt', 'Verysimple',
                                                0, {},
@@ -122,6 +123,17 @@
assert_equals(data_model._texts, ['*', '*Test', '*BuiltIn.Log', '*Logs the given message with the given level.', '*simple']) assert_equals(self._context.link_to([0, 'W', 4]), 'keyword_Verysimple.Test.0')

+    def test_suite_data_model_keywords_clearing(self):
+        data_model = self._get_data_model(self.SUITE_XML)
+        data_model.remove_keywords()
+        assert_equals(data_model._basemillis, 1306918911353)
+ assert_equals(data_model._robot_data, ['suite', '/tmp/verysimple.txt', 'Verysimple',
+                                               0, {},
+ ['test', 1, 0, 'Y', 0, [], ['P', 0, 1]], + ['P', -24, 25], [1, 1, 1, 1]]) + assert_equals(data_model._texts, ['*', '*Test', '*BuiltIn.Log', '*Logs the given message with the given level.', '*simple'])
+
+
     def test_metadata_xml_parsing(self):
         meta_xml = """<metadata>
                         <item name="meta">&lt;b&gt;escaped&lt;/b&gt;</item>

==============================================================================
Revision: 8d3c6664b245
Author:   Mikko Korpela <[email protected]>
Date:     Wed Jun  8 05:26:16 2011
Log:      remove unneeded keyword information from report
http://code.google.com/p/robotframework/source/detail?r=8d3c6664b245

Modified:
 /src/robot/serializing/jsparser.py
 /utest/serializing/test_js_serializer.py

=======================================
--- /src/robot/serializing/jsparser.py  Wed Jun  8 04:44:13 2011
+++ /src/robot/serializing/jsparser.py  Wed Jun  8 05:26:16 2011
@@ -124,7 +124,12 @@
             child.fail_all()


+class _TextIndex(int):
+    pass
+
+
 class TextCache(object):
+    _zero_index = _TextIndex(0)

     def __init__(self):
         self.texts = {}
@@ -132,7 +137,7 @@

     def add(self, text):
         if not text:
-            return 0
+            return self._zero_index
         raw = self._raw(text)
         if raw in self.texts:
             return self.texts[raw]
@@ -140,7 +145,7 @@
         if text not in self.texts:
             self.texts[text] = self.index
             self.index +=1
-        return self.texts[text]
+        return _TextIndex(self.texts[text])

     def _encode(self, text):
         encoded = base64.b64encode(zlib.compress(text.encode('utf-8'), 9))
@@ -560,6 +565,7 @@

     def remove_keywords(self):
         self._robot_data = self._remove_keywords_from(self._robot_data)
+        self._prune_unused_texts()

     def _remove_keywords_from(self, data):
         if not isinstance(data, list):
@@ -569,6 +575,21 @@
     def _is_keyword(self, item):
return isinstance(item, list) and item and item[0] in ['kw', 'setup', 'teardown']

+    def _prune_unused_texts(self):
+        used = self._collect_used_text_indices(self._robot_data, set())
+ self._texts = [text if index in used else '' for index, text in enumerate(self._texts)]
+
+    def _collect_used_text_indices(self, data, result):
+        for item in data:
+            if isinstance(item, _TextIndex):
+                result.add(item)
+            elif isinstance(item, list):
+                self._collect_used_text_indices(item, result)
+            elif isinstance(item, dict):
+                self._collect_used_text_indices(item.values(), result)
+        return result
+
+
 def encode_basestring(string):
     def get_matching_char(c):
         val = ord(c)
=======================================
--- /utest/serializing/test_js_serializer.py    Wed Jun  8 04:44:13 2011
+++ /utest/serializing/test_js_serializer.py    Wed Jun  8 05:26:16 2011
@@ -12,7 +12,9 @@

     SUITE_XML = """<suite source="/tmp/verysimple.txt" name="Verysimple">
                     <doc></doc>
-                    <metadata></metadata>
+                    <metadata>
+                        <item name="key">val</item>
+                    </metadata>
                     <test name="Test" timeout="">
                         <doc></doc>
                         <kw type="kw" name="BuiltIn.Log" timeout="">
@@ -116,22 +118,22 @@
         data_model = self._get_data_model(self.SUITE_XML)
         assert_equals(data_model._basemillis, 1306918911353)
assert_equals(data_model._robot_data, ['suite', '/tmp/verysimple.txt', 'Verysimple',
-                                               0, {},
-                                                ['test', 1, 0, 'Y', 0,
- ['kw', 2, 0, 3, 4, [0, 'W', 4], ['P', 0, 0]], [], ['P', 0, 1]], - ['P', -24, 25], [1, 1, 1, 1]]) - assert_equals(data_model._texts, ['*', '*Test', '*BuiltIn.Log', '*Logs the given message with the given level.', '*simple']) - assert_equals(self._context.link_to([0, 'W', 4]), 'keyword_Verysimple.Test.0')
+                                               0, {'key': 1},
+                                                ['test', 2, 0, 'Y', 0,
+ ['kw', 3, 0, 4, 5, [0, 'W', 5], ['P', 0, 0]], [], + ['P', 0, 1]], ['P', -24, 25], [1, 1, 1, 1]]) + assert_equals(data_model._texts, ['*', '*val', '*Test', '*BuiltIn.Log', '*Logs the given message with the given level.', '*simple']) + assert_equals(self._context.link_to([0, 'W', 5]), 'keyword_Verysimple.Test.0')

     def test_suite_data_model_keywords_clearing(self):
         data_model = self._get_data_model(self.SUITE_XML)
         data_model.remove_keywords()
         assert_equals(data_model._basemillis, 1306918911353)
assert_equals(data_model._robot_data, ['suite', '/tmp/verysimple.txt', 'Verysimple',
-                                               0, {},
- ['test', 1, 0, 'Y', 0, [], ['P', 0, 1]], - ['P', -24, 25], [1, 1, 1, 1]]) - assert_equals(data_model._texts, ['*', '*Test', '*BuiltIn.Log', '*Logs the given message with the given level.', '*simple'])
+                                               0, {'key': 1},
+                                                ['test', 2, 0, 'Y', 0, [],
+ ['P', 0, 1]], ['P', -24, 25], [1, 1, 1, 1]]) + assert_equals(data_model._texts, ['*', '*val', '*Test', '', '', ''])


     def test_metadata_xml_parsing(self):

Reply via email to