diff --git a/setup.cfg b/setup.cfg
index ff1ce8c8c5ccfcb46bb745d4a557ab9a1d49b518..159efe3db43d07871688fcc65aeffb538901af58 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -3,4 +3,8 @@ verbosity = 2
detailed-errors = 1
with-doctest = 1
where = weboob
-tests = weboob.tools.capabilities.paste,weboob.tools.path,weboob.capabilities.bank
+tests = weboob.capabilities.bank,
+ weboob.tools.capabilities.paste,
+ weboob.tools.application.formatters.json,
+ weboob.tools.application.formatters.table,
+ weboob.tools.path
diff --git a/weboob/tools/application/formatters/iformatter.py b/weboob/tools/application/formatters/iformatter.py
index a6e7837da8c05f3b6ed20308c5ac9dfce8ccadb9..6f5becadae24284d202c7d23365a27d10d9bf05f 100644
--- a/weboob/tools/application/formatters/iformatter.py
+++ b/weboob/tools/application/formatters/iformatter.py
@@ -229,3 +229,20 @@ def get_title(self, obj):
def get_description(self, obj):
return None
+
+def formatter_test_output(Formatter, obj):
+ """
+ Formats an object and returns output as a string.
+ For test purposes only.
+ """
+ from tempfile import mkstemp
+ from os import remove
+ _, name = mkstemp()
+ fmt = Formatter()
+ fmt.outfile = name
+ fmt.format(obj)
+ fmt.flush()
+ with open(name) as f:
+ res = f.read()
+ remove(name)
+ return res
diff --git a/weboob/tools/application/formatters/json.py b/weboob/tools/application/formatters/json.py
index e1334ab308c5ec644d439b5e411da765cb1c4390..b4800cede42ddb1aa6f348ec8c809e5e3d71833a 100644
--- a/weboob/tools/application/formatters/json.py
+++ b/weboob/tools/application/formatters/json.py
@@ -18,8 +18,6 @@
# along with weboob. If not, see .
-from __future__ import print_function
-
from weboob.capabilities.base import NotAvailable, NotLoaded
from weboob.tools.json import json
@@ -54,7 +52,7 @@ def __init__(self):
self.queue = []
def flush(self):
- print(json.dumps(self.queue, cls=Encoder))
+ self.output(json.dumps(self.queue, cls=Encoder))
def format_dict(self, item):
self.queue.append(item)
@@ -66,4 +64,9 @@ class JsonLineFormatter(IFormatter):
The advantage is that it can be streamed.
"""
def format_dict(self, item):
- print(json.dumps(item, cls=Encoder))
+ self.output(json.dumps(item, cls=Encoder))
+
+def test():
+ from .iformatter import formatter_test_output as fmt
+ assert fmt(JsonFormatter, {'foo': 'bar'}) == '[{"foo": "bar"}]\n'
+ assert fmt(JsonLineFormatter, {'foo': 'bar'}) == '{"foo": "bar"}\n'
diff --git a/weboob/tools/application/formatters/table.py b/weboob/tools/application/formatters/table.py
index 68949e24d84e18f6eb79b8729114a8e5f64ce00b..81322d87808bae947ce4c919ccf6b1dd7649c6ea 100644
--- a/weboob/tools/application/formatters/table.py
+++ b/weboob/tools/application/formatters/table.py
@@ -18,8 +18,6 @@
# along with weboob. If not, see .
-from __future__ import print_function
-
from prettytable import PrettyTable
from weboob.capabilities.base import empty
@@ -42,7 +40,7 @@ def __init__(self):
def flush(self):
s = self.get_formatted_table()
if s is not None:
- print(s.encode('utf-8'))
+ self.output(s.encode('utf-8'))
def get_formatted_table(self):
if len(self.queue) == 0:
@@ -101,3 +99,12 @@ def set_header(self, string):
class HTMLTableFormatter(TableFormatter):
HTML = True
+
+def test():
+ from .iformatter import formatter_test_output as fmt
+ assert fmt(TableFormatter, {'foo': 'bar'}) == \
+ '+-----+\n' \
+ '| Foo |\n' \
+ '+-----+\n' \
+ '| bar |\n' \
+ '+-----+\n'