def test_with_various_name_prefixes(self): no_prefix = Flip() self.assertEqual(no_prefix.__class__.__name__, "Flip") self.assert_orignal_equals_pickled(no_prefix) default_prefix = st.FlipTransformer()(axl.Cooperator)() self.assertEqual(default_prefix.__class__.__name__, "FlippedCooperator") self.assert_orignal_equals_pickled(default_prefix) fliptastic = st.FlipTransformer(name_prefix="Fliptastic") new_prefix = fliptastic(axl.Cooperator)() self.assertEqual(new_prefix.__class__.__name__, "FliptasticCooperator") self.assert_orignal_equals_pickled(new_prefix)
def test_local_class_unpicklable(self): """An unpickle-able AND transformed class will not raise an error until it is un-pickled. This is different from the original class that raises an error when it is pickled.""" class LocalCooperator(axl.Cooperator): pass un_transformed = LocalCooperator() self.assertRaises(AttributeError, pickle.dumps, un_transformed) player = st.FlipTransformer()(LocalCooperator)() pickled = pickle.dumps(player) self.assertRaises(AttributeError, pickle.loads, pickled)
def test_dynamic_class_no_name_prefix(self): player = st.FlipTransformer(name_prefix=None)(axl.Cooperator)() self.assertEqual(player.__class__.__name__, "Cooperator") self.assert_orignal_equals_pickled(player)
def test_created_on_the_spot_multiple_transformers(self): player_class = st.FlipTransformer()(axl.Cooperator) player_class = st.DualTransformer()(player_class) player = st.FinalTransformer((C, D))(player_class)() self.assert_orignal_equals_pickled(player)
import pickle import unittest import axelrod as axl import axelrod.strategy_transformers as st C, D = axl.Action.C, axl.Action.D # A set of classes to test pickling. # First set: special cases PointerToWrappedStrategy = st.FlipTransformer()(st.FlipTransformer()(axl.Cooperator)) class MyDefector(axl.Player): def __init__(self): super(MyDefector, self).__init__() def strategy(self, opponent): return D PointerToWrappedClassNotInStrategies = st.FlipTransformer()( st.FlipTransformer()(MyDefector) ) @st.InitialTransformer((D, C, D), name_prefix=None) @st.DualTransformer(name_prefix=None)