def test_can_wrap_multiple_outputs_with_mapping(self):
        m = mock.Mock(return_value=(210, 220))
        s = DataSourceWrapper(fields=[('field3', 'remote3'), 'field1'], source=m)

        assert s.fields == ['field3', 'field1']

        with s:
            d = s.read()
        assert d == {'field3': 210, 'field1': 220}
    def test_can_wrap_single_output_with_mapping(self):
        m = mock.Mock(return_value=(110, 120))
        s = DataSourceWrapper(fields=[('field3', 'remote3')], source=m)

        assert s.fields == ['field3']

        with s:
            d = s.read()
        assert d == {'field3': (110, 120)}
    def test_can_wrap_object_properties(self):
        class O:
            def __init__(self):
                self._count = 0

            @property
            def value(self):
                self._count += 1
                return self._count

        obj = O()
        s = DataSourceWrapper(source=obj, fields=[('result', 'value')])

        with s:
            d = s.read()
            assert d == {'result': 1}

            d = s.read()
            assert d == {'result': 2}