|  | @@ -3,11 +3,11 @@ from __future__ import with_statement
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import sys
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -from celery.datastructures import ExceptionInfo, LRUCache
 | 
	
		
			
				|  |  | -from celery.datastructures import LimitedSet
 | 
	
		
			
				|  |  | -from celery.datastructures import AttributeDict, DictAttribute
 | 
	
		
			
				|  |  | -from celery.datastructures import ConfigurationView
 | 
	
		
			
				|  |  | +from celery.datastructures import (ExceptionInfo, LRUCache, LimitedSet,
 | 
	
		
			
				|  |  | +                                   AttributeDict, DictAttribute,
 | 
	
		
			
				|  |  | +                                   ConfigurationView, DependencyGraph)
 | 
	
		
			
				|  |  |  from celery.tests.utils import unittest
 | 
	
		
			
				|  |  | +from celery.tests.utils import WhateverIO
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  class Object(object):
 | 
	
	
		
			
				|  | @@ -37,13 +37,15 @@ class test_DictAttribute(unittest.TestCase):
 | 
	
		
			
				|  |  |          self.assertIn("foo", x)
 | 
	
		
			
				|  |  |          self.assertNotIn("bar", x)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    def test_iteritems(self):
 | 
	
		
			
				|  |  | +    def test_items(self):
 | 
	
		
			
				|  |  |          obj = Object()
 | 
	
		
			
				|  |  |          obj.attr1 = 1
 | 
	
		
			
				|  |  |          x = DictAttribute(obj)
 | 
	
		
			
				|  |  |          x["attr2"] = 2
 | 
	
		
			
				|  |  |          self.assertDictEqual(dict(x.iteritems()),
 | 
	
		
			
				|  |  |                               dict(attr1=1, attr2=2))
 | 
	
		
			
				|  |  | +        self.assertDictEqual(dict(x.items()),
 | 
	
		
			
				|  |  | +                             dict(attr1=1, attr2=2))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  class test_ConfigurationView(unittest.TestCase):
 | 
	
	
		
			
				|  | @@ -58,6 +60,17 @@ class test_ConfigurationView(unittest.TestCase):
 | 
	
		
			
				|  |  |          self.assertEqual(self.view.setdefault("both", 36), 2)
 | 
	
		
			
				|  |  |          self.assertEqual(self.view.setdefault("new", 36), 36)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    def test_get(self):
 | 
	
		
			
				|  |  | +        self.assertEqual(self.view.get("both"), 2)
 | 
	
		
			
				|  |  | +        sp = object()
 | 
	
		
			
				|  |  | +        self.assertIs(self.view.get("nonexisting", sp), sp)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def test_update(self):
 | 
	
		
			
				|  |  | +        changes = dict(self.view.changes)
 | 
	
		
			
				|  |  | +        self.view.update(a=1, b=2, c=3)
 | 
	
		
			
				|  |  | +        self.assertDictEqual(self.view.changes,
 | 
	
		
			
				|  |  | +                             dict(changes, a=1, b=2, c=3))
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      def test_contains(self):
 | 
	
		
			
				|  |  |          self.assertIn("changed_key", self.view)
 | 
	
		
			
				|  |  |          self.assertIn("default_key", self.view)
 | 
	
	
		
			
				|  | @@ -72,6 +85,10 @@ class test_ConfigurationView(unittest.TestCase):
 | 
	
		
			
				|  |  |                      "default_key": 1,
 | 
	
		
			
				|  |  |                      "both": 2}
 | 
	
		
			
				|  |  |          self.assertDictEqual(dict(self.view.items()), expected)
 | 
	
		
			
				|  |  | +        self.assertItemsEqual(list(iter(self.view)),
 | 
	
		
			
				|  |  | +                              expected.keys())
 | 
	
		
			
				|  |  | +        self.assertItemsEqual(self.view.keys(), expected.keys())
 | 
	
		
			
				|  |  | +        self.assertItemsEqual(self.view.values(), expected.values())
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  class test_ExceptionInfo(unittest.TestCase):
 | 
	
	
		
			
				|  | @@ -123,6 +140,34 @@ class test_LimitedSet(unittest.TestCase):
 | 
	
		
			
				|  |  |              s.add(item)
 | 
	
		
			
				|  |  |          self.assertIn("LimitedSet(", repr(s))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    def test_clear(self):
 | 
	
		
			
				|  |  | +        s = LimitedSet(maxlen=2)
 | 
	
		
			
				|  |  | +        s.add("foo")
 | 
	
		
			
				|  |  | +        s.add("bar")
 | 
	
		
			
				|  |  | +        self.assertEqual(len(s), 2)
 | 
	
		
			
				|  |  | +        s.clear()
 | 
	
		
			
				|  |  | +        self.assertFalse(s)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def test_update(self):
 | 
	
		
			
				|  |  | +        s1 = LimitedSet(maxlen=2)
 | 
	
		
			
				|  |  | +        s1.add("foo")
 | 
	
		
			
				|  |  | +        s1.add("bar")
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        s2 = LimitedSet(maxlen=2)
 | 
	
		
			
				|  |  | +        s2.update(s1)
 | 
	
		
			
				|  |  | +        self.assertItemsEqual(list(s2), ["foo", "bar"])
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        s2.update(["bla"])
 | 
	
		
			
				|  |  | +        self.assertItemsEqual(list(s2), ["bla", "bar"])
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        s2.update(["do", "re"])
 | 
	
		
			
				|  |  | +        self.assertItemsEqual(list(s2), ["do", "re"])
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def test_as_dict(self):
 | 
	
		
			
				|  |  | +        s = LimitedSet(maxlen=2)
 | 
	
		
			
				|  |  | +        s.add("foo")
 | 
	
		
			
				|  |  | +        self.assertIsInstance(s.as_dict(), dict)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  class test_LRUCache(unittest.TestCase):
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -195,6 +240,11 @@ class test_LRUCache(unittest.TestCase):
 | 
	
		
			
				|  |  |      def test_safe_to_remove_while_itervalues(self):
 | 
	
		
			
				|  |  |          self.assertSafeIter("itervalues")
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    def test_items(self):
 | 
	
		
			
				|  |  | +        c = LRUCache()
 | 
	
		
			
				|  |  | +        c.update(a=1, b=2, c=3)
 | 
	
		
			
				|  |  | +        self.assertTrue(c.items())
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  class test_AttributeDict(unittest.TestCase):
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -205,3 +255,42 @@ class test_AttributeDict(unittest.TestCase):
 | 
	
		
			
				|  |  |              x.bar
 | 
	
		
			
				|  |  |          x.bar = "foo"
 | 
	
		
			
				|  |  |          self.assertEqual(x["bar"], "foo")
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +class test_DependencyGraph(unittest.TestCase):
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def graph1(self):
 | 
	
		
			
				|  |  | +        return DependencyGraph([
 | 
	
		
			
				|  |  | +            ("A", []),
 | 
	
		
			
				|  |  | +            ("B", []),
 | 
	
		
			
				|  |  | +            ("C", ["A"]),
 | 
	
		
			
				|  |  | +            ("D", ["C", "B"])
 | 
	
		
			
				|  |  | +        ])
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def test_repr(self):
 | 
	
		
			
				|  |  | +        self.assertTrue(repr(self.graph1()))
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def test_topsort(self):
 | 
	
		
			
				|  |  | +        order = self.graph1().topsort()
 | 
	
		
			
				|  |  | +        print("ORDER: %r" % (order, ))
 | 
	
		
			
				|  |  | +        # C must start before D
 | 
	
		
			
				|  |  | +        self.assertLess(order.index("C"), order.index("D"))
 | 
	
		
			
				|  |  | +        # and B must start before D
 | 
	
		
			
				|  |  | +        self.assertLess(order.index("B"), order.index("D"))
 | 
	
		
			
				|  |  | +        # and A must start before C
 | 
	
		
			
				|  |  | +        self.assertLess(order.index("A"), order.index("C"))
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def test_edges(self):
 | 
	
		
			
				|  |  | +        self.assertListEqual(list(self.graph1().edges()),
 | 
	
		
			
				|  |  | +                             ["C", "D"])
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def test_items(self):
 | 
	
		
			
				|  |  | +        self.assertDictEqual(dict(self.graph1().items()),
 | 
	
		
			
				|  |  | +                {"A": [], "B": [],
 | 
	
		
			
				|  |  | +                 "C": ["A"], "D": ["C", "B"]})
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def test_to_dot(self):
 | 
	
		
			
				|  |  | +        s = WhateverIO()
 | 
	
		
			
				|  |  | +        self.graph1().to_dot(s)
 | 
	
		
			
				|  |  | +        self.assertTrue(s.getvalue())
 | 
	
		
			
				|  |  | +
 |