blob: d1cb87aa9bf16390875b5485f764fe14f3f8eba0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 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.jdt.ui.tests.core;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.jdt.testplugin.JavaProjectHelper;
import org.eclipse.jface.text.templates.Template;
import org.eclipse.jface.text.templates.persistence.TemplatePersistenceData;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.internal.corext.template.java.CodeTemplateContextType;
import org.eclipse.jdt.internal.ui.viewsupport.ProjectTemplateStore;
public class TemplateStoreTest extends CoreTests {
private static final Class THIS= TemplateStoreTest.class;
private IJavaProject fJProject1;
public TemplateStoreTest(String name) {
super(name);
}
public static Test allTests() {
return new ProjectTestSetup(new TestSuite(THIS));
}
public static Test suite() {
return allTests();
}
public static Test setUpTest(Test test) {
return new ProjectTestSetup(test);
}
protected void setUp() throws Exception {
}
protected void tearDown() throws Exception {
}
private static final String[] ALL_CODE_TEMPLATES= new String[] {
CodeTemplateContextType.CATCHBLOCK_ID,
CodeTemplateContextType.METHODSTUB_ID,
CodeTemplateContextType.NEWTYPE_ID,
CodeTemplateContextType.CONSTRUCTORSTUB_ID,
CodeTemplateContextType.GETTERSTUB_ID,
CodeTemplateContextType.SETTERSTUB_ID,
CodeTemplateContextType.FILECOMMENT_ID,
CodeTemplateContextType.TYPECOMMENT_ID,
CodeTemplateContextType.FIELDCOMMENT_ID,
CodeTemplateContextType.METHODCOMMENT_ID,
CodeTemplateContextType.CONSTRUCTORCOMMENT_ID,
CodeTemplateContextType.OVERRIDECOMMENT_ID,
CodeTemplateContextType.GETTERCOMMENT_ID,
CodeTemplateContextType.SETTERCOMMENT_ID,
};
private TemplatePersistenceData find(String id, TemplatePersistenceData[] templateData) {
for (int i= 0; i < templateData.length; i++) {
if (templateData[i].getId().equals(id)) {
return templateData[i];
}
}
return null;
}
public void testInstanceCodeTemplates() throws Exception {
ProjectTemplateStore store= new ProjectTemplateStore(null);
store.load();
TemplatePersistenceData[] allTemplateDatas= store.getTemplateData();
assertEquals(ALL_CODE_TEMPLATES.length, allTemplateDatas.length);
for (int i= 0; i < ALL_CODE_TEMPLATES.length; i++) {
// get it from the array
TemplatePersistenceData fromArray= find(ALL_CODE_TEMPLATES[i], allTemplateDatas);
assertNotNull(fromArray);
// get it from the store by id
Template fromStore= store.findTemplateById(ALL_CODE_TEMPLATES[i]);
assertNotNull(fromStore);
assertEquals(fromArray.getTemplate().getPattern(), fromStore.getPattern());
}
String newComment= "//Hello1";
String templateId= CodeTemplateContextType.SETTERCOMMENT_ID;
TemplatePersistenceData currData= find(templateId, allTemplateDatas);
Template oldTemplate= currData.getTemplate();
currData.setTemplate(new Template(oldTemplate.getName(), oldTemplate.getDescription(), oldTemplate.getContextTypeId(), newComment, oldTemplate.isAutoInsertable()));
Template currTempl= store.findTemplateById(templateId);
assertTrue(currTempl.getPattern().equals(newComment));
store.restoreDefaults(); // restore
currTempl= store.findTemplateById(templateId);
assertFalse(currTempl.getPattern().equals(newComment));
}
public void testProjectCodeTemplates1() throws Exception {
fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
try {
ProjectTemplateStore projectStore= new ProjectTemplateStore(fJProject1.getProject());
projectStore.load();
ProjectTemplateStore instanceStore= new ProjectTemplateStore(null);
instanceStore.load();
TemplatePersistenceData[] allTemplateDatas= projectStore.getTemplateData();
assertEquals(ALL_CODE_TEMPLATES.length, allTemplateDatas.length);
for (int i= 0; i < ALL_CODE_TEMPLATES.length; i++) {
// get it from the array
TemplatePersistenceData fromArray= find(ALL_CODE_TEMPLATES[i], allTemplateDatas);
assertNotNull(fromArray);
// get it from the store by id
Template fromStore= projectStore.findTemplateById(ALL_CODE_TEMPLATES[i]);
assertNotNull(fromStore);
assertEquals(fromArray.getTemplate().getPattern(), fromStore.getPattern());
// equal to instance
Template fromInstance= instanceStore.findTemplateById(ALL_CODE_TEMPLATES[i]);
assertNotNull(fromInstance);
assertEquals(fromInstance.getPattern(), fromStore.getPattern());
}
String newComment= "//Hello2";
String templateId= CodeTemplateContextType.SETTERCOMMENT_ID;
// make project specific
projectStore.setProjectSpecific(templateId, true);
assertTrue(projectStore.isProjectSpecific(templateId));
// modify template
TemplatePersistenceData currData= find(templateId, allTemplateDatas);
Template oldTemplate= currData.getTemplate();
currData.setTemplate(new Template(oldTemplate.getName(), oldTemplate.getDescription(), oldTemplate.getContextTypeId(), newComment, oldTemplate.isAutoInsertable()));
Template currTempl= projectStore.findTemplateById(templateId);
assertTrue(currTempl.getPattern().equals(newComment));
Template instanceElem= instanceStore.findTemplateById(templateId);
assertFalse(instanceElem.getPattern().equals(currTempl.getPattern()));
// remove project specific
projectStore.setProjectSpecific(templateId, false);
assertFalse(projectStore.isProjectSpecific(templateId));
currTempl= projectStore.findTemplateById(templateId);
assertFalse(currTempl.getPattern().equals(newComment));
assertTrue(instanceElem.getPattern().equals(currTempl.getPattern()));
// make project specific again and restore defaults
projectStore.setProjectSpecific(templateId, true);
assertTrue(projectStore.isProjectSpecific(templateId));
projectStore.restoreDefaults(); // restore
currTempl= projectStore.findTemplateById(templateId);
assertFalse(currTempl.getPattern().equals(newComment));
assertTrue(currTempl.getPattern().equals(instanceElem.getPattern()));
} finally {
JavaProjectHelper.delete(fJProject1);
}
}
public void testProjectCodeTemplates2() throws Exception {
fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
try {
ProjectTemplateStore projectStore= new ProjectTemplateStore(fJProject1.getProject());
projectStore.load();
String newComment= "//Hello3";
String templateId= CodeTemplateContextType.SETTERCOMMENT_ID;
// make project specific
projectStore.setProjectSpecific(templateId, true);
// modify template
TemplatePersistenceData currData= find(templateId, projectStore.getTemplateData());
Template oldTemplate= currData.getTemplate();
currData.setTemplate(new Template(oldTemplate.getName(), oldTemplate.getDescription(), oldTemplate.getContextTypeId(), newComment, oldTemplate.isAutoInsertable()));
projectStore.save();
// load store again
projectStore= new ProjectTemplateStore(fJProject1.getProject());
projectStore.load();
Template currTempl= projectStore.findTemplateById(templateId);
assertTrue(currTempl.getPattern().equals(newComment));
// remove project specific
projectStore.setProjectSpecific(templateId, false);
projectStore.save();
projectStore= new ProjectTemplateStore(fJProject1.getProject());
projectStore.load();
currTempl= projectStore.findTemplateById(templateId);
assertFalse(currTempl.getPattern().equals(newComment));
} finally {
JavaProjectHelper.delete(fJProject1);
}
}
}