blob: dc0e22c8094e9793e9ebae849ef6256f86b9868b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2015 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.core.tests.resources.content;
import junit.framework.Test;
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.eclipse.test.OrderedTestSuite;
/**
* Tests content type matcher with a non-default context for user preferences.
*/
public class SpecificContextTest extends ContentTypeTest {
/**
* A minimal scope implementation.
*/
private class SingleNodeScope implements IScopeContext {
private 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;
}
}
public static Test suite() {
return new OrderedTestSuite(SpecificContextTest.class);
}
public SpecificContextTest(String name) {
super(name);
}
public void testContentTypeLookup() {
IContentTypeManager global = Platform.getContentTypeManager();
final SingleNodeScope scope = new SingleNodeScope();
IContentTypeMatcher local = global.getMatcher(new LocalSelectionPolicy(), scope);
IContentType textContentType = global.getContentType(Platform.PI_RUNTIME + '.' + "text");
try {
// added "<test case name>.global" to the text content type as a global file spec
textContentType.addFileSpec(getName() + ".global", IContentType.FILE_NAME_SPEC);
} catch (CoreException e) {
fail("0.1", e);
}
try {
// added "<test case name>.local" to the text content type as a local (scope-specific) file spec
textContentType.getSettings(scope).addFileSpec(getName() + ".local", IContentType.FILE_NAME_SPEC);
} catch (CoreException e) {
fail("0.2", e);
}
// make ensure associations are properly recognized when doing content type lookup
assertEquals("1.0", textContentType, global.findContentTypeFor(getName() + ".global"));
assertEquals("1.1", null, local.findContentTypeFor(getName() + ".global"));
assertEquals("2.0", textContentType, local.findContentTypeFor(getName() + ".local"));
assertEquals("2.1", null, global.findContentTypeFor(getName() + ".local"));
try {
textContentType.removeFileSpec(getName() + ".global", IContentType.FILE_NAME_SPEC);
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void testIsAssociatedWith() {
IContentTypeManager contentTypeManager = Platform.getContentTypeManager();
final SingleNodeScope scope = new SingleNodeScope();
IContentType textContentType = contentTypeManager.getContentType(Platform.PI_RUNTIME + '.' + "text");
IContentTypeSettings localSettings = null;
try {
localSettings = textContentType.getSettings(scope);
} catch (CoreException e) {
fail("0.1", e);
}
// haven't added association yet
assertTrue("1.0", !textContentType.isAssociatedWith("hello.foo", scope));
assertTrue("1.1", !textContentType.isAssociatedWith("hello.foo"));
try {
// associate at the scope level
localSettings.addFileSpec("foo", IContentType.FILE_EXTENSION_SPEC);
} catch (CoreException e) {
fail("1.5", e);
}
try {
localSettings = textContentType.getSettings(scope);
} catch (CoreException e) {
fail("2.1", e);
}
// 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
assertTrue("2.6", !textContentType.isAssociatedWith("hello.foo"));
}
}