blob: 2e2dd9ca6900ba67b8c635aac1045290cb17c8c6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2015 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.core.tests.resources.content;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.eclipse.core.internal.content.ContentTypeManager;
import org.eclipse.core.internal.preferences.EclipsePreferences;
import org.eclipse.core.runtime.*;
import org.eclipse.core.runtime.content.*;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.IScopeContext;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestName;
/**
* Tests content type matcher with a non-default context for user preferences.
*/
public class SpecificContextTest extends ContentTypeTest {
@Rule
public TestName name = new TestName();
/**
* A minimal scope implementation.
*/
private class SingleNodeScope implements IScopeContext {
private final IEclipsePreferences node;
SingleNodeScope() {
this.node = new EclipsePreferences();
}
@Override
public IPath getLocation() {
return null;
}
@Override
public String getName() {
return "";
}
@Override
public IEclipsePreferences getNode(String qualifier) {
assertEquals(ContentTypeManager.CONTENT_TYPE_PREF_NODE, qualifier);
return this.node;
}
}
@Test
public void testContentTypeLookup() throws CoreException {
IContentTypeManager global = Platform.getContentTypeManager();
final SingleNodeScope scope = new SingleNodeScope();
IContentTypeMatcher local = global.getMatcher(new LocalSelectionPolicy(), scope);
IContentType textContentType = global.getContentType(Platform.PI_RUNTIME + '.' + "text");
// added "<test case name>.global" to the text content type as a global file
// spec
textContentType.addFileSpec(name.getMethodName() + ".global", IContentType.FILE_NAME_SPEC);
// added "<test case name>.local" to the text content type as a local
// (scope-specific) file spec
textContentType.getSettings(scope).addFileSpec(name.getMethodName() + ".local", IContentType.FILE_NAME_SPEC);
// make ensure associations are properly recognized when doing content type
// lookup
assertEquals("1.0", textContentType, global.findContentTypeFor(name.getMethodName() + ".global"));
assertEquals("1.1", null, local.findContentTypeFor(name.getMethodName() + ".global"));
assertEquals("2.0", textContentType, local.findContentTypeFor(name.getMethodName() + ".local"));
assertEquals("2.1", null, global.findContentTypeFor(name.getMethodName() + ".local"));
try {
textContentType.removeFileSpec(name.getMethodName() + ".global", IContentType.FILE_NAME_SPEC);
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void testIsAssociatedWith() throws CoreException {
IContentTypeManager contentTypeManager = Platform.getContentTypeManager();
final SingleNodeScope scope = new SingleNodeScope();
IContentType textContentType = contentTypeManager.getContentType(Platform.PI_RUNTIME + '.' + "text");
IContentTypeSettings localSettings = null;
localSettings = textContentType.getSettings(scope);
// haven't added association yet
assertFalse("1.0", textContentType.isAssociatedWith("hello.foo", scope));
assertFalse("1.1", textContentType.isAssociatedWith("hello.foo"));
// associate at the scope level
localSettings.addFileSpec("foo", IContentType.FILE_EXTENSION_SPEC);
localSettings = textContentType.getSettings(scope);
// scope-specific settings should contain the filespec we just added
String[] fileSpecs = localSettings.getFileSpecs(IContentType.FILE_EXTENSION_SPEC);
assertEquals("2.2", 1, fileSpecs.length);
assertEquals("2.3", "foo", fileSpecs[0]);
// now it is associated at the scope level...
assertTrue("2.5", textContentType.isAssociatedWith("hello.foo", scope));
// ...but not at the global level
assertFalse("2.6", textContentType.isAssociatedWith("hello.foo"));
}
}