Beispiel #1
0
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)
Beispiel #2
0
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)