aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/resources/manager/ConfigMatchTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/resources/manager/ConfigMatchTest.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/resources/manager/ConfigMatchTest.java297
1 files changed, 297 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/resources/manager/ConfigMatchTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/resources/manager/ConfigMatchTest.java
new file mode 100644
index 000000000..a6da135b6
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/resources/manager/ConfigMatchTest.java
@@ -0,0 +1,297 @@
+/*
+ * Copyright (C) 2008 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.editors.resources.manager;
+
+import com.android.SdkConstants;
+import com.android.ide.common.resources.ResourceFile;
+import com.android.ide.common.resources.ResourceFolder;
+import com.android.ide.common.resources.ResourceItem;
+import com.android.ide.common.resources.ResourceRepository;
+import com.android.ide.common.resources.SingleResourceFile;
+import com.android.ide.common.resources.configuration.FolderConfiguration;
+import com.android.ide.eclipse.adt.internal.resources.manager.ProjectResources;
+import com.android.ide.eclipse.adt.io.IFileWrapper;
+import com.android.ide.eclipse.adt.io.IFolderWrapper;
+import com.android.ide.eclipse.mock.Mocks;
+import com.android.io.IAbstractFolder;
+import com.android.io.IAbstractResource;
+import com.android.resources.Keyboard;
+import com.android.resources.KeyboardState;
+import com.android.resources.Navigation;
+import com.android.resources.NavigationState;
+import com.android.resources.NightMode;
+import com.android.resources.ResourceFolderType;
+import com.android.resources.ScreenOrientation;
+import com.android.resources.TouchScreen;
+import com.android.resources.UiMode;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+
+import junit.framework.TestCase;
+
+public class ConfigMatchTest extends TestCase {
+ private static final String SEARCHED_FILENAME = "main.xml"; //$NON-NLS-1$
+ private static final String MISC1_FILENAME = "foo.xml"; //$NON-NLS-1$
+ private static final String MISC2_FILENAME = "bar.xml"; //$NON-NLS-1$
+
+ private FolderConfiguration mDefaultConfig;
+ private ResourceRepository mResources;
+ private FolderConfiguration config4;
+ private FolderConfiguration config3;
+ private FolderConfiguration config2;
+ private FolderConfiguration config1;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ // create a default config with all qualifiers.
+ mDefaultConfig = new FolderConfiguration();
+ mDefaultConfig.createDefault();
+
+ IAbstractFolder folder = Mocks.createAbstractFolder(
+ SdkConstants.FD_RESOURCES, new IAbstractResource[0]);
+
+ // create the project resources.
+ mResources = new ResourceRepository(folder, false) {
+ @Override
+ protected ResourceItem createResourceItem(String name) {
+ return new ResourceItem(name);
+ }
+ };
+
+ // create 2 arrays of IResource. one with the filename being looked up, and one without.
+ // Since the required API uses IResource, we can use MockFolder for them.
+ IFile[] validMemberList = new IFile[] {
+ Mocks.createFile(MISC1_FILENAME),
+ Mocks.createFile(SEARCHED_FILENAME),
+ Mocks.createFile(MISC2_FILENAME),
+ };
+ IFile[] invalidMemberList = new IFile[] {
+ Mocks.createFile(MISC1_FILENAME),
+ Mocks.createFile(MISC2_FILENAME),
+ };
+
+ // add multiple ResourceFolder to the project resource.
+ FolderConfiguration defaultConfig = getConfiguration(
+ null, // country code
+ null, // network code
+ null, // language
+ null, // region
+ null, // smallest width dp
+ null, // width dp
+ null, // height dp
+ null, // screen size
+ null, // screen ratio
+ null, // screen orientation
+ null, // dock mode
+ null, // night mode
+ null, // dpi
+ null, // touch mode
+ null, // keyboard state
+ null, // text input
+ null, // navigation state
+ null, // navigation method
+ null, // screen dimension
+ null);// version
+
+ addFolder(mResources, defaultConfig, validMemberList);
+
+ config1 = getConfiguration(
+ null, // country code
+ null, // network code
+ "en", // language
+ null, // region
+ null, // smallest width dp
+ null, // width dp
+ null, // height dp
+ null, // screen size
+ null, // screen ratio
+ null, // screen orientation
+ null, // dock mode
+ null, // night mode
+ null, // dpi
+ null, // touch mode
+ KeyboardState.EXPOSED.getResourceValue(), // keyboard state
+ null, // text input
+ null, // navigation state
+ null, // navigation method
+ null, // screen dimension
+ null);// version
+
+ addFolder(mResources, config1, validMemberList);
+
+ config2 = getConfiguration(
+ null, // country code
+ null, // network code
+ "en", // language
+ null, // region
+ null, // smallest width dp
+ null, // width dp
+ null, // height dp
+ null, // screen size
+ null, // screen ratio
+ null, // screen orientation
+ null, // dock mode
+ null, // night mode
+ null, // dpi
+ null, // touch mode
+ KeyboardState.HIDDEN.getResourceValue(), // keyboard state
+ null, // text input
+ null, // navigation state
+ null, // navigation method
+ null, // screen dimension
+ null);// version
+
+ addFolder(mResources, config2, validMemberList);
+
+ config3 = getConfiguration(
+ null, // country code
+ null, // network code
+ "en", // language
+ null, // region
+ null, // smallest width dp
+ null, // width dp
+ null, // height dp
+ null, // screen size
+ null, // screen ratio
+ ScreenOrientation.LANDSCAPE.getResourceValue(), // screen orientation
+ null, // dock mode
+ null, // night mode
+ null, // dpi
+ null, // touch mode
+ null, // keyboard state
+ null, // text input
+ null, // navigation state
+ null, // navigation method
+ null, // screen dimension
+ null);// version
+
+ addFolder(mResources, config3, validMemberList);
+
+ config4 = getConfiguration(
+ "mcc310", // country code
+ "mnc435", // network code
+ "en", // language
+ "rUS", // region
+ null, // smallest width dp
+ null, // width dp
+ null, // height dp
+ "normal", // screen size
+ "notlong", // screen ratio
+ ScreenOrientation.LANDSCAPE.getResourceValue(), // screen orientation
+ UiMode.DESK.getResourceValue(), // dock mode
+ NightMode.NIGHT.getResourceValue(), // night mode
+ "mdpi", // dpi
+ TouchScreen.FINGER.getResourceValue(), // touch mode
+ KeyboardState.EXPOSED.getResourceValue(), // keyboard state
+ Keyboard.QWERTY.getResourceValue(), // text input
+ NavigationState.EXPOSED.getResourceValue(), // navigation state
+ Navigation.DPAD.getResourceValue(), // navigation method
+ "480x320", // screen dimension
+ "v3"); // version
+
+ addFolder(mResources, config4, invalidMemberList);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ mResources = null;
+ }
+
+ public void test1() {
+ FolderConfiguration testConfig = getConfiguration(
+ "mcc310", // country code
+ "mnc435", // network code
+ "en", // language
+ "rUS", // region
+ null, // smallest width dp
+ null, // width dp
+ null, // height dp
+ "normal", // screen size
+ "notlong", // screen ratio
+ ScreenOrientation.LANDSCAPE.getResourceValue(), // screen orientation
+ UiMode.DESK.getResourceValue(), // dock mode
+ NightMode.NIGHT.getResourceValue(), // night mode
+ "mdpi", // dpi
+ TouchScreen.FINGER.getResourceValue(), // touch mode
+ KeyboardState.EXPOSED.getResourceValue(), // keyboard state
+ Keyboard.QWERTY.getResourceValue(), // text input
+ NavigationState.EXPOSED.getResourceValue(), // navigation state
+ Navigation.DPAD.getResourceValue(), // navigation method
+ "480x320", // screen dimension
+ "v3"); // version
+
+ ResourceFile result = mResources.getMatchingFile(SEARCHED_FILENAME,
+ ResourceFolderType.LAYOUT, testConfig);
+
+ boolean bresult = result.getFolder().getConfiguration().equals(config3);
+ assertEquals(bresult, true);
+ }
+
+ /**
+ * Creates a {@link FolderConfiguration}.
+ * @param qualifierValues The list of qualifier values. The length must equals the total number
+ * of Qualifiers. <code>null</code> is permitted and will make the FolderConfiguration not use
+ * this particular qualifier.
+ */
+ private FolderConfiguration getConfiguration(String... qualifierValues) {
+ // FolderConfiguration.getQualifierCount is always valid and up to date.
+ final int count = FolderConfiguration.getQualifierCount();
+
+ // Check we have the right number of qualifier.
+ assertEquals(qualifierValues.length, count);
+
+ FolderConfiguration config = new FolderConfiguration();
+
+ for (int i = 0 ; i < count ; i++) {
+ String value = qualifierValues[i];
+ if (value != null) {
+ assertTrue(mDefaultConfig.getQualifier(i).checkAndSet(value, config));
+ }
+ }
+
+ return config;
+ }
+
+ /**
+ * Adds a folder to the given {@link ProjectResources} with the given
+ * {@link FolderConfiguration}. The folder is filled with files from the provided list.
+ * @param resources the {@link ResourceRepository} in which to add the folder.
+ * @param config the {@link FolderConfiguration} for the created folder.
+ * @param memberList the list of files for the folder.
+ */
+ private void addFolder(ResourceRepository resources, FolderConfiguration config,
+ IFile[] memberList) throws Exception {
+
+ // figure out the folder name based on the configuration
+ String folderName = config.getFolderName(ResourceFolderType.LAYOUT);
+
+ // create the folder mock
+ IFolder folder = Mocks.createFolder(folderName, memberList);
+
+ // add it to the resource, and get back a ResourceFolder object.
+ ResourceFolder resFolder = resources.processFolder(new IFolderWrapper(folder));
+
+ // and fill it with files from the list.
+ for (IFile file : memberList) {
+ resFolder.addFile(new SingleResourceFile(new IFileWrapper(file), resFolder));
+ }
+ }
+}