1 /******************************************************************************* 2 * Copyright (c) 2000, 2018 IBM Corporation and others. 3 * 4 * This program and the accompanying materials 5 * are made available under the terms of the Eclipse Public License 2.0 6 * which accompanies this distribution, and is available at 7 * https://www.eclipse.org/legal/epl-2.0/ 8 * 9 * SPDX-License-Identifier: EPL-2.0 10 * 11 * Contributors: 12 * IBM Corporation - initial API and implementation 13 *******************************************************************************/ 14 package org.eclipse.jdt.ui.tests.refactoring.nls; 15 16 import java.io.ByteArrayInputStream; 17 import java.io.InputStream; 18 import java.util.HashMap; 19 20 import org.eclipse.jdt.testplugin.JavaProjectHelper; 21 22 import org.eclipse.core.runtime.CoreException; 23 import org.eclipse.core.runtime.IAdaptable; 24 import org.eclipse.core.runtime.IPath; 25 import org.eclipse.core.runtime.NullProgressMonitor; 26 27 import org.eclipse.core.resources.IFile; 28 import org.eclipse.core.resources.ResourcesPlugin; 29 30 import org.eclipse.jdt.core.ICompilationUnit; 31 import org.eclipse.jdt.core.IJavaProject; 32 import org.eclipse.jdt.core.IPackageFragment; 33 import org.eclipse.jdt.core.IPackageFragmentRoot; 34 35 import org.eclipse.jdt.internal.core.manipulation.CodeTemplateContextType; 36 import org.eclipse.jdt.internal.core.manipulation.StubUtility; 37 38 /** 39 * Helper class for the nls-tests. 40 * 41 * often used functionality is located here to get around extending testcases 42 * from testcases (just for code reuse). 43 */ 44 public class NlsRefactoringTestHelper { 45 46 NullProgressMonitor fNpm; 47 48 private HashMap<String, IAdaptable> fWorkSpaceElements = new HashMap<>(); 49 private IJavaProject fJavaProject; 50 NlsRefactoringTestHelper(IJavaProject javaProject)51 public NlsRefactoringTestHelper(IJavaProject javaProject) throws Exception { 52 fJavaProject = javaProject; 53 fNpm = new NullProgressMonitor(); 54 fWorkSpaceElements = new HashMap<>(); 55 setupTestSpace(); 56 } 57 getInputStream(String input)58 private InputStream getInputStream(String input) { 59 return new ByteArrayInputStream(input.getBytes()); 60 } 61 setupTestSpace()62 private void setupTestSpace() throws Exception { 63 fWorkSpaceElements.put(fJavaProject.getPath().toString(), fJavaProject); 64 65 createPackageFragmentRoot(fJavaProject, "src1"); 66 createPackageFragmentRoot(fJavaProject, "src2"); 67 68 createPackageFragment("p", "/TestSetupProject/src1"); 69 createPackageFragment("p", "/TestSetupProject/src2"); 70 71 createFile("/TestSetupProject/src2/p", "test.properties", ""); 72 createCu("/TestSetupProject/src1/p", "WithStrings.java", "package p;class WithStrings {String s1=\"test1\";String s2=\"test2\";}"); 73 createCu("/TestSetupProject/src1/p", "WithoutStrings.java", "package p;class WithoutStrings {}"); 74 75 String newFileTemplate= "${package_declaration}\n\n${type_declaration}"; 76 StubUtility.setCodeTemplate(CodeTemplateContextType.NEWTYPE_ID, newFileTemplate, null); 77 StubUtility.setCodeTemplate(CodeTemplateContextType.TYPECOMMENT_ID, "", null); 78 79 } 80 createFile(String packageFragmentName, String fileName, String content)81 private void createFile(String packageFragmentName, String fileName, String content) throws Exception { 82 IPackageFragment fragment = (IPackageFragment) fWorkSpaceElements.get(packageFragmentName); 83 IPath p = fragment.getPath().append(fileName); 84 IFile file = createFile(p, content); 85 fWorkSpaceElements.put(file.getFullPath().toString(), file); 86 } 87 createFile(IPath path, String content)88 private IFile createFile(IPath path, String content) throws Exception { 89 IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path); 90 try (InputStream iS = getInputStream(content)) { 91 file.create(iS, true, fNpm); 92 } 93 return file; 94 } 95 createPackageFragment(String packageName, String fragmentRootName)96 public void createPackageFragment(String packageName, String fragmentRootName) throws Exception { 97 IPackageFragmentRoot fragmentRoot = (IPackageFragmentRoot) fWorkSpaceElements.get(fragmentRootName); 98 IPackageFragment newPackageFragment = fragmentRoot.createPackageFragment(packageName, false, fNpm); 99 fWorkSpaceElements.put(newPackageFragment.getPath().toString(), newPackageFragment); 100 } 101 createPackageFragmentRoot(IJavaProject project, String string)102 public void createPackageFragmentRoot(IJavaProject project, String string) throws CoreException { 103 IPackageFragmentRoot srcRoot1 = JavaProjectHelper.addSourceContainer(project, string); 104 fWorkSpaceElements.put(srcRoot1.getPath().toString(), srcRoot1); 105 } 106 getPackageFragment(String path)107 public IPackageFragment getPackageFragment(String path) { 108 return (IPackageFragment) fWorkSpaceElements.get(path); 109 } 110 getFile(String string)111 public IFile getFile(String string) { 112 return (IFile) fWorkSpaceElements.get(string); 113 } 114 createCu(String path, String name, String content)115 public ICompilationUnit createCu(String path, String name, String content) throws Exception { 116 IPackageFragment f = (IPackageFragment) fWorkSpaceElements.get(path); 117 ICompilationUnit res = f.createCompilationUnit(name, content, false, fNpm); 118 fWorkSpaceElements.put(res.getPath().toString(), res); 119 return res; 120 } 121 getCu(String string)122 public ICompilationUnit getCu(String string) { 123 return (ICompilationUnit) fWorkSpaceElements.get(string); 124 } 125 } 126