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'