ebc84dcd91
Use `muranoapi.common.utils.is_different` - simplified hand-written replacement for deep.diff. It compares arbitrary nested objects, handles circular references, but doesn't return first difference as deep.diff does. Change-Id: Iced775fa39342ed09fa31ed9ac63a5dadb9e3f84
109 lines
3.0 KiB
Python
109 lines
3.0 KiB
Python
# Copyright (c) 2013 Mirantis, Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
import unittest2 as unittest
|
|
|
|
from muranoapi.common import utils
|
|
|
|
|
|
class IsDifferentTests(unittest.TestCase):
|
|
def test_equal_dicts(self):
|
|
obj1 = {'first': 10, 'second': 12}
|
|
obj2 = {'second': 12, 'first': 10}
|
|
comparison = utils.is_different(obj1, obj2)
|
|
self.assertFalse(comparison)
|
|
|
|
def test_different_dicts(self):
|
|
obj1 = {'first': 10, 'second': 11}
|
|
obj2 = {'first': 10, 'second': 12}
|
|
comparison = utils.is_different(obj1, obj2)
|
|
self.assertTrue(comparison)
|
|
|
|
def test_different_objs(self):
|
|
class Cls1(object):
|
|
a = 10
|
|
|
|
class Cls2(object):
|
|
b = 20
|
|
|
|
obj1 = Cls1()
|
|
obj2 = Cls2()
|
|
obj3 = Cls1()
|
|
obj3.a = {'one': 14, 'two': [(1, 2, 3), 'more']}
|
|
|
|
comparison1 = utils.is_different(obj1, obj2)
|
|
comparison2 = utils.is_different(obj1, obj3)
|
|
|
|
self.assertTrue(comparison1)
|
|
self.assertTrue(comparison2)
|
|
|
|
def test_equal_objs(self):
|
|
class Cls(object):
|
|
pass
|
|
|
|
obj1 = Cls()
|
|
obj2 = Cls()
|
|
obj1.a = {'one': 14, 'two': [(1, 2, 3), 'more']}
|
|
obj2.a = {'one': 14, 'two': [(1, 2, 3), 'more']}
|
|
|
|
comparison = utils.is_different(obj1, obj2)
|
|
|
|
self.assertFalse(comparison)
|
|
|
|
def test_equal_circular_objs(self):
|
|
class Cls(object):
|
|
pass
|
|
|
|
lst1 = [1, 2, 3]
|
|
lst2 = [1, 2, 3]
|
|
lst1.append(lst1)
|
|
lst2.append(lst2)
|
|
|
|
dct1 = {'one': 10, 'two': lst1}
|
|
dct2 = {'one': 10, 'two': lst1}
|
|
|
|
obj1 = Cls()
|
|
obj2 = Cls()
|
|
obj1.a = obj2.a = 10
|
|
obj1.self = obj1
|
|
obj2.self = obj2
|
|
|
|
comparison = utils.is_different(lst1, lst2)
|
|
comparison2 = utils.is_different(dct1, dct2)
|
|
comparison3 = utils.is_different(obj1, obj2)
|
|
|
|
self.assertFalse(comparison)
|
|
self.assertFalse(comparison2)
|
|
self.assertFalse(comparison3)
|
|
|
|
def test_different_circular_objs(self):
|
|
class Cls(object):
|
|
pass
|
|
|
|
obj1 = Cls()
|
|
obj2 = Cls()
|
|
obj1.self = obj1
|
|
obj2.self = {'self': obj2}
|
|
|
|
dct1 = {'one': [1, 2], 'three': 10}
|
|
dct2 = {'one': [1, 2]}
|
|
dct1['self'] = dct1
|
|
dct2['self'] = dct2
|
|
|
|
comparison = utils.is_different(obj1, obj2)
|
|
comparison1 = utils.is_different(dct1, dct2)
|
|
|
|
self.assertTrue(comparison)
|
|
self.assertTrue(comparison1)
|