4 new revisions:
Revision: 224c5cdae6c5
Author: Pekka Klärck
Date: Sun Jun 19 09:17:06 2011
Log: cleanup
http://code.google.com/p/robotframework/source/detail?r=224c5cdae6c5
Revision: 17fc9fc7b755
Author: Pekka Klärck
Date: Sun Jun 19 09:18:07 2011
Log: missing import after module split. would be a good idea to run
unit te...
http://code.google.com/p/robotframework/source/detail?r=17fc9fc7b755
Revision: bd52ee1267e0
Author: Pekka Klärck
Date: Sun Jun 19 09:19:01 2011
Log: Renamed test module to match tested module. Also renamed tested
class ...
http://code.google.com/p/robotframework/source/detail?r=bd52ee1267e0
Revision: c12494a4c54b
Author: Pekka Klärck
Date: Sun Jun 19 09:23:36 2011
Log: better place
http://code.google.com/p/robotframework/source/detail?r=c12494a4c54b
==============================================================================
Revision: 224c5cdae6c5
Author: Pekka Klärck
Date: Sun Jun 19 09:17:06 2011
Log: cleanup
http://code.google.com/p/robotframework/source/detail?r=224c5cdae6c5
Modified:
/src/robot/output/output.py
=======================================
--- /src/robot/output/output.py Sun Jun 19 05:51:50 2011
+++ /src/robot/output/output.py Sun Jun 19 09:17:06 2011
@@ -13,8 +13,6 @@
# limitations under the License.
from robot.common.statistics import Statistics
-from robot import utils
-import robot
from loggerhelper import AbstractLogger
from logger import LOGGER
@@ -31,7 +29,7 @@
self._xmllogger = XmlLogger(settings['Output'],
settings['LogLevel'])
self._register_loggers(settings['Listeners'],
settings['DebugFile'])
self._settings = settings
- robot.output.OUTPUT = self
+ self._set_global_output()
def _register_loggers(self, listeners, debugfile):
LOGGER.register_context_changing_logger(self._xmllogger)
@@ -39,6 +37,11 @@
if logger: LOGGER.register_logger(logger)
LOGGER.disable_message_cache()
+ def _set_global_output(self):
+ # This is a hack. Hopefully we get rid of it at some point.
+ from robot import output
+ output.OUTPUT = self
+
def close(self, suite):
stats = Statistics(suite, self._settings['SuiteStatLevel'],
self._settings['TagStatInclude'],
==============================================================================
Revision: 17fc9fc7b755
Author: Pekka Klärck
Date: Sun Jun 19 09:18:07 2011
Log: missing import after module split. would be a good idea to run
unit tests before commits.
http://code.google.com/p/robotframework/source/detail?r=17fc9fc7b755
Modified:
/src/robot/output/stdoutlogsplitter.py
=======================================
--- /src/robot/output/stdoutlogsplitter.py Sun Jun 19 05:51:50 2011
+++ /src/robot/output/stdoutlogsplitter.py Sun Jun 19 09:18:07 2011
@@ -15,6 +15,7 @@
import re
from robot.output.loggerhelper import Message, LEVELS
+from robot import utils
class StdoutLogSplitter(object):
==============================================================================
Revision: bd52ee1267e0
Author: Pekka Klärck
Date: Sun Jun 19 09:19:01 2011
Log: Renamed test module to match tested module. Also renamed tested
class to match the actual class to fix tests. It would really be a good
idea to run unit tests before commits.
http://code.google.com/p/robotframework/source/detail?r=bd52ee1267e0
Added:
/utest/output/test_stdout_splitter.py
Deleted:
/utest/output/test_output_splitter.py
=======================================
--- /dev/null
+++ /utest/output/test_stdout_splitter.py Sun Jun 19 09:19:01 2011
@@ -0,0 +1,86 @@
+import unittest
+import time
+
+from robot.utils.asserts import assert_equals
+from robot.utils import format_time
+
+from robot.output.stdoutlogsplitter import StdoutLogSplitter as Splitter
+
+
+class TestOutputSplitter(unittest.TestCase):
+
+ def test_empty_output_should_result_in_empty_messages_list(self):
+ splitter = Splitter('')
+ assert_equals(list(splitter), [])
+
+ def test_plain_output_should_have_info_level(self):
+ splitter = Splitter('this is message\nin many\nlines.')
+ self._verify_message(splitter, 'this is message\nin many\nlines.')
+ assert_equals(len(list(splitter)), 1)
+
+ def test_leading_and_trailing_space_should_be_stripped(self):
+ splitter = Splitter('\t \n My message \t\r\n')
+ self._verify_message(splitter, 'My message')
+ assert_equals(len(list(splitter)), 1)
+
+ def test_legal_level_is_correctly_read(self):
+ splitter = Splitter('*DEBUG* My message details')
+ self._verify_message(splitter, 'My message details', 'DEBUG')
+ assert_equals(len(list(splitter)), 1)
+
+ def test_space_after_level_is_optional(self):
+ splitter = Splitter('*WARN*No space!')
+ self._verify_message(splitter, 'No space!', 'WARN')
+ assert_equals(len(list(splitter)), 1)
+
+ def test_it_is_possible_to_define_multiple_levels(self):
+ splitter = Splitter('*WARN* WARNING!\n'
+ '*TRACE*msg')
+ self._verify_message(splitter, 'WARNING!', 'WARN')
+ self._verify_message(splitter, 'msg', 'TRACE', index=1)
+ assert_equals(len(list(splitter)), 2)
+
+ def
test_html_flag_should_be_parsed_correctly_and_uses_info_level(self):
+ splitter = Splitter('*HTML* <b>Hello</b>')
+ self._verify_message(splitter, '<b>Hello</b>', level='INFO',
html=True)
+ assert_equals(len(list(splitter)), 1)
+
+ def test_default_level_for_first_message_is_info(self):
+ splitter = Splitter('<img src="foo bar">\n'
+ '*DEBUG*bar foo')
+ self._verify_message(splitter, '<img src="foo bar">')
+ self._verify_message(splitter, 'bar foo', 'DEBUG', index=1)
+ assert_equals(len(list(splitter)), 2)
+
+ def test_timestamp_given_as_integer(self):
+ now = int(time.time())
+ splitter = Splitter('*INFO:xxx* No timestamp\n'
+ '*INFO:0* Epoch\n'
+ '*HTML:%d*X' % (now*1000))
+ self._verify_message(splitter, '*INFO:xxx* No timestamp')
+ self._verify_message(splitter, 'Epoch', timestamp=0, index=1)
+ self._verify_message(splitter, html=True, timestamp=now, index=2)
+ assert_equals(len(list(splitter)), 3)
+
+ def test_timestamp_given_as_float(self):
+ splitter = Splitter('*INFO:1x2* No timestamp\n'
+ '*HTML:1000.123456789* X\n'
+ '*INFO:12345678.9*X')
+ self._verify_message(splitter, '*INFO:1x2* No timestamp')
+ self._verify_message(splitter, html=True, timestamp=1, index=1)
+ self._verify_message(splitter, timestamp=12345.679, index=2)
+ assert_equals(len(list(splitter)), 3)
+
+ def _verify_message(self, splitter, msg='X', level='INFO', html=False,
+ timestamp=None, index=0):
+ message = list(splitter)[index]
+ assert_equals(message.message, msg)
+ assert_equals(message.level, level)
+ assert_equals(message.html, html)
+ if timestamp:
+ assert_equals(message.timestamp,
+ format_time(timestamp, millissep='.'))
+
+
+if __name__ == '__main__':
+ unittest.main()
=======================================
--- /utest/output/test_output_splitter.py Sat Jun 18 14:14:55 2011
+++ /dev/null
@@ -1,86 +0,0 @@
-import unittest
-import time
-
-from robot.utils.asserts import assert_equals
-from robot.utils import format_time
-
-from robot.output.output import _OutputSplitter
-
-
-class TestOutputSplitter(unittest.TestCase):
-
- def test_empty_output_should_result_in_empty_messages_list(self):
- splitter = _OutputSplitter('')
- assert_equals(list(splitter), [])
-
- def test_plain_output_should_have_info_level(self):
- splitter = _OutputSplitter('this is message\nin many\nlines.')
- self._verify_message(splitter, 'this is message\nin many\nlines.')
- assert_equals(len(list(splitter)), 1)
-
- def test_leading_and_trailing_space_should_be_stripped(self):
- splitter = _OutputSplitter('\t \n My message \t\r\n')
- self._verify_message(splitter, 'My message')
- assert_equals(len(list(splitter)), 1)
-
- def test_legal_level_is_correctly_read(self):
- splitter = _OutputSplitter('*DEBUG* My message details')
- self._verify_message(splitter, 'My message details', 'DEBUG')
- assert_equals(len(list(splitter)), 1)
-
- def test_space_after_level_is_optional(self):
- splitter = _OutputSplitter('*WARN*No space!')
- self._verify_message(splitter, 'No space!', 'WARN')
- assert_equals(len(list(splitter)), 1)
-
- def test_it_is_possible_to_define_multiple_levels(self):
- splitter = _OutputSplitter('*WARN* WARNING!\n'
- '*TRACE*msg')
- self._verify_message(splitter, 'WARNING!', 'WARN')
- self._verify_message(splitter, 'msg', 'TRACE', index=1)
- assert_equals(len(list(splitter)), 2)
-
- def
test_html_flag_should_be_parsed_correctly_and_uses_info_level(self):
- splitter = _OutputSplitter('*HTML* <b>Hello</b>')
- self._verify_message(splitter, '<b>Hello</b>', level='INFO',
html=True)
- assert_equals(len(list(splitter)), 1)
-
- def test_default_level_for_first_message_is_info(self):
- splitter = _OutputSplitter('<img src="foo bar">\n'
- '*DEBUG*bar foo')
- self._verify_message(splitter, '<img src="foo bar">')
- self._verify_message(splitter, 'bar foo', 'DEBUG', index=1)
- assert_equals(len(list(splitter)), 2)
-
- def test_timestamp_given_as_integer(self):
- now = int(time.time())
- splitter = _OutputSplitter('*INFO:xxx* No timestamp\n'
- '*INFO:0* Epoch\n'
- '*HTML:%d* X' % (now*1000))
- self._verify_message(splitter, '*INFO:xxx* No timestamp')
- self._verify_message(splitter, 'Epoch', timestamp=0, index=1)
- self._verify_message(splitter, html=True, timestamp=now, index=2)
- assert_equals(len(list(splitter)), 3)
-
- def test_timestamp_given_as_float(self):
- splitter = _OutputSplitter('*INFO:1x2* No timestamp\n'
- '*HTML:1000.123456789* X\n'
- '*INFO:12345678.9* X')
- self._verify_message(splitter, '*INFO:1x2* No timestamp')
- self._verify_message(splitter, html=True, timestamp=1, index=1)
- self._verify_message(splitter, timestamp=12345.679, index=2)
- assert_equals(len(list(splitter)), 3)
-
- def _verify_message(self, splitter, msg='X', level='INFO', html=False,
- timestamp=None, index=0):
- message = list(splitter)[index]
- assert_equals(message.message, msg)
- assert_equals(message.level, level)
- assert_equals(message.html, html)
- if timestamp:
- assert_equals(message.timestamp,
- format_time(timestamp, millissep='.'))
-
-
-if __name__ == '__main__':
- unittest.main()
==============================================================================
Revision: c12494a4c54b
Author: Pekka Klärck
Date: Sun Jun 19 09:23:36 2011
Log: better place
http://code.google.com/p/robotframework/source/detail?r=c12494a4c54b
Added:
/atest/robot/cli/runner/log_level.txt
Deleted:
/atest/robot/output/log_levels.txt
=======================================
--- /dev/null
+++ /atest/robot/cli/runner/log_level.txt Sun Jun 19 09:23:36 2011
@@ -0,0 +1,59 @@
+*** Settings ***
+Documentation Tests for setting log level from command line with
--loglevel option. Setting log level while executing tests (BuiltIn.Set Log
Level) is tested with BuiltIn library keywords.
+Default Tags regression pybot jybot
+Resource atest_resource.txt
+
+*** Variables ***
+${TESTDATA} misc/pass_and_fail.html
+
+*** Test Cases ***
+No Log Level Given
+ [Documentation] Default level of INFO should be used
+ Run Tests ${EMPTY} ${TESTDATA}
+ Check Log Message ${SUITE.tests[0].kws[0].kws[0].msgs[0]} Hello
says "Pass"! INFO
+ Should Be Equal As Integers
${SUITE.tests[0].kws[0].kws[1].message_count} 0
+ Check Log Message ${SUITE.tests[1].kws[1].msgs[0]} Expected failure
FAIL
+
+Trace Level
+ Run Tests --loglevel TRACE ${TESTDATA}
+ Check Log Message ${SUITE.tests[0].kws[0].kws[0].msgs[0]} Arguments:
[ u'Hello says "Pass"!' | u'INFO' ] TRACE
+ Check Log Message ${SUITE.tests[0].kws[0].kws[0].msgs[1]} Hello
says "Pass"! INFO
+ Check Log Message ${SUITE.tests[0].kws[0].kws[0].msgs[2]} Return:
None TRACE
+ Check Log Message ${SUITE.tests[0].kws[0].kws[1].msgs[1]} Debug
message DEBUG
+ Check Log Message ${SUITE.tests[1].kws[1].msgs[0]} Arguments: [
msg=u'Expected failure' ] TRACE
+ Check Log Message ${SUITE.tests[1].kws[1].msgs[1]} Expected failure
FAIL
+
+Debug Level
+ Run Tests --loglevel debug ${TESTDATA}
+ Check Log Message ${SUITE.tests[0].kws[0].kws[0].msgs[0]} Hello
says "Pass"! INFO
+ Check Log Message ${SUITE.tests[0].kws[0].kws[1].msgs[0]} Debug
message DEBUG
+ Check Log Message ${SUITE.tests[1].kws[1].msgs[0]} Expected failure
FAIL
+
+Info Level
+ Run Tests -L InFo ${TESTDATA}
+ Check Log Message ${SUITE.tests[0].kws[0].kws[0].msgs[0]} Hello
says "Pass"! INFO
+ Should Be Equal As Integers
${SUITE.tests[0].kws[0].kws[1].message_count} 0
+ Check Log Message ${SUITE.tests[1].kws[1].msgs[0]} Expected failure
FAIL
+
+Warn Level
+ Run Tests --loglevel WARN --variable LEVEL1:WARN --variable
LEVEL2:INFO ${TESTDATA}
+ Check Log Message ${SUITE.tests[0].kws[0].kws[0].msgs[0]} Hello
says "Pass"! WARN
+ Should Be Equal As Integers
${SUITE.tests[0].kws[0].kws[1].message_count} 0
+ Check Log Message ${SUITE.tests[1].kws[1].msgs[0]} Expected failure
FAIL
+
+Warnings Should Be Written To Syslog
+ Should Be Equal ${PREV TEST NAME} Warn Level
+ Check Log Message ${ERRORS.msgs[0]} Hello says "Suite Setup"! WARN
+ Check Log Message ${ERRORS.msgs[1]} Hello says "Pass"! WARN
+ Check Log Message ${ERRORS.msgs[2]} Hello says "Fail"! WARN
+ Should Be True ${ERRORS.msg_count} == 3
+ Check Syslog Contains | WARN \ | Hello says "Suite Setup"!
+ Check Syslog Contains | WARN \ | Hello says "Pass"!
+ Check Syslog Contains | WARN \ | Hello says "Fail"!
+
+None Level
+ Run Tests --loglevel NONE --variable LEVEL1:ERROR --variable
LEVEL2:FAIL ${TESTDATA}
+ Should Be Equal As Integers
${SUITE.tests[0].kws[0].kws[0].message_count} 0
+ Should Be Equal As Integers
${SUITE.tests[0].kws[0].kws[1].message_count} 0
+ Should Be Equal As Integers ${SUITE.tests[1].kws[1].message_count} 0
+
=======================================
--- /atest/robot/output/log_levels.txt Wed Apr 14 12:38:44 2010
+++ /dev/null
@@ -1,59 +0,0 @@
-*** Settings ***
-Documentation Tests for setting log level from command line with
--loglevel option. Setting log level while executing tests (BuiltIn.Set Log
Level) is tested with BuiltIn library keywords.
-Default Tags regression pybot jybot
-Resource atest_resource.txt
-
-*** Variables ***
-${TESTDATA} misc/pass_and_fail.html
-
-*** Test Cases ***
-No Log Level Given
- [Documentation] Default level of INFO should be used
- Run Tests ${EMPTY} ${TESTDATA}
- Check Log Message ${SUITE.tests[0].kws[0].kws[0].msgs[0]} Hello
says "Pass"! INFO
- Should Be Equal As Integers
${SUITE.tests[0].kws[0].kws[1].message_count} 0
- Check Log Message ${SUITE.tests[1].kws[1].msgs[0]} Expected failure
FAIL
-
-Trace Level
- Run Tests --loglevel TRACE ${TESTDATA}
- Check Log Message ${SUITE.tests[0].kws[0].kws[0].msgs[0]} Arguments:
[ u'Hello says "Pass"!' | u'INFO' ] TRACE
- Check Log Message ${SUITE.tests[0].kws[0].kws[0].msgs[1]} Hello
says "Pass"! INFO
- Check Log Message ${SUITE.tests[0].kws[0].kws[0].msgs[2]} Return:
None TRACE
- Check Log Message ${SUITE.tests[0].kws[0].kws[1].msgs[1]} Debug
message DEBUG
- Check Log Message ${SUITE.tests[1].kws[1].msgs[0]} Arguments: [
msg=u'Expected failure' ] TRACE
- Check Log Message ${SUITE.tests[1].kws[1].msgs[1]} Expected failure
FAIL
-
-Debug Level
- Run Tests --loglevel debug ${TESTDATA}
- Check Log Message ${SUITE.tests[0].kws[0].kws[0].msgs[0]} Hello
says "Pass"! INFO
- Check Log Message ${SUITE.tests[0].kws[0].kws[1].msgs[0]} Debug
message DEBUG
- Check Log Message ${SUITE.tests[1].kws[1].msgs[0]} Expected failure
FAIL
-
-Info Level
- Run Tests -L InFo ${TESTDATA}
- Check Log Message ${SUITE.tests[0].kws[0].kws[0].msgs[0]} Hello
says "Pass"! INFO
- Should Be Equal As Integers
${SUITE.tests[0].kws[0].kws[1].message_count} 0
- Check Log Message ${SUITE.tests[1].kws[1].msgs[0]} Expected failure
FAIL
-
-Warn Level
- Run Tests --loglevel WARN --variable LEVEL1:WARN --variable
LEVEL2:INFO ${TESTDATA}
- Check Log Message ${SUITE.tests[0].kws[0].kws[0].msgs[0]} Hello
says "Pass"! WARN
- Should Be Equal As Integers
${SUITE.tests[0].kws[0].kws[1].message_count} 0
- Check Log Message ${SUITE.tests[1].kws[1].msgs[0]} Expected failure
FAIL
-
-Warnings Should Be Written To Syslog
- Should Be Equal ${PREV TEST NAME} Warn Level
- Check Log Message ${ERRORS.msgs[0]} Hello says "Suite Setup"! WARN
- Check Log Message ${ERRORS.msgs[1]} Hello says "Pass"! WARN
- Check Log Message ${ERRORS.msgs[2]} Hello says "Fail"! WARN
- Should Be True ${ERRORS.msg_count} == 3
- Check Syslog Contains | WARN \ | Hello says "Suite Setup"!
- Check Syslog Contains | WARN \ | Hello says "Pass"!
- Check Syslog Contains | WARN \ | Hello says "Fail"!
-
-None Level
- Run Tests --loglevel NONE --variable LEVEL1:ERROR --variable
LEVEL2:FAIL ${TESTDATA}
- Should Be Equal As Integers
${SUITE.tests[0].kws[0].kws[0].message_count} 0
- Should Be Equal As Integers
${SUITE.tests[0].kws[0].kws[1].message_count} 0
- Should Be Equal As Integers ${SUITE.tests[1].kws[1].message_count} 0
-