5 new revisions:
Revision: cc521131eaf0
Branch: default
Author: Robot Framework Developers (robotframew...@gmail.com)
Date: Wed Oct 10 02:48:48 2012
Log: refactored a bit more how library scope and version are got from
impor...
http://code.google.com/p/robotframework/source/detail?r=cc521131eaf0
Revision: 5257e2711ae0
Branch: default
Author: Robot Framework Developers (robotframew...@gmail.com)
Date: Wed Oct 10 03:52:33 2012
Log: testlibraries: added support for defining doc format using
ROBOT_LIBRA...
http://code.google.com/p/robotframework/source/detail?r=5257e2711ae0
Revision: bbd72a9a0cbe
Branch: default
Author: Robot Framework Developers (robotframew...@gmail.com)
Date: Wed Oct 10 03:55:00 2012
Log: libdoc tests: DocFormat library is now a class and not a module
http://code.google.com/p/robotframework/source/detail?r=bbd72a9a0cbe
Revision: 9378aaed9378
Branch: default
Author: Robot Framework Developers (robotframew...@gmail.com)
Date: Thu Oct 11 03:54:25 2012
Log: libdoc: Use format specified in libraries using
ROBOT_LIBRARY_DOC_FORM...
http://code.google.com/p/robotframework/source/detail?r=9378aaed9378
Revision: 9ae40a25dc73
Branch: default
Author: Robot Framework Developers (robotframew...@gmail.com)
Date: Thu Oct 11 04:09:25 2012
Log: libdoc: Handle invalid doc format in library...
http://code.google.com/p/robotframework/source/detail?r=9ae40a25dc73
==============================================================================
Revision: cc521131eaf0
Branch: default
Author: Robot Framework Developers (robotframew...@gmail.com)
Date: Wed Oct 10 02:48:48 2012
Log: refactored a bit more how library scope and version are got from
imported library object
http://code.google.com/p/robotframework/source/detail?r=cc521131eaf0
Modified:
/src/robot/running/testlibraries.py
=======================================
--- /src/robot/running/testlibraries.py Tue Oct 9 06:48:37 2012
+++ /src/robot/running/testlibraries.py Wed Oct 10 02:48:48 2012
@@ -138,13 +138,11 @@
pass
def _get_version(self, code):
- return
self._get_string_attr(code, 'ROBOT_LIBRARY_VERSION', '__version__')
+ return self._get_string_attr(code, 'ROBOT_LIBRARY_VERSION') \
+ or self._get_string_attr(code, '__version__')
- def _get_string_attr(self, object, *attrs):
- for attr in attrs:
- if hasattr(object, attr):
- return utils.unic(getattr(object, attr))
- return ''
+ def _get_string_attr(self, object, attr, default=''):
+ return utils.unic(getattr(object, attr, default))
def _get_scope(self, libcode):
scope = self._get_string_attr(libcode, 'ROBOT_LIBRARY_SCOPE')
==============================================================================
Revision: 5257e2711ae0
Branch: default
Author: Robot Framework Developers (robotframew...@gmail.com)
Date: Wed Oct 10 03:52:33 2012
Log: testlibraries: added support for defining doc format using
ROBOT_LIBRARY_DOC_FORMAT
Update issue 489
Now it is possible to define doc format in libraries themselves using
ROBOT_LIBRARY_DOC_FORMAT attribute similarly as e.g. ROBOT_LIBRARY_VERSION.
Libdoc doesn't yet use this attribute, though, but supporting it is up next.
http://code.google.com/p/robotframework/source/detail?r=5257e2711ae0
Modified:
/atest/testresources/testlibs/JavaVersionLibrary.class
/atest/testresources/testlibs/JavaVersionLibrary.java
/atest/testresources/testlibs/classes.py
/src/robot/running/testlibraries.py
/utest/running/test_testlibrary.py
=======================================
--- /atest/testresources/testlibs/JavaVersionLibrary.class Wed Aug 25
05:10:48 2010
+++ /atest/testresources/testlibs/JavaVersionLibrary.class Wed Oct 10
03:52:33 2012
@@ -6,3 +6,4 @@
*· ±
°
+
=======================================
--- /atest/testresources/testlibs/JavaVersionLibrary.java Thu Sep 11
05:17:32 2008
+++ /atest/testresources/testlibs/JavaVersionLibrary.java Wed Oct 10
03:52:33 2012
@@ -1,7 +1,8 @@
public class JavaVersionLibrary {
-
+
public static final String ROBOT_LIBRARY_VERSION = "1.0";
-
+ public static final String ROBOT_LIBRARY_DOC_FORMAT = "text";
+
public Object kw() {
return null;
}
=======================================
--- /atest/testresources/testlibs/classes.py Mon Mar 19 06:27:58 2012
+++ /atest/testresources/testlibs/classes.py Wed Oct 10 03:52:33 2012
@@ -99,6 +99,7 @@
class VersionLibrary:
ROBOT_LIBRARY_VERSION = '0.1'
+ ROBOT_LIBRARY_DOC_FORMAT = 'html'
kw = lambda x:None
=======================================
--- /src/robot/running/testlibraries.py Wed Oct 10 02:48:48 2012
+++ /src/robot/running/testlibraries.py Wed Oct 10 03:52:33 2012
@@ -110,6 +110,7 @@
self._libinst = None
if libcode is not None:
self._doc = utils.getdoc(libcode)
+ self.doc_format = self._get_doc_format(libcode)
self.scope = self._get_scope(libcode)
self._libcode = libcode
self.init = self._create_init_handler(libcode)
@@ -137,16 +138,21 @@
def end_test(self):
pass
- def _get_version(self, code):
- return self._get_string_attr(code, 'ROBOT_LIBRARY_VERSION') \
- or self._get_string_attr(code, '__version__')
+ def _get_version(self, libcode):
+ return self._get_attr(libcode, 'ROBOT_LIBRARY_VERSION') \
+ or self._get_attr(libcode, '__version__')
- def _get_string_attr(self, object, attr, default=''):
- return utils.unic(getattr(object, attr, default))
+ def _get_attr(self, object, attr, default='', upper=False):
+ value = utils.unic(getattr(object, attr, default))
+ if upper:
+ value = utils.normalize(value, ignore='_').upper()
+ return value
+
+ def _get_doc_format(self, libcode):
+ return self._get_attr(libcode, 'ROBOT_LIBRARY_DOC_FORMAT',
upper=True)
def _get_scope(self, libcode):
- scope = self._get_string_attr(libcode, 'ROBOT_LIBRARY_SCOPE')
- scope = utils.normalize(scope, ignore='_').upper()
+ scope = self._get_attr(libcode, 'ROBOT_LIBRARY_SCOPE', upper=True)
return scope if scope in ['GLOBAL','TESTSUITE'] else 'TESTCASE'
def _create_init_handler(self, libcode):
=======================================
--- /utest/running/test_testlibrary.py Fri Oct 5 07:46:09 2012
+++ /utest/running/test_testlibrary.py Wed Oct 10 03:52:33 2012
@@ -211,28 +211,48 @@
class TestVersion(unittest.TestCase):
- def test_version_of_python_libarary(self):
+ def test_no_version(self):
+ self._verify_version('classes.NameLibrary', '')
+
+ def test_version_in_class_library(self):
self._verify_version('classes.VersionLibrary', '0.1')
self._verify_version('classes.VersionObjectLibrary', 'ver')
- def test_version_with_no_version_info_defined(self):
- self._verify_version('classes.NameLibrary', '')
-
- def test_version_of_module_library(self):
+ def test_version_in_module_library(self):
self._verify_version('module_library', 'test')
if utils.is_jython:
- def test_version_of_java_library(self):
+ def test_no_version_in_java_library(self):
+ self._verify_version('ExampleJavaLibrary', '')
+
+ def test_version_in_java_library(self):
self._verify_version('JavaVersionLibrary', '1.0')
- def test_version_of_java_library_with_no_version_defined(self):
- self._verify_version('ExampleJavaLibrary', '')
-
def _verify_version(self, name, version):
assert_equals(TestLibrary(name).version, version)
+class TestDocFormat(unittest.TestCase):
+
+ def test_no_doc_format(self):
+ self._verify_doc_format('classes.NameLibrary', '')
+
+ def test_doc_format_in_python_libarary(self):
+ self._verify_doc_format('classes.VersionLibrary', 'HTML')
+
+ if utils.is_jython:
+
+ def test_no_doc_format_in_java_library(self):
+ self._verify_doc_format('ExampleJavaLibrary', '')
+
+ def test_doc_format_in_java_library(self):
+ self._verify_doc_format('JavaVersionLibrary', 'TEXT')
+
+ def _verify_doc_format(self, name, doc_format):
+ assert_equals(TestLibrary(name).doc_format, doc_format)
+
+
class _TestScopes(unittest.TestCase):
def _get_lib_and_instance(self, name):
==============================================================================
Revision: bbd72a9a0cbe
Branch: default
Author: Robot Framework Developers (robotframew...@gmail.com)
Date: Wed Oct 10 03:55:00 2012
Log: libdoc tests: DocFormat library is now a class and not a module
http://code.google.com/p/robotframework/source/detail?r=bbd72a9a0cbe
Modified:
/atest/testdata/libdoc/DocFormat.py
=======================================
--- /atest/testdata/libdoc/DocFormat.py Tue Oct 9 06:21:10 2012
+++ /atest/testdata/libdoc/DocFormat.py Wed Oct 10 03:55:00 2012
@@ -1,32 +1,33 @@
-"""Library to test documentation formatting.
+class DocFormat:
+ """Library to test documentation formatting.
-*bold* or <b>bold</b> http://example.com
-"""
+ *bold* or <b>bold</b> http://example.com
+ """
-def keyword():
- """*bold* or <b>bold</b> http://example.com"""
+ def keyword(self):
+ """*bold* or <b>bold</b> http://example.com"""
-def link():
- """Link to `Keyword`."""
+ def link(self):
+ """Link to `Keyword`."""
-def rest():
- """Let's see *how well* reST__ works.
+ def rest(self):
+ """Let's see *how well* reST__ works.
- This documentation is mainly used for manually verifying reST output.
- This link to \\`Keyword\\` is also automatically tested.
+ This documentation is mainly used for manually verifying reST
output.
+ This link to \\`Keyword\\` is also automatically tested.
- ==== =====
- My table
- two rows
- ==== =====
+ ==== =====
+ My table
+ two rows
+ ==== =====
- - list
- - here
+ - list
+ - here
- Preformatted::
+ Preformatted::
- def example():
- pass
+ def example():
+ pass
- __ http://docutils.sourceforge.net
- """
+ __ http://docutils.sourceforge.net
+ """
==============================================================================
Revision: 9378aaed9378
Branch: default
Author: Robot Framework Developers (robotframew...@gmail.com)
Date: Thu Oct 11 03:54:25 2012
Log: libdoc: Use format specified in libraries using
ROBOT_LIBRARY_DOC_FORMAT.
Update issue 489
Now format specified in test libs themselves using ROBOT_LIBRARY_DOC_FORMAT
is
used by libdoc. Format specified with --DocFormat option overrides that,
though.
Handling invalid format from R_L_D_F still missing.
http://code.google.com/p/robotframework/source/detail?r=9378aaed9378
Added:
/atest/testdata/libdoc/DocFormatHtml.java
/atest/testdata/libdoc/DocFormatHtml.py
Modified:
/atest/robot/libdoc/doc_format.txt
/atest/robot/libdoc/libdoc_resource.txt
/src/robot/libdocpkg/javabuilder.py
/src/robot/libdocpkg/model.py
/src/robot/libdocpkg/robotbuilder.py
=======================================
--- /dev/null
+++ /atest/testdata/libdoc/DocFormatHtml.java Thu Oct 11 03:54:25 2012
@@ -0,0 +1,20 @@
+/**
+ * Library to test documentation formatting.
+ *
+ * *bold* or <b>bold</b> http://example.com
+ */
+public class Example {
+ public static final String ROBOT_LIBRARY_DOC_FORMAT = "HTML";
+
+ /**
+ * *bold* or <b>bold</b> http://example.com
+ */
+ public void keyword() {
+ }
+
+ /**
+ * Link to `Keyword`.
+ */
+ public void link() {
+ }
+}
=======================================
--- /dev/null
+++ /atest/testdata/libdoc/DocFormatHtml.py Thu Oct 11 03:54:25 2012
@@ -0,0 +1,8 @@
+from DocFormat import DocFormat
+
+
+class DocFormatHtml(DocFormat):
+ ROBOT_LIBRARY_DOC_FORMAT = 'HtMl'
+
+
+DocFormatHtml.__doc__ = DocFormat.__doc__
=======================================
--- /atest/robot/libdoc/doc_format.txt Tue Oct 9 06:21:10 2012
+++ /atest/robot/libdoc/doc_format.txt Thu Oct 11 03:54:25 2012
@@ -1,8 +1,10 @@
*** Settings ***
-Force Tags regression pybot jybot
+Force Tags regression
+Default Tags pybot jybot
Resource libdoc_resource.txt
-Suite Setup Set Suite Variable ${LIBRARY}
${TESTDATADIR}/DocFormat.py
Test Setup Remove Output Files
+Test Template Test Format in HTML
+
*** Variables ***
${EXAMPLE URL} http://example.com
@@ -10,55 +12,62 @@
*** Test Cases ***
-Robot format in HTML
- Test Format in HTML --docformat Robot
- ... <b>bold</b> or <b>bold</b> ${EXAMPLE LINK}
+Robot format
+ <b>bold</b> or <b>bold</b> ${EXAMPLE LINK} --docformat
Robot
-Text format in HTML
- Test Format in HTML --DocFormat TEXT
- ... *bold* or <b>bold</b> ${EXAMPLE LINK}
+Text format
+ *bold* or <b>bold</b> ${EXAMPLE LINK} --DocFormat TEXT
-HTML format in HTML
- Test Format in HTML -F html
- ... *bold* or <b>bold</b> ${EXAMPLE URL}
+HTML format
+ *bold* or <b>bold</b> ${EXAMPLE URL} -F html
-reST format in HTML
- [Setup] Make test non-critical if docutils is not installed
- Test Format in HTML --docformat rest
- ... <em>bold</em> or <b>bold</b> <a *>${EXAMPLE URL}</a>
- ... Link to <cite>Keyword</cite>.
+reST format
+ [Template] NONE
+ [Setup] Fail test non-critically if docutils is not installed
+ Test Format in HTML <em>bold</em> or <b>bold</b> <a
+ ... --docformat rest expected2=Link to <cite>Keyword</cite>.
Doc Should Contain In HTML ${MODEL['keywords'][2]}
... This link to <a href="#Keyword" class="name">Keyword</a>
-Robot format in XML
- Test Format In XML --DOCFORMAT RoBoT ROBOT
+Format from Python library
+ *bold* or <b>bold</b> ${EXAMPLE URL} lib=DocFormatHtml.py
-Text format in XML
- Test Format In XML -F text TEXT
+Format from CLI overrides format from library
+ <b>bold</b> or <b>bold</b> ${EXAMPLE LINK} -F robot
DocFormatHtml.py
-HTML format in XML
- Test Format In XML --docfor HtMl HTML
+Format from Java library
+ [Tags] jybot
+ *bold* or <b>bold</b> ${EXAMPLE URL} ${EMPTY}
DocFormatHtml.java
+ <b>bold</b> or <b>bold</b> ${EXAMPLE LINK} -F robot
DocFormatHtml.java
+
+Format in XML
+ [Template] Test Format in XML
+ TEXT -F TEXT DocFormat.py
+ ROBOT --docfor RoBoT DocFormatHtml.py
+ HTML ${EMPTY} DocFormatHtml.py
-Read format from XML
- Run Libdoc -F HTML ${LIBRARY} ${OUTXML}
+Format from XML spec
+ [Template] NONE
+ Run Libdoc -F HTML ${TESTDATADIR}/DocFormat.py ${OUTXML}
Copy File ${OUTXML} ${OUTPREFIX}-2.xml
- Set Test Variable ${LIBRARY} ${OUTPREFIX}-2.xml
- Test Format In XML ${EMPTY} HTML
+ Test Format In XML HTML lib=${OUTPREFIX}-2.xml
*** Keywords ***
Test Format In HTML
- [Arguments] ${options} ${expected1}
+ [Arguments] ${expected} ${cli}= ${lib}=DocFormat.py
... ${expected2}=Link to <a href="#Keyword"
class="name">Keyword</a>.
- Run Libdoc And Parse Model From HTML ${options} ${LIBRARY}
- Doc Should Contain In HTML ${MODEL} ${expected1}
- Doc Should Contain In HTML ${MODEL['keywords'][0]} ${expected1}
+ ${lib} = Join Path ${TESTDATADIR} ${lib}
+ Run Libdoc And Parse Model From HTML ${cli} ${lib}
+ Doc Should Contain In HTML ${MODEL} ${expected}
+ Doc Should Contain In HTML ${MODEL['keywords'][0]} ${expected}
Doc Should Contain In HTML ${MODEL['keywords'][1]} ${expected2}
Test Format In XML
- [Arguments] ${options} ${expected}
- Run Libdoc And Parse Output ${options} ${LIBRARY}
+ [Arguments] ${expected} ${cli}= ${lib}=DocFormat.py
+ ${lib} = Join Path ${TESTDATADIR} ${lib}
+ Run Libdoc And Parse Output ${cli} ${lib}
Format should be ${expected}
Keyword Doc Should Be 0 *bold* or <b>bold</b> http://example.com
@@ -66,6 +75,7 @@
[Arguments] ${expected}
Element Attribute Should Be ${LIBDOC} format ${expected}
-Make test non-critical if docutils is not installed
+Fail test non-critically if docutils is not installed
${output} = Run ${INTERPRETER} -c "import docutils; print 'OK'"
- Run Keyword If """${output}""" != "OK" Remove Tags regression
+ Run Keyword If """${output}""" != "OK"
+ ... Fail This test requires `docutils` to be installed
-regression
=======================================
--- /atest/robot/libdoc/libdoc_resource.txt Tue Oct 9 06:21:10 2012
+++ /atest/robot/libdoc/libdoc_resource.txt Thu Oct 11 03:54:25 2012
@@ -38,7 +38,7 @@
Doc Should Contain In HTML
[Arguments] ${object} ${expected}
- Should Match ${object['doc']} *${expected}*
+ Should Contain ${object['doc']} ${expected}
Name Should Be
[Arguments] ${name}
=======================================
--- /src/robot/libdocpkg/javabuilder.py Fri Oct 5 05:56:31 2012
+++ /src/robot/libdocpkg/javabuilder.py Thu Oct 11 03:54:25 2012
@@ -25,7 +25,8 @@
libdoc = LibraryDoc(name=doc.qualifiedName(),
doc=self._get_doc(doc),
version=self._get_version(doc),
- scope=self._get_scope(doc))
+ scope=self._get_scope(doc),
+ doc_format=self._get_doc_format(doc))
libdoc.keywords = self._keywords(doc)
libdoc.inits = self._intializers(doc)
return libdoc
@@ -35,14 +36,17 @@
return '\n'.join(line.strip() for line in doc.splitlines())
def _get_version(self, doc):
- version = self._get_attr(doc, 'VERSION', '')
+ version = self._get_attr(doc, 'VERSION')
return utils.html_escape(version)
def _get_scope(self, doc):
scope = self._get_attr(doc, 'SCOPE', 'TEST CASE')
return scope.replace('_', ' ').lower()
- def _get_attr(self, doc, name, default):
+ def _get_doc_format(self, doc):
+ return self._get_attr(doc, 'DOC_FORMAT')
+
+ def _get_attr(self, doc, name, default=''):
for field in doc.fields():
if field.name() == 'ROBOT_LIBRARY_' + name \
and field.isPublic() and field.constantValue():
=======================================
--- /src/robot/libdocpkg/model.py Tue Oct 9 03:05:07 2012
+++ /src/robot/libdocpkg/model.py Thu Oct 11 03:54:25 2012
@@ -23,7 +23,7 @@
class LibraryDoc(object):
def __init__(self, name='', doc='', version='', type='library',
- scope='', named_args=False, doc_format='ROBOT'):
+ scope='', named_args=False, doc_format=''):
self.name = name
self.doc = doc
self.version = version
@@ -34,6 +34,10 @@
self.inits = []
self.keywords = []
+ @setter
+ def doc_format(self, format):
+ return format or 'ROBOT'
+
@setter
def keywords(self, kws):
return sorted(kws)
=======================================
--- /src/robot/libdocpkg/robotbuilder.py Tue Feb 28 07:11:08 2012
+++ /src/robot/libdocpkg/robotbuilder.py Thu Oct 11 03:54:25 2012
@@ -33,7 +33,8 @@
doc=self._get_doc(lib),
version=lib.version,
scope=self._get_scope(lib),
- named_args=lib.supports_named_arguments)
+ named_args=lib.supports_named_arguments,
+ doc_format=lib.doc_format)
libdoc.inits = self._get_initializers(lib)
libdoc.keywords = KeywordDocBuilder().build_keywords(lib)
return libdoc
==============================================================================
Revision: 9ae40a25dc73
Branch: default
Author: Robot Framework Developers (robotframew...@gmail.com)
Date: Thu Oct 11 04:09:25 2012
Log: libdoc: Handle invalid doc format in library
Update issue 489
Now invalid doc format defined in test library cause a clear error.
http://code.google.com/p/robotframework/source/detail?r=9ae40a25dc73
Added:
/atest/testdata/libdoc/DocFormatInvalid.py
Modified:
/atest/robot/libdoc/invalid_usage.txt
/src/robot/libdocpkg/htmlwriter.py
=======================================
--- /dev/null
+++ /atest/testdata/libdoc/DocFormatInvalid.py Thu Oct 11 04:09:25 2012
@@ -0,0 +1,8 @@
+from DocFormat import DocFormat
+
+
+class DocFormatInvalid(DocFormat):
+ ROBOT_LIBRARY_DOC_FORMAT = 'invalid'
+
+
+DocFormatInvalid.__doc__ = DocFormat.__doc__
=======================================
--- /atest/robot/libdoc/invalid_usage.txt Tue Oct 9 06:21:10 2012
+++ /atest/robot/libdoc/invalid_usage.txt Thu Oct 11 04:09:25 2012
@@ -26,7 +26,10 @@
BuiltIn out.ext Format must be 'HTML' or 'XML', got 'EXT'.
Invalid doc format
- --docformat inv BuiltIn out Doc format must
be 'ROBOT', 'TEXT', 'HTML' or 'REST', got 'INV'.
+ --docformat inv BuiltIn out.html Doc format must
be 'ROBOT', 'TEXT', 'HTML' or 'REST', got 'INV'.
+
+Invalid doc format in library
+ ${TESTDATADIR}/DocFormatInvalid.py out.html Invalid documentation
format 'INVALID'.
Non-existing library
NonExistingLib out.html Importing test library 'NonExistingLib'
failed: *
=======================================
--- /src/robot/libdocpkg/htmlwriter.py Tue Oct 9 06:21:10 2012
+++ /src/robot/libdocpkg/htmlwriter.py Thu Oct 11 04:09:25 2012
@@ -121,10 +121,17 @@
class DocToHtml(object):
def __init__(self, format):
- self._formatter = {'ROBOT': utils.html_format,
- 'TEXT': self._format_text,
- 'HTML': self._format_html,
- 'REST': self._format_rest}[format]
+ self._formatter = self._get_formatter(format)
+
+
+ def _get_formatter(self, format):
+ try:
+ return {'ROBOT': utils.html_format,
+ 'TEXT': self._format_text,
+ 'HTML': self._format_html,
+ 'REST': self._format_rest}[format]
+ except KeyError:
+ raise DataError("Invalid documentation format '%s'." % format)
def _format_text(self, doc):
return '<p style="white-space: pre-wrap">%s</p>' %
utils.html_escape(doc)