aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/resources/ResourceNameValidatorTest.java
blob: 2cc2c932c6288edccc375b1c9b28d2016ece49c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/*
 * Copyright (C) 2010 The Android Open Source Project
 *
 * Licensed under the Eclipse Public License, Version 1.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.eclipse.org/org/documents/epl-v10.php
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.ide.eclipse.adt.internal.resources;

import com.android.resources.ResourceFolderType;
import com.android.resources.ResourceType;

import org.eclipse.core.resources.IProject;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

import junit.framework.TestCase;

@SuppressWarnings("javadoc")
public class ResourceNameValidatorTest extends TestCase {
    public void testValidator() throws Exception {
        // Valid
        ResourceNameValidator validator = ResourceNameValidator.create(true,
                ResourceFolderType.VALUES);
        assertTrue(validator.isValid("foo") == null);
        assertTrue(validator.isValid("foo.xml") == null);
        assertTrue(validator.isValid("Foo123_$") == null);
        assertTrue(validator.isValid("foo.xm") == null); // For non-file types, . => _

        // Invalid
        assertTrue(validator.isValid("") != null);
        assertTrue(validator.isValid(" ") != null);
        assertTrue(validator.isValid("foo bar") != null);
        assertTrue(validator.isValid("1foo") != null);
        assertTrue(validator.isValid("foo%bar") != null);
        assertTrue(ResourceNameValidator.create(true, Collections.singleton("foo"),
                ResourceType.STRING).isValid("foo") != null);
        assertTrue(ResourceNameValidator.create(true,
                ResourceFolderType.DRAWABLE).isValid("foo.xm") != null);
        assertTrue(ResourceNameValidator.create(false,
                ResourceFolderType.DRAWABLE).isValid("foo.xm") != null);

        // Only lowercase chars allowed in file-based resource names
        assertTrue(ResourceNameValidator.create(true, ResourceFolderType.LAYOUT)
                .isValid("Foo123_$") != null);
        assertTrue(ResourceNameValidator.create(true, ResourceFolderType.LAYOUT)
                .isValid("foo123_") == null);

        // Can't start with _ in file-based resource names, is okay for value based resources
        assertTrue(ResourceNameValidator.create(true, ResourceFolderType.VALUES)
                .isValid("_foo") == null);
        assertTrue(ResourceNameValidator.create(true, ResourceFolderType.LAYOUT)
                .isValid("_foo") != null);
        assertTrue(ResourceNameValidator.create(true, ResourceFolderType.DRAWABLE)
                .isValid("_foo") != null);
    }

    public void testIds() throws Exception {
        ResourceNameValidator validator = ResourceNameValidator.create(false, (IProject) null,
                ResourceType.ID);
        assertTrue(validator.isValid("foo") == null);
        assertTrue(validator.isValid(" foo") != null);
        assertTrue(validator.isValid("foo ") != null);
        assertTrue(validator.isValid("foo@") != null);
    }

    public void testUniqueOrExists() throws Exception {
        Set<String> existing = new HashSet<String>();
        existing.add("foo1");
        existing.add("foo2");
        existing.add("foo3");

        ResourceNameValidator validator = ResourceNameValidator.create(true, existing,
                ResourceType.ID);
        validator.unique();

        assertNull(validator.isValid("foo")); // null: ok (no error message)
        assertNull(validator.isValid("foo4"));
        assertNotNull(validator.isValid("foo1"));
        assertNotNull(validator.isValid("foo2"));
        assertNotNull(validator.isValid("foo3"));

        validator.exist();
        assertNotNull(validator.isValid("foo"));
        assertNotNull(validator.isValid("foo4"));
        assertNull(validator.isValid("foo1"));
        assertNull(validator.isValid("foo2"));
        assertNull(validator.isValid("foo3"));
    }
}