/******************************************************************************* * Copyright (c) 2007, 2008 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.che.ide.ext.java.client.core; import org.eclipse.che.ide.ext.java.client.BaseTest; import org.eclipse.che.ide.ext.java.jdt.templates.CodeTemplateContextType; import org.eclipse.che.ide.ext.java.jdt.templates.ContextTypeRegistry; import org.eclipse.che.ide.ext.java.jdt.templates.ElementTypeResolver; import org.eclipse.che.ide.ext.java.jdt.templates.ExceptionVariableNameResolver; import org.eclipse.che.ide.ext.java.jdt.templates.FieldResolver; import org.eclipse.che.ide.ext.java.jdt.templates.ImportsResolver; import org.eclipse.che.ide.ext.java.jdt.templates.JavaContextType; import org.eclipse.che.ide.ext.java.jdt.templates.JavaDocContextType; import org.eclipse.che.ide.ext.java.jdt.templates.LinkResolver; import org.eclipse.che.ide.ext.java.jdt.templates.LocalVarResolver; import org.eclipse.che.ide.ext.java.jdt.templates.NameResolver; import org.eclipse.che.ide.ext.java.jdt.templates.StaticImportResolver; import org.eclipse.che.ide.ext.java.jdt.templates.TemplateStore; import org.eclipse.che.ide.ext.java.jdt.templates.TypeResolver; import org.eclipse.che.ide.ext.java.jdt.templates.TypeVariableResolver; import org.eclipse.che.ide.ext.java.jdt.templates.VarResolver; import org.eclipse.che.ide.ext.java.jdt.templates.api.Template; import org.eclipse.che.ide.ext.java.jdt.templates.api.TemplateBuffer; import org.eclipse.che.ide.ext.java.jdt.templates.api.TemplateContextType; import org.eclipse.che.ide.ext.java.jdt.templates.api.TemplateException; import org.eclipse.che.ide.ext.java.jdt.templates.api.TemplateTranslator; import org.eclipse.che.ide.ext.java.jdt.templates.api.TemplateVariable; import org.eclipse.che.ide.ext.java.jdt.templates.api.TemplateVariableResolver; import org.junit.Assert; import org.junit.Test; import java.util.Iterator; /** * Template contribution tests. * * @since 3.4 */ public class TemplateContributionTest extends BaseTest { private ContextTypeRegistry fCodeTemplateContextTypeRegistry; private void checkContribution(String resolverContextTypeId, String contextTypeId) throws TemplateException { ContextTypeRegistry registry = getTemplateContextRegistry(); TemplateContextType context = registry.getContextType(resolverContextTypeId); TemplateStore templateStore = new TemplateStore(); Template[] templates = templateStore.getTemplates(contextTypeId); for (int i = 0; i < templates.length; i++) { Template template = templates[i]; TemplateTranslator translator = new TemplateTranslator(); TemplateBuffer buffer = translator.translate(template); TemplateVariable[] variables = buffer.getVariables(); for (int j = 0; j < variables.length; j++) { TemplateVariable variable = variables[j]; if (!variable.getType().equals(variable.getName())) { Assert.assertTrue( "No resolver found for variable '" + variable.getType() + "' in template '" + template.getName() + "'\n\n" + template.getPattern(), canHandle(context, variable)); } } } } /** @return */ public ContextTypeRegistry getTemplateContextRegistry() { if (fCodeTemplateContextTypeRegistry == null) { fCodeTemplateContextTypeRegistry = new ContextTypeRegistry(); CodeTemplateContextType.registerContextTypes(fCodeTemplateContextTypeRegistry); JavaContextType contextTypeAll = new JavaContextType(JavaContextType.ID_ALL); contextTypeAll.initializeContextTypeResolvers(); FieldResolver fieldResolver = new FieldResolver(); fieldResolver.setType("field"); contextTypeAll.addResolver(fieldResolver); LocalVarResolver localVarResolver = new LocalVarResolver(); localVarResolver.setType("localVar"); contextTypeAll.addResolver(localVarResolver); VarResolver varResolver = new VarResolver(); varResolver.setType("var"); contextTypeAll.addResolver(varResolver); NameResolver nameResolver = new NameResolver(); nameResolver.setType("newName"); contextTypeAll.addResolver(nameResolver); TypeResolver typeResolver = new TypeResolver(); typeResolver.setType("newType"); contextTypeAll.addResolver(typeResolver); ElementTypeResolver elementTypeResolver = new ElementTypeResolver(); elementTypeResolver.setType("elemType"); contextTypeAll.addResolver(elementTypeResolver); TypeVariableResolver typeVariableResolver = new TypeVariableResolver(); typeVariableResolver.setType("argType"); contextTypeAll.addResolver(typeVariableResolver); LinkResolver linkResolver = new LinkResolver(); linkResolver.setType("link"); contextTypeAll.addResolver(linkResolver); ImportsResolver importsResolver = new ImportsResolver(); importsResolver.setType("import"); StaticImportResolver staticImportResolver = new StaticImportResolver(); staticImportResolver.setType("importStatic"); contextTypeAll.addResolver(staticImportResolver); ExceptionVariableNameResolver exceptionVariableNameResolver = new ExceptionVariableNameResolver(); exceptionVariableNameResolver.setType("exception_variable_name"); contextTypeAll.addResolver(exceptionVariableNameResolver); fCodeTemplateContextTypeRegistry.addContextType(contextTypeAll); fCodeTemplateContextTypeRegistry.addContextType(new JavaDocContextType()); JavaContextType contextTypeMembers = new JavaContextType(JavaContextType.ID_MEMBERS); JavaContextType contextTypeStatements = new JavaContextType(JavaContextType.ID_STATEMENTS); contextTypeMembers.initializeResolvers(contextTypeAll); contextTypeStatements.initializeResolvers(contextTypeAll); fCodeTemplateContextTypeRegistry.addContextType(contextTypeMembers); fCodeTemplateContextTypeRegistry.addContextType(contextTypeStatements); } return fCodeTemplateContextTypeRegistry; } @Test public void testJavaContribution() throws Exception { checkContribution(JavaContextType.ID_ALL, JavaContextType.ID_ALL); //TODO HtmlUnit has a bug with RegExp emulation // checkContribution(JavaContextType.ID_ALL, JavaContextType.ID_MEMBERS); // checkContribution(JavaContextType.ID_ALL, JavaContextType.ID_STATEMENTS); // checkContribution(JavaContextType.ID_MEMBERS, JavaContextType.ID_MEMBERS); // checkContribution(JavaContextType.ID_STATEMENTS, JavaContextType.ID_STATEMENTS); } @Test public void testJavaDocContribution() throws Exception { checkContribution(JavaDocContextType.ID, JavaDocContextType.ID); } // public void testSWTContributionAll() throws Exception { // checkContribution(SWTContextType.ID_ALL, SWTContextType.ID_ALL); // checkContribution(SWTContextType.ID_ALL, SWTContextType.ID_MEMBERS); // checkContribution(SWTContextType.ID_ALL, SWTContextType.ID_STATEMENTS); // checkContribution(SWTContextType.ID_MEMBERS, SWTContextType.ID_MEMBERS); // checkContribution(SWTContextType.ID_STATEMENTS, SWTContextType.ID_STATEMENTS); // } private boolean canHandle(TemplateContextType context, TemplateVariable variable) { for (Iterator iterator = context.resolvers(); iterator.hasNext(); ) { TemplateVariableResolver resolver = (TemplateVariableResolver)iterator.next(); if (variable.getType().equals(resolver.getType())) return true; } return false; } }