123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- # -*- coding: utf-8 -*-
- import pytest
- yaml = pytest.importorskip('yaml')
- import datetime
- import ioex.datetimeex
- from ioex.shell import TextColor
- @pytest.mark.parametrize(('a', 'b', 'expected_diff_lines'), [
- [
- [1, 2, 3],
- [1, 2, 3],
- [
- u' - 1',
- u' - 2',
- u' - 3',
- ],
- ],
- [
- [1, 2, 3],
- [1, 3],
- [
- u' - 1',
- u'- - 2',
- u' - 3',
- ],
- ],
- [
- [1, 3],
- [1, 2, 3],
- [
- u' - 1',
- u'+ - 2',
- u' - 3',
- ],
- ],
- [
- u'abcdef',
- u'abdf',
- [
- u"- abcdef",
- u"? - -",
- u"+ abdf",
- u" ...",
- ],
- ],
- [
- u'äbcdef',
- u'äbcdÜf',
- [
- u"- äbcdef",
- u"? ^",
- u"+ äbcdÜf",
- u"? ^",
- u" ...",
- ],
- ],
- [
- ioex.datetimeex.Duration(years = 2),
- ioex.datetimeex.Duration(years = 2),
- [
- u' !duration',
- u' years: 2',
- ],
- ],
- [
- ioex.datetimeex.Duration(years = 1),
- ioex.datetimeex.Duration(years = 2),
- [
- u' !duration',
- u'- years: 1',
- u'? ^',
- u'+ years: 2',
- u'? ^',
- ],
- ],
- [
- ioex.datetimeex.Period(
- start = datetime.datetime(2016, 7, 29, 21, 59, 13),
- end = datetime.datetime(2017, 8, 30, 22, 32, 12),
- ),
- ioex.datetimeex.Period(
- start = datetime.datetime(2016, 7, 29, 21, 59, 13),
- end = datetime.datetime(2017, 8, 30, 23, 32, 12),
- ),
- [
- u' !period',
- u'- end: 2017-08-30 22:32:12',
- u'? ^',
- u'+ end: 2017-08-30 23:32:12',
- u'? ^',
- u' start: 2016-07-29 21:59:13',
- ],
- ],
- ])
- def test_yaml_diff(a, b, expected_diff_lines):
- class TestDumper(yaml.SafeDumper):
- pass
- ioex.datetimeex.Duration.register_yaml_representer(TestDumper)
- ioex.datetimeex.Period.register_yaml_representer(TestDumper)
- expected_diff = u'\n'.join(expected_diff_lines) + u'\n'
- generated_diff = ioex.yaml_diff(a, b, dumper = TestDumper)
- assert expected_diff == generated_diff, \
- '\ngenerated: %r\nexpected: %r' % (generated_diff, expected_diff)
- @pytest.mark.parametrize(('a', 'b', 'expected_diff_lines'), [
- [
- [1, 2, 3],
- [1, 3, 4],
- [
- TextColor.default + u' - 1',
- TextColor.red + u'- - 2',
- TextColor.default + u' - 3',
- TextColor.green + u'+ - 4',
- ],
- ],
- [
- 'abcef',
- 'abdef',
- [
- TextColor.red + u'- abcef',
- TextColor.yellow + u'? ^',
- TextColor.green + u'+ abdef',
- TextColor.yellow + u'? ^',
- TextColor.default + u' ...',
- ],
- ],
- [
- {'a': True, 'b': 123, 'c': 'string', 'd': 1.23},
- {'a': True, 'b': 123, 'c': 'string', 'd': 1.23},
- [
- TextColor.default + u' a: true',
- TextColor.default + u' b: 123',
- TextColor.default + u' c: string',
- TextColor.default + u' d: 1.23',
- ],
- ],
- [
- {'a': True, 'b': 123, 'c': 'str', 'd': 1.23},
- {'a': False, 'b': 13, 'c': 'string', 'd': 12.3},
- [
- TextColor.red + u'- a: true',
- TextColor.green + u'+ a: false',
- TextColor.red + u'- b: 123',
- TextColor.yellow + u'? -',
- TextColor.green + u'+ b: 13',
- TextColor.red + u'- c: str',
- TextColor.green + u'+ c: string',
- TextColor.yellow + u'? +++',
- TextColor.red + u'- d: 1.23',
- TextColor.yellow + u'? -',
- TextColor.green + u'+ d: 12.3',
- TextColor.yellow + u'? +',
- ],
- ],
- ])
- def test_yaml_diff(a, b, expected_diff_lines):
- expected_diff = (u'\n' + TextColor.default).join(expected_diff_lines) + u'\n' + TextColor.default
- generated_diff = ioex.yaml_diff(a, b, colors = True)
- assert expected_diff == generated_diff, \
- '\ngenerated: %r\nexpected: %r' % (generated_diff, expected_diff)
|