3 new revisions:
Revision: bade668d10c8
Author: Pekka Klärck
Date: Thu Dec 1 12:42:16 2011
Log: Default RootElement for ElementStack
http://code.google.com/p/robotframework/source/detail?r=bade668d10c8
Revision: 8225b836e3fc
Author: Pekka Klärck
Date: Thu Dec 1 12:45:56 2011
Log: builders -> xmlelementhandlers
http://code.google.com/p/robotframework/source/detail?r=8225b836e3fc
Revision: 1eb43024eaf1
Author: Pekka Klärck
Date: Thu Dec 1 12:48:02 2011
Log: oops, forgot to move __future__ import
http://code.google.com/p/robotframework/source/detail?r=1eb43024eaf1
==============================================================================
Revision: bade668d10c8
Author: Pekka Klärck
Date: Thu Dec 1 12:42:16 2011
Log: Default RootElement for ElementStack
http://code.google.com/p/robotframework/source/detail?r=bade668d10c8
Modified:
/src/robot/result/builders.py
/src/robot/result/executionresult.py
=======================================
--- /src/robot/result/builders.py Thu Dec 1 12:38:59 2011
+++ /src/robot/result/builders.py Thu Dec 1 12:42:16 2011
@@ -19,9 +19,9 @@
class ElementStack(object):
- def __init__(self, result, root_element):
+ def __init__(self, result, root_element=None):
self._results = [result]
- self._elements = [root_element]
+ self._elements = [root_element or RootElement()]
@property
def _result(self):
=======================================
--- /src/robot/result/executionresult.py Thu Dec 1 12:40:32 2011
+++ /src/robot/result/executionresult.py Thu Dec 1 12:42:16 2011
@@ -16,7 +16,7 @@
from robot.model.statistics import Statistics
from robot.utils import ET, XmlSource
-from .builders import ElementStack, RootElement
+from .builders import ElementStack
from .executionerrors import ExecutionErrors
from .configurer import SuiteConfigurer
from .suiteteardownfailed import SuiteTeardownFailureHandler
@@ -43,7 +43,7 @@
if isinstance(source, XmlSource) else XmlSource(source)
def build(self, result):
- elements = ElementStack(result, RootElement())
+ elements = ElementStack(result)
with self._source as source:
for action, elem in ET.iterparse(source,
events=('start', 'end')):
getattr(elements, action)(elem)
==============================================================================
Revision: 8225b836e3fc
Author: Pekka Klärck
Date: Thu Dec 1 12:45:56 2011
Log: builders -> xmlelementhandlers
http://code.google.com/p/robotframework/source/detail?r=8225b836e3fc
Added:
/src/robot/result/xmlelementhandlers.py
Deleted:
/src/robot/result/builders.py
Modified:
/src/robot/result/executionresult.py
=======================================
--- /dev/null
+++ /src/robot/result/xmlelementhandlers.py Thu Dec 1 12:45:56 2011
@@ -0,0 +1,236 @@
+# Copyright 2008-2011 Nokia Siemens Networks Oyj
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from __future__ import with_statement
+
+from robot.errors import DataError
+
+
+class ElementStack(object):
+
+ def __init__(self, result, root_element=None):
+ self._results = [result]
+ self._elements = [root_element or RootElement()]
+
+ @property
+ def _result(self):
+ return self._results[-1]
+
+ @property
+ def _element(self):
+ return self._elements[-1]
+
+ def start(self, elem):
+ self._elements.append(self._element.child_element(elem.tag))
+ self._results.append(self._element.start(elem, self._result))
+
+ def end(self, elem):
+ self._elements.pop().end(elem, self._results.pop())
+ elem.clear()
+
+
+class _Element(object):
+ tag = ''
+
+ def start(self, elem, result):
+ return result
+
+ def end(self, elem, result):
+ pass
+
+ def child_element(self, tag):
+ # TODO: replace _children() list with dict
+ for child_type in self._children():
+ if child_type.tag == tag:
+ return child_type()
+ raise DataError("Incompatible XML element '%s'" % tag)
+
+ def _children(self):
+ return []
+
+
+class RootElement(_Element):
+
+ def _children(self):
+ return [RobotElement]
+
+
+class RobotElement(_Element):
+ tag = 'robot'
+
+ def start(self, elem, result):
+ result.generator =
elem.get('generator', 'unknown').split()[0].upper()
+ return result
+
+ def _children(self):
+ return [RootSuiteElement, StatisticsElement, ErrorsElement]
+
+
+class SuiteElement(_Element):
+ tag = 'suite'
+
+ def start(self, elem, result):
+ return result.suites.create(name=elem.get('name'),
+ source=elem.get('source'))
+
+ def _children(self):
+ return [SuiteElement, DocElement, SuiteStatusElement,
+ KeywordElement, TestCaseElement, MetadataElement]
+
+
+class RootSuiteElement(SuiteElement):
+
+ def start(self, elem, result):
+ result.suite.name = elem.get('name')
+ result.suite.source = elem.get('source')
+ return result.suite
+
+
+class TestCaseElement(_Element):
+ tag = 'test'
+
+ def start(self, elem, result):
+ return result.tests.create(name=elem.get('name'),
+ timeout=elem.get('timeout'))
+
+ def _children(self):
+ return [KeywordElement, TagsElement, DocElement, TestStatusElement]
+
+
+class KeywordElement(_Element):
+ tag = 'kw'
+
+ def start(self, elem, result):
+ return result.keywords.create(name=elem.get('name'),
+ timeout=elem.get('timeout'),
+ type=elem.get('type'))
+
+ def _children(self):
+ return [DocElement, ArgumentsElement, KeywordElement,
MessageElement,
+ KeywordStatusElement]
+
+
+class MessageElement(_Element):
+ tag = 'msg'
+
+ def end(self, elem, result):
+ html = elem.get('html', 'no') == 'yes'
+ linkable = elem.get('linkable', 'no') == 'yes'
+ result.messages.create(elem.text or '', elem.get('level'),
+ html, elem.get('timestamp'), linkable)
+
+
+class _StatusElement(_Element):
+ tag = 'status'
+
+ def _set_status(self, elem, result):
+ result.status = elem.get('status', 'FAIL')
+
+ def _set_message(self, elem, result):
+ result.message = elem.text or ''
+
+ def _set_times(self, elem, result):
+ result.starttime = elem.get('starttime', 'N/A')
+ result.endtime = elem.get('endtime', 'N/A')
+
+
+class KeywordStatusElement(_StatusElement):
+
+ def end(self, elem, result):
+ self._set_status(elem, result)
+ self._set_times(elem, result)
+
+
+class SuiteStatusElement(_StatusElement):
+
+ def end(self, elem, result):
+ self._set_message(elem, result)
+ self._set_times(elem, result)
+
+
+class TestStatusElement(_StatusElement):
+
+ def end(self, elem, result):
+ self._set_status(elem, result)
+ self._set_message(elem, result)
+ self._set_times(elem, result)
+
+
+class DocElement(_Element):
+ tag = 'doc'
+
+ def end(self, elem, result):
+ result.doc = elem.text or ''
+
+
+class MetadataElement(_Element):
+ tag = 'metadata'
+
+ def _children(self):
+ return [MetadataItemElement]
+
+
+class MetadataItemElement(_Element):
+ tag = 'item'
+
+ def _children(self):
+ return [MetadataItemElement]
+
+ def end(self, elem, result):
+ result.metadata[elem.get('name')] = elem.text or ''
+
+
+class TagsElement(_Element):
+ tag = 'tags'
+
+ def _children(self):
+ return [TagElement]
+
+
+class TagElement(_Element):
+ tag = 'tag'
+
+ def end(self, elem, result):
+ result.tags.add(elem.text or '')
+
+
+class ArgumentsElement(_Element):
+ tag = 'arguments'
+
+ def _children(self):
+ return [ArgumentElement]
+
+
+class ArgumentElement(_Element):
+ tag = 'arg'
+
+ def end(self, elem, result):
+ result.args.append(elem.text or '')
+
+
+class ErrorsElement(_Element):
+ tag = 'errors'
+
+ def start(self, elem, result):
+ return result.errors
+
+ def _children(self):
+ return [MessageElement]
+
+
+class StatisticsElement(_Element):
+ tag = 'statistics'
+
+ def child_element(self, tag):
+ return self
=======================================
--- /src/robot/result/builders.py Thu Dec 1 12:42:16 2011
+++ /dev/null
@@ -1,236 +0,0 @@
-# Copyright 2008-2011 Nokia Siemens Networks Oyj
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-from __future__ import with_statement
-
-from robot.errors import DataError
-
-
-class ElementStack(object):
-
- def __init__(self, result, root_element=None):
- self._results = [result]
- self._elements = [root_element or RootElement()]
-
- @property
- def _result(self):
- return self._results[-1]
-
- @property
- def _element(self):
- return self._elements[-1]
-
- def start(self, elem):
- self._elements.append(self._element.child_element(elem.tag))
- self._results.append(self._element.start(elem, self._result))
-
- def end(self, elem):
- self._elements.pop().end(elem, self._results.pop())
- elem.clear()
-
-
-class _Element(object):
- tag = ''
-
- def start(self, elem, result):
- return result
-
- def end(self, elem, result):
- pass
-
- def child_element(self, tag):
- # TODO: replace _children() list with dict
- for child_type in self._children():
- if child_type.tag == tag:
- return child_type()
- raise DataError("Incompatible XML element '%s'" % tag)
-
- def _children(self):
- return []
-
-
-class RootElement(_Element):
-
- def _children(self):
- return [RobotElement]
-
-
-class RobotElement(_Element):
- tag = 'robot'
-
- def start(self, elem, result):
- result.generator =
elem.get('generator', 'unknown').split()[0].upper()
- return result
-
- def _children(self):
- return [RootSuiteElement, StatisticsElement, ErrorsElement]
-
-
-class SuiteElement(_Element):
- tag = 'suite'
-
- def start(self, elem, result):
- return result.suites.create(name=elem.get('name'),
- source=elem.get('source'))
-
- def _children(self):
- return [SuiteElement, DocElement, SuiteStatusElement,
- KeywordElement, TestCaseElement, MetadataElement]
-
-
-class RootSuiteElement(SuiteElement):
-
- def start(self, elem, result):
- result.suite.name = elem.get('name')
- result.suite.source = elem.get('source')
- return result.suite
-
-
-class TestCaseElement(_Element):
- tag = 'test'
-
- def start(self, elem, result):
- return result.tests.create(name=elem.get('name'),
- timeout=elem.get('timeout'))
-
- def _children(self):
- return [KeywordElement, TagsElement, DocElement, TestStatusElement]
-
-
-class KeywordElement(_Element):
- tag = 'kw'
-
- def start(self, elem, result):
- return result.keywords.create(name=elem.get('name'),
- timeout=elem.get('timeout'),
- type=elem.get('type'))
-
- def _children(self):
- return [DocElement, ArgumentsElement, KeywordElement,
MessageElement,
- KeywordStatusElement]
-
-
-class MessageElement(_Element):
- tag = 'msg'
-
- def end(self, elem, result):
- html = elem.get('html', 'no') == 'yes'
- linkable = elem.get('linkable', 'no') == 'yes'
- result.messages.create(elem.text or '', elem.get('level'),
- html, elem.get('timestamp'), linkable)
-
-
-class _StatusElement(_Element):
- tag = 'status'
-
- def _set_status(self, elem, result):
- result.status = elem.get('status', 'FAIL')
-
- def _set_message(self, elem, result):
- result.message = elem.text or ''
-
- def _set_times(self, elem, result):
- result.starttime = elem.get('starttime', 'N/A')
- result.endtime = elem.get('endtime', 'N/A')
-
-
-class KeywordStatusElement(_StatusElement):
-
- def end(self, elem, result):
- self._set_status(elem, result)
- self._set_times(elem, result)
-
-
-class SuiteStatusElement(_StatusElement):
-
- def end(self, elem, result):
- self._set_message(elem, result)
- self._set_times(elem, result)
-
-
-class TestStatusElement(_StatusElement):
-
- def end(self, elem, result):
- self._set_status(elem, result)
- self._set_message(elem, result)
- self._set_times(elem, result)
-
-
-class DocElement(_Element):
- tag = 'doc'
-
- def end(self, elem, result):
- result.doc = elem.text or ''
-
-
-class MetadataElement(_Element):
- tag = 'metadata'
-
- def _children(self):
- return [MetadataItemElement]
-
-
-class MetadataItemElement(_Element):
- tag = 'item'
-
- def _children(self):
- return [MetadataItemElement]
-
- def end(self, elem, result):
- result.metadata[elem.get('name')] = elem.text or ''
-
-
-class TagsElement(_Element):
- tag = 'tags'
-
- def _children(self):
- return [TagElement]
-
-
-class TagElement(_Element):
- tag = 'tag'
-
- def end(self, elem, result):
- result.tags.add(elem.text or '')
-
-
-class ArgumentsElement(_Element):
- tag = 'arguments'
-
- def _children(self):
- return [ArgumentElement]
-
-
-class ArgumentElement(_Element):
- tag = 'arg'
-
- def end(self, elem, result):
- result.args.append(elem.text or '')
-
-
-class ErrorsElement(_Element):
- tag = 'errors'
-
- def start(self, elem, result):
- return result.errors
-
- def _children(self):
- return [MessageElement]
-
-
-class StatisticsElement(_Element):
- tag = 'statistics'
-
- def child_element(self, tag):
- return self
=======================================
--- /src/robot/result/executionresult.py Thu Dec 1 12:42:16 2011
+++ /src/robot/result/executionresult.py Thu Dec 1 12:45:56 2011
@@ -16,11 +16,11 @@
from robot.model.statistics import Statistics
from robot.utils import ET, XmlSource
-from .builders import ElementStack
from .executionerrors import ExecutionErrors
from .configurer import SuiteConfigurer
from .suiteteardownfailed import SuiteTeardownFailureHandler
from .testsuite import TestSuite
+from .xmlelementhandlers import ElementStack
def ResultFromXml(*sources):
==============================================================================
Revision: 1eb43024eaf1
Author: Pekka Klärck
Date: Thu Dec 1 12:48:02 2011
Log: oops, forgot to move __future__ import
http://code.google.com/p/robotframework/source/detail?r=1eb43024eaf1
Modified:
/src/robot/result/executionresult.py
/src/robot/result/xmlelementhandlers.py
=======================================
--- /src/robot/result/executionresult.py Thu Dec 1 12:45:56 2011
+++ /src/robot/result/executionresult.py Thu Dec 1 12:48:02 2011
@@ -12,6 +12,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+from __future__ import with_statement
+
from robot.errors import DataError
from robot.model.statistics import Statistics
from robot.utils import ET, XmlSource
=======================================
--- /src/robot/result/xmlelementhandlers.py Thu Dec 1 12:45:56 2011
+++ /src/robot/result/xmlelementhandlers.py Thu Dec 1 12:48:02 2011
@@ -12,8 +12,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-from __future__ import with_statement
-
from robot.errors import DataError