| /* |
| * 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)); |
| } |
| } |
| } |