#!/usr/bin/python
#
-# Copyright (C) 2010, 2011 Google Inc.
+# Copyright (C) 2010, 2011, 2012 Google Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
{"dry_run": False, "debug_level": 0, },
# All variables
- dict([(name, False) for name in cls._all_slots()])
+ dict([(name, []) for name in cls.GetAllSlots()])
]
for i in args:
self._checkSummary(restored)
for name in ["x_y_z", "hello_world"]:
- assert name not in cls._all_slots()
+ assert name not in cls.GetAllSlots()
for value in [None, True, False, [], "Hello World"]:
self.assertRaises(AttributeError, setattr, op, name, value)
self.assertTrue(opcodes.OpCode not in opcodes.OP_MAPPING.values())
for cls in opcodes.OP_MAPPING.values() + [opcodes.OpCode]:
- all_slots = cls._all_slots()
+ all_slots = cls.GetAllSlots()
self.assertEqual(len(set(all_slots) & supported_by_all), 3,
msg=("Opcode %s doesn't support all base"
self.assertTrue(doc is None or isinstance(doc, basestring))
if callable(aval):
- self.assertFalse(callable(aval()),
- msg="Default value returned by function is callable")
+ default_value = aval()
+ self.assertFalse(callable(default_value),
+ msg=("Default value of %s.%s returned by function"
+ " is callable" % (cls.OP_ID, attr_name)))
+ else:
+ self.assertFalse(isinstance(aval, (list, dict, set)),
+ msg=("Default value of %s.%s is mutable (%s)" %
+ (cls.OP_ID, attr_name, repr(aval))))
+
+ default_value = aval
+
+ if aval is not ht.NoDefault and test is not ht.NoType:
+ self.assertTrue(test(default_value),
+ msg=("Default value of %s.%s does not verify" %
+ (cls.OP_ID, attr_name)))
# If any parameter has documentation, all others need to have it as well
has_doc = [doc is not None for (_, _, _, doc) in cls.OP_PARAMS]
self.assertEqual(op.value2, "world")
self.assertEqual(op.debug_level, 123)
+ def testOpInstanceMultiAlloc(self):
+ inst = dict([(name, []) for name in opcodes.OpInstanceCreate.GetAllSlots()])
+ inst_op = opcodes.OpInstanceCreate(**inst)
+ inst_state = inst_op.__getstate__()
+
+ multialloc = opcodes.OpInstanceMultiAlloc(instances=[inst_op])
+ state = multialloc.__getstate__()
+ self.assertEquals(state["instances"], [inst_state])
+ loaded_multialloc = opcodes.OpCode.LoadOpCode(state)
+ (loaded_inst,) = loaded_multialloc.instances
+ self.assertNotEquals(loaded_inst, inst_op)
+ self.assertEquals(loaded_inst.__getstate__(), inst_state)
+
class TestOpcodeDepends(unittest.TestCase):
def test(self):