import unittest

from util.algorithm import *

class algorithm(unittest.TestCase):
    def setUp(self):
        self.someData = {'a': 100, 'b': 200, 'c': [1,2,3]}
        self.differentData = {'x': 20, 'y': 'bla', 'z': ['a','b']}
        self.moreData = {'n': 100}
        self.overlapData = {'a': 200, 'c': [1,2,4]}

    def test_merge_with_empty(self):
        self.assertEqual(self.someData, merge(self.someData, {}))
        self.assertEqual(None, merge(self.someData, None))

    def test_merge_no_overwrite(self):
        result = merge(self.someData, self.differentData)
        for k in self.someData:
            self.assertEqual(result[k], self.someData[k])
        for k in self.differentData:
            self.assertEqual(result[k], self.differentData[k])

    def test_merge_multiple(self):
        result = merge(self.someData, self.differentData, self.moreData)
        for k in self.someData:
            self.assertEqual(result[k], self.someData[k])
        for k in self.differentData:
            self.assertEqual(result[k], self.differentData[k])
        for k in self.moreData:
            self.assertEqual(result[k], self.moreData[k])

    def merge_overlap(self):
        result = merge(self.someData, self.overlapData)
        for k in self.someData:
            if not k in self.overlapData:
                self.assertEqual(result[k], self.someData[k])
        for k in self.overlapData:
            self.assertEqual(result[k], self.overlapData[k])

# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4