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