diff --git a/setup.cfg b/setup.cfg
index ff1ce8c8..159efe3d 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 a6e7837d..6f5becad 100644
--- a/weboob/tools/application/formatters/iformatter.py
+++ b/weboob/tools/application/formatters/iformatter.py
@@ -229,3 +229,20 @@ class PrettyFormatter(IFormatter):
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 e1334ab3..b4800ced 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 @@ class JsonFormatter(IFormatter):
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 68949e24..81322d87 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 @@ class TableFormatter(IFormatter):
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 @@ class TableFormatter(IFormatter):
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'