def test_invalid_values(self):
        data = ["foo", "bar", "foo2"]
        value = ",".join(data)
        invalid = ["bar", "foo2"]

        field = MultipleValuesCharField(invalid_values=invalid)
        with pytest.raises(forms.ValidationError):
            field.clean(value)
    def test_disregard_empty(self):
        value = "foo,,    ,bar,"
        true_expected = ["foo", "    ", "bar"]
        false_expected = ["foo", "", "    ", "bar", ""]

        field = MultipleValuesCharField(disregard_empty=True, strip=False)
        assert field.clean(value) == true_expected

        field = MultipleValuesCharField(disregard_empty=False, strip=False)
        assert field.clean(value) == false_expected
    def test_strip(self):
        data = ["foo", "bar", "foo2   ", "   bar2"]
        true_expected = [i.strip() for i in data]
        false_expected = data
        value = ",".join(data)

        field = MultipleValuesCharField(strip=True)
        assert field.clean(value) == true_expected

        field = MultipleValuesCharField(strip=False)
        assert field.clean(value) == false_expected
    def test_delimiter(self):
        delimiters = [",", ";", ":"]
        data = ["foo", "bar", "foo2", "bar2"]
        for i in delimiters:
            field = MultipleValuesCharField(delimiter=i)
            value = i.join(data)
            assert field.clean(value) == data

        delimiter = re.compile("\W+")
        data = "hello world, how  are you?"
        expected = ["hello", "world", "how", "are", "you"]
        field = MultipleValuesCharField(delimiter=delimiter)
        assert field.clean(data) == expected
    def test_mapping(self):
        mapping = {"1": 1}

        def mapping_callable(value):
            if value == "1":
                return 1
            else:
                return value

        data = ["foo", "1", "bar"]
        expected = ["foo", 1, "bar"]
        value = ",".join(data)

        field = MultipleValuesCharField(mapping=mapping)
        assert field.clean(value) == expected

        field = MultipleValuesCharField(mapping=mapping_callable)
        assert field.clean(value) == expected

        field = MultipleValuesCharField(mapping=int)
        expected = random.sample(six.moves.range(100000), 5)
        value = ",".join([six.text_type(i) for i in expected])
        assert field.clean(value) == expected

        with pytest.raises(forms.ValidationError):
            field.clean("foo")
    def test_min_values(self):
        expected = ["foo", "bar", "foo2", "bar2"]
        data = ",".join(expected)

        field = MultipleValuesCharField(min_values=10)
        with pytest.raises(forms.ValidationError):
            field.clean(data)
        with pytest.raises(forms.ValidationError):
            field.clean("")

        field = MultipleValuesCharField(min_length=2)
        assert field.clean(data) == expected

        field = MultipleValuesCharField(min_length=2, required=False)
        assert field.clean("") == []
 def test_prepare_value(self):
     field = MultipleValuesCharField()
     assert field.prepare_value("foo") == "foo"
     assert field.prepare_value(["foo", "bar"]) == "foo,bar"
 def test_empty(self):
     field = MultipleValuesCharField(required=False)
     data = ["", None]
     for d in data:
         assert field.clean(d) == []