diff options
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.java | 297 |
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)); + } + } +} |