5 new revisions:
Revision: 43d22f2e90f2
Author: Pekka Klärck
Date: Wed Nov 9 12:25:21 2011
Log: Model: 1) Tests for suite/test/kw string representation. 2)
Changed su...
http://code.google.com/p/robotframework/source/detail?r=43d22f2e90f2
Revision: 7ec9ce1f5993
Author: Pekka Klärck
Date: Wed Nov 9 12:37:57 2011
Log: WTF? A test module with mocks not used for anything? And a test
what c...
http://code.google.com/p/robotframework/source/detail?r=7ec9ce1f5993
Revision: 60085d46d592
Author: Pekka Klärck
Date: Wed Nov 9 12:42:40 2011
Log: Message: 1) Changed robot.model.Message to be base for
loggerhelper.Me...
http://code.google.com/p/robotframework/source/detail?r=60085d46d592
Revision: 9549fd0fa7f7
Author: Pekka Klärck
Date: Wed Nov 9 12:47:11 2011
Log: Model: Introduced ModelObject as a base class for model objects
to red...
http://code.google.com/p/robotframework/source/detail?r=9549fd0fa7f7
Revision: 706e6b0f8127
Author: Pekka Klärck
Date: Wed Nov 9 13:21:18 2011
Log: Model: 1) Committed modelobject.py that was forgotten earlier. 2)
Intr...
http://code.google.com/p/robotframework/source/detail?r=706e6b0f8127
==============================================================================
Revision: 43d22f2e90f2
Author: Pekka Klärck
Date: Wed Nov 9 12:25:21 2011
Log: Model: 1) Tests for suite/test/kw string representation. 2)
Changed suite/test/kw.__str__ to return only ASCII.
http://code.google.com/p/robotframework/source/detail?r=43d22f2e90f2
Modified:
/src/robot/model/keyword.py
/src/robot/model/testcase.py
/src/robot/model/testsuite.py
/utest/model/test_keyword.py
/utest/model/test_testcase.py
/utest/model/test_testsuite.py
=======================================
--- /src/robot/model/keyword.py Wed Nov 9 08:49:18 2011
+++ /src/robot/model/keyword.py Wed Nov 9 12:25:21 2011
@@ -59,7 +59,7 @@
return self.name
def __str__(self):
- return unicode(self).encode('UTF-8')
+ return unicode(self).encode('ASCII', 'replace')
def __repr__(self):
return repr(str(self))
=======================================
--- /src/robot/model/testcase.py Wed Nov 9 08:49:18 2011
+++ /src/robot/model/testcase.py Wed Nov 9 12:25:21 2011
@@ -62,7 +62,7 @@
return self.name
def __str__(self):
- return unicode(self).encode('UTF-8')
+ return unicode(self).encode('ASCII', 'replace')
def __repr__(self):
return repr(str(self))
=======================================
--- /src/robot/model/testsuite.py Wed Nov 9 09:48:30 2011
+++ /src/robot/model/testsuite.py Wed Nov 9 12:25:21 2011
@@ -108,7 +108,7 @@
return self.name
def __str__(self):
- return unicode(self).encode('UTF-8')
+ return unicode(self).encode('ASCII', 'replace')
def __repr__(self):
return repr(str(self))
=======================================
--- /utest/model/test_keyword.py Wed Nov 9 08:52:02 2011
+++ /utest/model/test_keyword.py Wed Nov 9 12:25:21 2011
@@ -25,6 +25,29 @@
assert_equal(kw.keywords[1].keywords[0].id, 's1-t1-k1-k2-k1')
+class TestStringRepresentation(unittest.TestCase):
+
+ def setUp(self):
+ self.empty = Keyword()
+ self.ascii = Keyword(name='Kekkonen')
+ self.non_ascii = Keyword(name=u'hyv\xe4 nimi')
+
+ def test_unicode(self):
+ assert_equal(unicode(self.empty), '')
+ assert_equal(unicode(self.ascii), 'Kekkonen')
+ assert_equal(unicode(self.non_ascii), u'hyv\xe4 nimi')
+
+ def test_str(self):
+ assert_equal(str(self.empty), '')
+ assert_equal(str(self.ascii), 'Kekkonen')
+ assert_equal(str(self.non_ascii), 'hyv? nimi')
+
+ def test_repr(self):
+ assert_equal(repr(self.empty), "''")
+ assert_equal(repr(self.ascii), "'Kekkonen'")
+ assert_equal(repr(self.non_ascii), "'hyv? nimi'")
+
+
class TestKeywords(unittest.TestCase):
def test_setup(self):
=======================================
--- /utest/model/test_testcase.py Wed Nov 9 08:52:02 2011
+++ /utest/model/test_testcase.py Wed Nov 9 12:25:21 2011
@@ -36,5 +36,28 @@
assert_equal(self.test.longname, 'suite.sub suite.test')
+class TestStringRepresentation(unittest.TestCase):
+
+ def setUp(self):
+ self.empty = TestCase()
+ self.ascii = TestCase(name='Kekkonen')
+ self.non_ascii = TestCase(name=u'hyv\xe4 nimi')
+
+ def test_unicode(self):
+ assert_equal(unicode(self.empty), '')
+ assert_equal(unicode(self.ascii), 'Kekkonen')
+ assert_equal(unicode(self.non_ascii), u'hyv\xe4 nimi')
+
+ def test_str(self):
+ assert_equal(str(self.empty), '')
+ assert_equal(str(self.ascii), 'Kekkonen')
+ assert_equal(str(self.non_ascii), 'hyv? nimi')
+
+ def test_repr(self):
+ assert_equal(repr(self.empty), "''")
+ assert_equal(repr(self.ascii), "'Kekkonen'")
+ assert_equal(repr(self.non_ascii), "'hyv? nimi'")
+
+
if __name__ == '__main__':
unittest.main()
=======================================
--- /utest/model/test_testsuite.py Wed Nov 9 08:52:02 2011
+++ /utest/model/test_testsuite.py Wed Nov 9 12:25:21 2011
@@ -73,5 +73,28 @@
assert_equal(sub.id, 's1-s1')
+class TestStringRepresentation(unittest.TestCase):
+
+ def setUp(self):
+ self.empty = TestSuite()
+ self.ascii = TestSuite(name='Kekkonen')
+ self.non_ascii = TestSuite(name=u'hyv\xe4 nimi')
+
+ def test_unicode(self):
+ assert_equal(unicode(self.empty), '')
+ assert_equal(unicode(self.ascii), 'Kekkonen')
+ assert_equal(unicode(self.non_ascii), u'hyv\xe4 nimi')
+
+ def test_str(self):
+ assert_equal(str(self.empty), '')
+ assert_equal(str(self.ascii), 'Kekkonen')
+ assert_equal(str(self.non_ascii), 'hyv? nimi')
+
+ def test_repr(self):
+ assert_equal(repr(self.empty), "''")
+ assert_equal(repr(self.ascii), "'Kekkonen'")
+ assert_equal(repr(self.non_ascii), "'hyv? nimi'")
+
+
if __name__ == '__main__':
unittest.main()
==============================================================================
Revision: 7ec9ce1f5993
Author: Pekka Klärck
Date: Wed Nov 9 12:37:57 2011
Log: WTF? A test module with mocks not used for anything? And a test
what cannot fail???
http://code.google.com/p/robotframework/source/detail?r=7ec9ce1f5993
Modified:
/utest/output/test_loggerhelper.py
=======================================
--- /utest/output/test_loggerhelper.py Mon Mar 30 04:19:06 2009
+++ /utest/output/test_loggerhelper.py Wed Nov 9 12:37:57 2011
@@ -1,68 +1,15 @@
import unittest
-from robot.errors import DataError
+from robot.errors import DataError
from robot.output.loggerhelper import AbstractLogger
-class MockFile:
-
- def __init__(self):
- self.closed = False
- self.messages = []
- self.string = ""
-
- def flush(self):
- pass
-
- def erase_data(self):
- self.messages = []
- self.string = ""
-
- def write(self, line):
- self.messages.append(line)
- self.string += line
-
- def close(self):
- self.closed = True
-
-class SuiteMock:
- def __init__(self, name='', doc='', include=None, exclude=None,
suites=None):
- self.name = name
- self.doc = doc
- self.include = include or []
- self.exclude = exclude or []
- self.suites = suites or []
-
-class BasicMock:
- def __init__(self, name='', doc='', tags=None):
- self.name = name
- self.doc = doc
- self.tags = tags or []
-
-class StatisticsMock:
-
- def __init__(self, status='', message='', starttime='20051122
12:34:56.789',
- endtime='20051122 12:34:56.789'):
- self.status = status
- self.message = message
- self.starttime = starttime
- self.endtime = endtime
-
-
class TestAbstractLogger(unittest.TestCase):
-
- def test_set_threshold_invalid(self):
+
+ def test_set_invalid_threshold(self):
logger = AbstractLogger('trace')
- self.assertRaises(DataError, logger.set_level,'INVALID THRESHOLD')
-
- def test_getattr_with_invalid(self):
- logger = AbstractLogger('trace')
- try:
- logger.invalid('message')
- raise AssertionError, 'AttributeError not raised'
- except AttributeError:
- pass
-
-
+ self.assertRaises(DataError, logger.set_level,'INVALID THRESHOLD')
+
+
if __name__ == '__main__':
unittest.main()
==============================================================================
Revision: 60085d46d592
Author: Pekka Klärck
Date: Wed Nov 9 12:42:40 2011
Log: Message: 1) Changed robot.model.Message to be base for
loggerhelper.Message. 2) Also added string repr methods.
http://code.google.com/p/robotframework/source/detail?r=60085d46d592
Added:
/utest/model/test_message.py
Modified:
/src/robot/model/message.py
/src/robot/output/loggerhelper.py
=======================================
--- /dev/null
+++ /utest/model/test_message.py Wed Nov 9 12:42:40 2011
@@ -0,0 +1,27 @@
+import unittest
+
+from robot.model import Message
+from robot.utils.asserts import assert_equal
+
+
+class TestStringRepresentation(unittest.TestCase):
+
+ def setUp(self):
+ self.empty = Message()
+ self.ascii = Message('Kekkonen')
+ self.non_ascii = Message(u'hyv\xe4 nimi')
+
+ def test_unicode(self):
+ assert_equal(unicode(self.empty), '')
+ assert_equal(unicode(self.ascii), 'Kekkonen')
+ assert_equal(unicode(self.non_ascii), u'hyv\xe4 nimi')
+
+ def test_str(self):
+ assert_equal(str(self.empty), '')
+ assert_equal(str(self.ascii), 'Kekkonen')
+ assert_equal(str(self.non_ascii), 'hyv? nimi')
+
+ def test_repr(self):
+ assert_equal(repr(self.empty), "''")
+ assert_equal(repr(self.ascii), "'Kekkonen'")
+ assert_equal(repr(self.non_ascii), "'hyv? nimi'")
=======================================
--- /src/robot/model/message.py Wed Nov 9 08:49:18 2011
+++ /src/robot/model/message.py Wed Nov 9 12:42:40 2011
@@ -12,16 +12,34 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-from robot.output.loggerhelper import Message as BaseMessage
+from robot import utils
-# TODO: Inheritance should work other way. This should be the base.
-class Message(BaseMessage):
- __slots__ = []
+class Message(object):
+ __slots__ =
['level', 'html', 'timestamp', 'linkable', '_setter__message']
def __init__(self, message='', level='INFO', html=False,
timestamp=None,
linkable=False):
- BaseMessage.__init__(self, message, level, html, timestamp,
linkable)
+ self.message = message
+ self.level = level
+ self.html = html
+ self.timestamp = timestamp
+ self.linkable = linkable
+
+ @utils.setter
+ def message(self, msg):
+ if not isinstance(msg, basestring):
+ msg = utils.unic(msg)
+ return msg.replace('\r\n', '\n')
def visit(self, visitor):
visitor.visit_message(self)
+
+ def __unicode__(self):
+ return self.message
+
+ def __str__(self):
+ return unicode(self).encode('ASCII', 'replace')
+
+ def __repr__(self):
+ return repr(str(self))
=======================================
--- /src/robot/output/loggerhelper.py Wed Nov 9 06:57:01 2011
+++ /src/robot/output/loggerhelper.py Wed Nov 9 12:42:40 2011
@@ -15,6 +15,7 @@
from robot import utils
from robot.errors import DataError
+from robot.model import Message as BaseMessage
LEVELS = {
@@ -61,21 +62,14 @@
raise NotImplementedError(self.__class__)
-class Message(object):
- __slots__ =
['level', 'html', 'timestamp', 'linkable', '_setter__message']
+class Message(BaseMessage):
+ __slots__ = []
def __init__(self, message, level='INFO', html=False, timestamp=None,
linkable=False):
- self.message = message
- self.level, self.html = self._get_level_and_html(level, html)
- self.timestamp = self._get_timestamp(timestamp)
- self.linkable = linkable
-
- @utils.setter
- def message(self, msg):
- if not isinstance(msg, basestring):
- msg = utils.unic(msg)
- return msg.replace('\r\n', '\n')
+ level, html = self._get_level_and_html(level, html)
+ timestamp = self._get_timestamp(timestamp)
+ BaseMessage.__init__(self, message, level, html, timestamp,
linkable)
def _get_level_and_html(self, level, html):
level = level.upper()
==============================================================================
Revision: 9549fd0fa7f7
Author: Pekka Klärck
Date: Wed Nov 9 12:47:11 2011
Log: Model: Introduced ModelObject as a base class for model objects
to reduce duplication.
http://code.google.com/p/robotframework/source/detail?r=9549fd0fa7f7
Modified:
/src/robot/model/keyword.py
/src/robot/model/message.py
/src/robot/model/testcase.py
/src/robot/model/testsuite.py
=======================================
--- /src/robot/model/keyword.py Wed Nov 9 12:25:21 2011
+++ /src/robot/model/keyword.py Wed Nov 9 12:47:11 2011
@@ -16,9 +16,10 @@
from itemlist import ItemList
from message import Message
+from modelobject import ModelObject
-class Keyword(object):
+class Keyword(ModelObject):
__slots__ = ['parent', 'name', 'doc', 'args', 'type', 'timeout',
'_setter__messages', '_setter__keywords']
message_class = Message
=======================================
--- /src/robot/model/message.py Wed Nov 9 12:42:40 2011
+++ /src/robot/model/message.py Wed Nov 9 12:47:11 2011
@@ -14,8 +14,10 @@
from robot import utils
-
-class Message(object):
+from modelobject import ModelObject
+
+
+class Message(ModelObject):
__slots__ =
['level', 'html', 'timestamp', 'linkable', '_setter__message']
def __init__(self, message='', level='INFO', html=False,
timestamp=None,
@@ -37,9 +39,3 @@
def __unicode__(self):
return self.message
-
- def __str__(self):
- return unicode(self).encode('ASCII', 'replace')
-
- def __repr__(self):
- return repr(str(self))
=======================================
--- /src/robot/model/testcase.py Wed Nov 9 12:25:21 2011
+++ /src/robot/model/testcase.py Wed Nov 9 12:47:11 2011
@@ -16,9 +16,10 @@
from tags import Tags
from keyword import Keyword, Keywords
+from modelobject import ModelObject
-class TestCase(object):
+class TestCase(ModelObject):
__slots__ = ['parent', 'name', 'doc', 'timeout', '_setter__tags',
'_setter__keywords']
keyword_class = Keyword
@@ -58,11 +59,3 @@
def visit(self, visitor):
visitor.visit_test(self)
- def __unicode__(self):
- return self.name
-
- def __str__(self):
- return unicode(self).encode('ASCII', 'replace')
-
- def __repr__(self):
- return repr(str(self))
=======================================
--- /src/robot/model/testsuite.py Wed Nov 9 12:25:21 2011
+++ /src/robot/model/testsuite.py Wed Nov 9 12:47:11 2011
@@ -21,9 +21,10 @@
from critical import Critical
from tagsetter import TagSetter
from filter import Filter
+from modelobject import ModelObject
-class TestSuite(object):
+class TestSuite(ModelObject):
__slots__ = ['parent', 'source', '_name', 'doc', '_setter__metadata',
'_setter__suites', '_setter__tests', '_setter__keywords',
'_critical']
@@ -103,12 +104,3 @@
def visit(self, visitor):
visitor.visit_suite(self)
-
- def __unicode__(self):
- return self.name
-
- def __str__(self):
- return unicode(self).encode('ASCII', 'replace')
-
- def __repr__(self):
- return repr(str(self))
==============================================================================
Revision: 706e6b0f8127
Author: Pekka Klärck
Date: Wed Nov 9 13:21:18 2011
Log: Model: 1) Committed modelobject.py that was forgotten earlier. 2)
Introduced SetterAwareType metaclass that automatically addes 'secret'
setter attributes to __slots__.
http://code.google.com/p/robotframework/source/detail?r=706e6b0f8127
Added:
/src/robot/model/modelobject.py
Modified:
/src/robot/model/keyword.py
/src/robot/model/message.py
/src/robot/model/testcase.py
/src/robot/model/testsuite.py
/src/robot/utils/setter.py
/utest/utils/test_setter.py
=======================================
--- /dev/null
+++ /src/robot/model/modelobject.py Wed Nov 9 13:21:18 2011
@@ -0,0 +1,28 @@
+# 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 robot.utils.setter import SetterAwareType
+
+
+class ModelObject(object):
+ __metaclass__ = SetterAwareType
+
+ def __unicode__(self):
+ return self.name
+
+ def __str__(self):
+ return unicode(self).encode('ASCII', 'replace')
+
+ def __repr__(self):
+ return repr(str(self))
=======================================
--- /src/robot/model/keyword.py Wed Nov 9 12:47:11 2011
+++ /src/robot/model/keyword.py Wed Nov 9 13:21:18 2011
@@ -20,8 +20,7 @@
class Keyword(ModelObject):
- __slots__ = ['parent', 'name', 'doc', 'args', 'type', 'timeout',
- '_setter__messages', '_setter__keywords']
+ __slots__ = ['parent', 'name', 'doc', 'args', 'type', 'timeout']
message_class = Message
def __init__(self, name='', doc='', args=None, type='kw', timeout=''):
=======================================
--- /src/robot/model/message.py Wed Nov 9 12:47:11 2011
+++ /src/robot/model/message.py Wed Nov 9 13:21:18 2011
@@ -18,7 +18,7 @@
class Message(ModelObject):
- __slots__ =
['level', 'html', 'timestamp', 'linkable', '_setter__message']
+ __slots__ = ['level', 'html', 'timestamp', 'linkable']
def __init__(self, message='', level='INFO', html=False,
timestamp=None,
linkable=False):
=======================================
--- /src/robot/model/testcase.py Wed Nov 9 12:47:11 2011
+++ /src/robot/model/testcase.py Wed Nov 9 13:21:18 2011
@@ -20,8 +20,7 @@
class TestCase(ModelObject):
- __slots__ = ['parent', 'name', 'doc', 'timeout', '_setter__tags',
- '_setter__keywords']
+ __slots__ = ['parent', 'name', 'doc', 'timeout']
keyword_class = Keyword
def __init__(self, name='', doc='', tags=None, timeout=''):
=======================================
--- /src/robot/model/testsuite.py Wed Nov 9 12:47:11 2011
+++ /src/robot/model/testsuite.py Wed Nov 9 13:21:18 2011
@@ -25,9 +25,7 @@
class TestSuite(ModelObject):
- __slots__ = ['parent', 'source', '_name', 'doc', '_setter__metadata',
- '_setter__suites', '_setter__tests', '_setter__keywords',
- '_critical']
+ __slots__ = ['parent', 'source', '_name', 'doc', '_critical']
test_class = TestCase
keyword_class = Keyword
=======================================
--- /src/robot/utils/setter.py Wed Nov 9 06:57:01 2011
+++ /src/robot/utils/setter.py Wed Nov 9 13:21:18 2011
@@ -32,3 +32,13 @@
return
setattr(instance, self.attr_name, self.method(instance, value))
+
+class SetterAwareType(type):
+
+ def __new__(cls, name, bases, dct):
+ slots = dct.get('__slots__')
+ if slots is not None:
+ for item in dct.values():
+ if isinstance(item, setter):
+ slots.append(item.attr_name)
+ return type.__new__(cls, name, bases, dct)
=======================================
--- /utest/utils/test_setter.py Sat Nov 5 12:24:38 2011
+++ /utest/utils/test_setter.py Wed Nov 9 13:21:18 2011
@@ -1,7 +1,7 @@
import unittest
-from robot.utils.asserts import assert_equal, assert_raises
-
-from robot.utils import setter
+from robot.utils.asserts import assert_equal, assert_raises_with_msg
+
+from robot.utils.setter import setter, SetterAwareType
class Example(object):
@@ -9,16 +9,32 @@
def attr(self, value):
return value * 2
+class ExampleWithSlots(object):
+ __slots__ = []
+ __metaclass__ = SetterAwareType
+ @setter
+ def attr(self, value):
+ return value * 2
+
class TestSetter(unittest.TestCase):
+ def setUp(self):
+ self.item = Example()
+
def test_setting(self):
- e = Example()
- e.attr = 1
- assert_equal(e.attr, 2)
+ self.item.attr = 1
+ assert_equal(self.item.attr, 2)
def test_notset(self):
- assert_raises(AttributeError, getattr, Example(), 'attr')
+ assert_raises_with_msg(AttributeError, 'attr',
+ getattr, self.item, 'attr')
+
+
+class TestSetterAwareType(TestSetter):
+
+ def setUp(self):
+ self.item = ExampleWithSlots()
if __name__ == '__main__':