class TestSequenceKey(TankTestBase): def setUp(self): super(TestSequenceKey, self).setUp() self.seq_field = SequenceKey("field_name") def test_framespec_no_format(self): seq_field = SequenceKey("field_name") expected_frame_specs = set(["%d", "#", "@", "$F"]) self.assertEquals(expected_frame_specs, set(seq_field._frame_specs)) def test_framspec_short_format(self): format_spec = "02" expected_frame_specs = set(["%02d", "##", "@@", "$F2"]) seq_field = SequenceKey("field_name", format_spec=format_spec) self.assertEquals(expected_frame_specs, set(seq_field._frame_specs)) def test_framespec_long_format(self): format_spec = "010" seq_field = SequenceKey("field_name", format_spec=format_spec) expected_frame_specs = set( ["%010d", "@@@@@@@@@@", "##########", "$F10"]) self.assertEquals(expected_frame_specs, set(seq_field._frame_specs)) def test_validate_good(self): good_values = copy.copy(self.seq_field._frame_specs) good_values.extend(["FORMAT:%d", "FORMAT:#", "FORMAT:@", "FORMAT:$F"]) good_values.extend( ["FORMAT: %d", "FORMAT: #", "FORMAT: @", "FORMAT: $F"]) good_values.extend(["243", "0123"]) for good_value in good_values: self.assertTrue(self.seq_field.validate(good_value)) def test_validate_bad(self): bad_values = ["a", "$G", "23d"] for bad_value in bad_values: self.assertFalse(self.seq_field.validate(bad_value)) def test_value_from_str(self): # note - default case means frame spec is 01 valid_str_values = { "12": 12, "0": 0, "%d": "%d", "#": "#", "@": "@", "$F": "$F" } for str_value, expected_value in valid_str_values.items(): self.assertEquals(expected_value, self.seq_field.value_from_str(str_value)) def test_str_from_value_good(self): # note - default case means frame spec is 01 valid_value_strs = { 12: "12", 0: "0", "%d": "%d", "#": "#", "@": "@", "$F": "$F" } for value, str_value in valid_value_strs.items(): self.assertEquals(str_value, self.seq_field.str_from_value(value)) def test_str_from_value_bad(self): value = "a" expected = "%s Illegal value '%s', expected an Integer, a frame spec or format spec." % ( str(self.seq_field), value) expected += "\nValid frame specs: ['%d', '#', '@', '$F']" expected += "\nValid format strings: ['FORMAT: %d', 'FORMAT: #', 'FORMAT: @', 'FORMAT: $F']\n" self.check_error_message(TankError, expected, self.seq_field.str_from_value, value) def test_str_from_value_formatted(self): formatted_field = SequenceKey("field_name", format_spec="03") value = 3 expected = "%03d" % value result = formatted_field.str_from_value(value) self.assertEquals(expected, result) def test_str_from_value_ignore_type(self): value = "a" expected = value result = self.seq_field.str_from_value(value, ignore_type=True) self.assertEquals(expected, result) def test_str_from_value_default_one(self): """ default frame spec value can be returned, frame spec with one place has special cases. """ value = None seq_field = SequenceKey("field_name") expected = "%d" result = seq_field.str_from_value(value="FORMAT:%d") self.assertEquals(expected, result) expected = "#" result = seq_field.str_from_value(value="FORMAT:#") self.assertEquals(expected, result) expected = "@" result = seq_field.str_from_value(value="FORMAT:@") self.assertEquals(expected, result) expected = "$F" result = seq_field.str_from_value(value="FORMAT:$F") self.assertEquals(expected, result) # no pattern specified expected = "%d" result = seq_field.str_from_value() self.assertEquals(expected, result) def test_str_from_value_default_three(self): """ Test default frame spec value returned for framespec with more than one places. """ seq_field = SequenceKey("field_name", format_spec="03") expected = "%03d" result = seq_field.str_from_value("FORMAT:%d") self.assertEquals(expected, result) expected = "###" result = seq_field.str_from_value("FORMAT:#") self.assertEquals(expected, result) expected = "@@@" result = seq_field.str_from_value("FORMAT:@") self.assertEquals(expected, result) expected = "$F3" result = seq_field.str_from_value("FORMAT:$F") self.assertEquals(expected, result) # no pattern specified expected = "%03d" result = seq_field.str_from_value() self.assertEquals(expected, result) def test_str_from_value_format_whitespace(self): """Use of FORMAT: prefix with whitespace.""" seq_field = SequenceKey("field_name", format_spec="03") expected = "%03d" result = seq_field.str_from_value("FORMAT: %d") self.assertEquals(expected, result) expected = "###" result = seq_field.str_from_value("FORMAT: #") self.assertEquals(expected, result) expected = "@@@" result = seq_field.str_from_value("FORMAT: @") self.assertEquals(expected, result) expected = "$F3" result = seq_field.str_from_value("FORMAT: $F") self.assertEquals(expected, result) def test_default_int(self): default = 13 seq_frame = SequenceKey("field_name", default=default) self.assertEquals(default, seq_frame.default) def test_default_frame_spec(self): frame_specs = set(["%d", "#", "@", "$F"]) for frame_spec in frame_specs: seq_frame = SequenceKey("field_name", default=frame_spec) self.assertEquals(frame_spec, seq_frame.default) def test_default_frame_spec_choices(self): frame_specs = set(["%d", "#", "@", "$F"]) for frame_spec in frame_specs: seq_frame = SequenceKey("field_name", default=frame_spec, choices=[1, 2]) self.assertEquals(frame_spec, seq_frame.default) def test_default_bad(self): default = "bad default" self.assertRaises(TankError, SequenceKey, "field_name", default=default) def test_choices_int(self): choices = [1] seq_frame = SequenceKey("field_name", choices=choices) self.assertEquals(choices, seq_frame.choices) def test_choices_frame_spec(self): frame_specs = set(["%d", "#", "@", "$F"]) seq_frame = SequenceKey("field_name", choices=frame_specs) self.assertEquals(frame_specs, seq_frame.choices)
class TestSequenceKey(TankTestBase): def setUp(self): super(TestSequenceKey, self).setUp() self.seq_field = SequenceKey("field_name") def test_framespec_no_format(self): seq_field = SequenceKey("field_name") expected_frame_specs = set(["%d", "#", "@", "$F"]) self.assertEquals(expected_frame_specs, set(seq_field._frame_specs)) def test_framspec_short_format(self): format_spec = "02" expected_frame_specs = set(["%02d", "##", "@@", "$F2"]) seq_field = SequenceKey("field_name", format_spec=format_spec) self.assertEquals(expected_frame_specs, set(seq_field._frame_specs)) def test_framespec_long_format(self): format_spec = "010" seq_field = SequenceKey("field_name", format_spec=format_spec) expected_frame_specs = set(["%010d", "@@@@@@@@@@", "##########", "$F10"]) self.assertEquals(expected_frame_specs, set(seq_field._frame_specs)) def test_validate_good(self): good_values = copy.copy(self.seq_field._frame_specs) good_values.extend(["FORMAT:%d", "FORMAT:#", "FORMAT:@", "FORMAT:$F"]) good_values.extend(["FORMAT: %d", "FORMAT: #", "FORMAT: @", "FORMAT: $F"]) good_values.extend(["243", "0123"]) for good_value in good_values: self.assertTrue(self.seq_field.validate(good_value)) def test_validate_bad(self): bad_values = ["a", "$G", "23d"] for bad_value in bad_values: self.assertFalse(self.seq_field.validate(bad_value)) def test_value_from_str(self): # note - default case means frame spec is 01 valid_str_values = {"12":12, "0":0, "%d":"%d", "#":"#", "@":"@", "$F":"$F"} for str_value, expected_value in valid_str_values.items(): self.assertEquals(expected_value, self.seq_field.value_from_str(str_value)) def test_str_from_value_good(self): # note - default case means frame spec is 01 valid_value_strs = {12:"12", 0:"0", "%d":"%d", "#":"#", "@":"@", "$F":"$F"} for value, str_value in valid_value_strs.items(): self.assertEquals(str_value, self.seq_field.str_from_value(value)) def test_str_from_value_bad(self): value = "a" expected = "%s Illegal value '%s', expected an Integer, a frame spec or format spec." % (str(self.seq_field), value) expected += "\nValid frame specs: ['%d', '#', '@', '$F']" expected += "\nValid format strings: ['FORMAT: %d', 'FORMAT: #', 'FORMAT: @', 'FORMAT: $F']\n" self.check_error_message(TankError, expected, self.seq_field.str_from_value, value) def test_str_from_value_formatted(self): formatted_field = SequenceKey("field_name", format_spec="03") value = 3 expected = "%03d" % value result = formatted_field.str_from_value(value) self.assertEquals(expected, result) def test_str_from_value_ignore_type(self): value = "a" expected = value result = self.seq_field.str_from_value(value, ignore_type=True) self.assertEquals(expected, result) def test_str_from_value_default_one(self): """ default frame spec value can be returned, frame spec with one place has special cases. """ value = None seq_field = SequenceKey("field_name") expected = "%d" result = seq_field.str_from_value(value="FORMAT:%d") self.assertEquals(expected, result) expected = "#" result = seq_field.str_from_value(value="FORMAT:#") self.assertEquals(expected, result) expected = "@" result = seq_field.str_from_value(value="FORMAT:@") self.assertEquals(expected, result) expected = "$F" result = seq_field.str_from_value(value="FORMAT:$F") self.assertEquals(expected, result) # no pattern specified expected = "%d" result = seq_field.str_from_value() self.assertEquals(expected, result) def test_str_from_value_default_three(self): """ Test default frame spec value returned for framespec with more than one places. """ seq_field = SequenceKey("field_name", format_spec="03") expected = "%03d" result = seq_field.str_from_value("FORMAT:%d") self.assertEquals(expected, result) expected = "###" result = seq_field.str_from_value("FORMAT:#") self.assertEquals(expected, result) expected = "@@@" result = seq_field.str_from_value("FORMAT:@") self.assertEquals(expected, result) expected = "$F3" result = seq_field.str_from_value("FORMAT:$F") self.assertEquals(expected, result) # no pattern specified expected = "%03d" result = seq_field.str_from_value() self.assertEquals(expected, result) def test_str_from_value_format_whitespace(self): """Use of FORMAT: prefix with whitespace.""" seq_field = SequenceKey("field_name", format_spec="03") expected = "%03d" result = seq_field.str_from_value("FORMAT: %d") self.assertEquals(expected, result) expected = "###" result = seq_field.str_from_value("FORMAT: #") self.assertEquals(expected, result) expected = "@@@" result = seq_field.str_from_value("FORMAT: @") self.assertEquals(expected, result) expected = "$F3" result = seq_field.str_from_value("FORMAT: $F") self.assertEquals(expected, result) def test_default_int(self): default = 13 seq_frame = SequenceKey("field_name", default=default) self.assertEquals(default, seq_frame.default) def test_default_frame_spec(self): frame_specs = set(["%d", "#", "@", "$F"]) for frame_spec in frame_specs: seq_frame = SequenceKey("field_name", default=frame_spec) self.assertEquals(frame_spec, seq_frame.default) def test_default_frame_spec_choices(self): frame_specs = set(["%d", "#", "@", "$F"]) for frame_spec in frame_specs: seq_frame = SequenceKey("field_name", default=frame_spec, choices=[1,2]) self.assertEquals(frame_spec, seq_frame.default) def test_default_bad(self): default = "bad default" self.assertRaises(TankError, SequenceKey, "field_name", default=default) def test_choices_int(self): choices = [1] seq_frame = SequenceKey("field_name", choices=choices) self.assertEquals(choices, seq_frame.choices) def test_choices_frame_spec(self): frame_specs = set(["%d", "#", "@", "$F"]) seq_frame = SequenceKey("field_name", choices=frame_specs) self.assertEquals(frame_specs, seq_frame.choices)