/******************************************************************************* * Copyright (c) 2015 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.batch.core.itest; import java.util.HashSet; import java.util.List; import java.util.Set; import junit.framework.TestCase; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.jboss.tools.batch.internal.core.el.JobPropertiesELCompletionEngine; import org.jboss.tools.common.el.core.resolver.ELContext; import org.jboss.tools.common.text.TextProposal; import org.jboss.tools.common.util.FileUtil; import org.jboss.tools.jst.web.kb.PageContextFactory; import org.jboss.tools.test.util.ProjectImportTestSetup; /** * * @author Viacheslav Kabanovich * */ public class JobPropertiesELCompletionEngineTest extends TestCase { public static String PROJECT_NAME = "BatchTestProject"; //$NON-NLS-1$ private IProject project; public JobPropertiesELCompletionEngineTest() {} @Override protected void setUp() throws Exception { project = ProjectImportTestSetup.loadProject(PROJECT_NAME); } public void testEL() throws Exception { IResource resource = project.findMember("/src/META-INF/batch-jobs/job-ca-4.xml"); //$NON-NLS-1$ assertTrue(resource instanceof IFile); IFile file = (IFile)resource; String content = FileUtil.getContentFromEditorOrFile(file); ELContext context = PageContextFactory.createPageContext(file); checkProposals(context, content, "#{job", "name=\"x\" value=\"#{job", new String[]{"Parameters", "Properties"}); checkProposals(context, content, "#{jobProperties['", "name=\"x\" value=\"#{jobProperties['", new String[]{"p1'", "p2'", "y'"}); checkProposals(context, content, "#{jobProperties['p", "name=\"x\" value=\"#{jobProperties['", new String[]{"1'", "2'"}); } void checkProposals(ELContext context, String content, String el, String search, String[] expectedProposals) { int offset = content.indexOf(search); assertTrue(offset > 0); offset += search.length(); JobPropertiesELCompletionEngine resolver = new JobPropertiesELCompletionEngine(); List<TextProposal> proposals = resolver.getProposals(context, el, offset); compareProposals(proposals, expectedProposals); } void compareProposals(List<TextProposal> actualProposals, String[] expectedProposals) { Set<String> expectedSet = new HashSet<String>(); for (String s: expectedProposals) { expectedSet.add(s); } Set<String> actualSet = new HashSet<String>(); assertEquals(expectedProposals.length, actualProposals.size()); for (TextProposal p: actualProposals) { String s = p.getReplacementString(); actualSet.add(s); } if(!actualSet.containsAll(expectedSet) || actualProposals.size() != expectedProposals.length) { StringBuilder sb = new StringBuilder(); sb.append("Expected: "); for (String s: expectedProposals) { sb.append(" ").append(s); } sb.append(" Found: "); for (TextProposal p: actualProposals) { String s = p.getReplacementString(); sb.append(" ").append(s); } fail(sb.toString()); } } }