blob: 38e7c54e344d4400c60ea2fe00fb8f8ebf956cf6 [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.nls;
import java.io.File;
import java.util.Properties;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.filebuffers.FileBuffers;
import org.eclipse.core.filebuffers.ITextFileBuffer;
import org.eclipse.core.filebuffers.ITextFileBufferManager;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.Region;
import org.eclipse.jdt.core.IClassFile;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jdt.core.dom.ITypeBinding;
import org.eclipse.jdt.core.dom.TypeDeclaration;
import org.eclipse.jdt.internal.corext.dom.NodeFinder;
import org.eclipse.jdt.internal.corext.refactoring.nls.AccessorClassReference;
import org.eclipse.jdt.internal.corext.refactoring.nls.NLSHintHelper;
import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
import org.eclipse.jdt.testplugin.JavaProjectHelper;
import org.eclipse.jdt.testplugin.JavaTestPlugin;
import org.eclipse.jdt.ui.tests.core.ProjectTestSetup;
/**
* Tests the NLSHintHelper.
*
* @since 3.1
*/
public class NLSHintHelperTest extends TestCase {
private IJavaProject fJProject;
private IPackageFragmentRoot fLibrary;
public static Test suite() {
return new ProjectTestSetup(new TestSuite(NLSHintHelperTest.class));
}
protected void setUp() throws Exception {
fJProject= ProjectTestSetup.getProject();
File lib= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.NLS_LIB);
assertTrue("lib does not exist", lib != null && lib.exists());
fLibrary= JavaProjectHelper.addLibrary(fJProject, Path.fromOSString(lib.getPath())); // add library to project
}
public void testFindInJAR() {
try {
assertNotNull(NLSHintHelper.getResourceBundle(fLibrary, "pkg", "Messages.properties"));
} catch (JavaModelException e) {
fail();
}
IPackageFragment pkg= fLibrary.getPackageFragment("pkg");
IClassFile classFile= pkg.getClassFile("Client.class");
IRegion region= new Region(648, 4);
CompilationUnit ast= JavaPlugin.getDefault().getASTProvider().getAST(classFile, ASTProvider.WAIT_YES, null);
AccessorClassReference accessor= NLSHintHelper.getAccessorClassReference(ast, region);
assertNotNull(accessor);
Properties properties= NLSHintHelper.getProperties(fJProject, accessor);
assertNotNull(properties);
assertEquals("Hello World", properties.get("test"));
try {
assertNotNull(NLSHintHelper.getResourceBundle(fJProject, accessor));
} catch (JavaModelException e1) {
fail();
}
}
public void testDoNotFindInJAR() {
try {
assertNull(NLSHintHelper.getResourceBundle(fJProject, "pkg", "Messages.properties"));
} catch (JavaModelException e) {
fail();
}
}
public void testFindInDirtyBuffer() {
ITextFileBufferManager manager= FileBuffers.getTextFileBufferManager();
assertNotNull(manager);
IPath nonExistentPath= fJProject.getProject().getFullPath().append("" + System.currentTimeMillis());
try {
manager.connect(nonExistentPath, null);
} catch (CoreException e) {
fail();
}
try {
ITextFileBuffer buffer= manager.getTextFileBuffer(nonExistentPath);
buffer.getDocument().set("newKey= newValue");
IFile nonExistentFile= ResourcesPlugin.getWorkspace().getRoot().getFile(nonExistentPath);
Properties properties= NLSHintHelper.getProperties(nonExistentFile);
String newValue= properties.getProperty("newKey");
assertEquals("newValue", newValue);
} finally {
try {
manager.disconnect(nonExistentPath, null);
} catch (CoreException e1) {
// ignore: test itself was already successful
}
}
}
public void testDoNotFindDirtyBuffer() {
ITextFileBufferManager manager= FileBuffers.getTextFileBufferManager();
assertNotNull(manager);
IPath nonExistentPath= fJProject.getProject().getFullPath().append("" + System.currentTimeMillis());
try {
manager.connect(nonExistentPath, null);
} catch (CoreException e) {
fail();
}
try {
ITextFileBuffer buffer= manager.getTextFileBuffer(nonExistentPath);
buffer.getDocument().set("newKey= newValue");
IFile nonExistentFile= ResourcesPlugin.getWorkspace().getRoot().getFile(nonExistentPath);
Properties properties= NLSHintHelper.getProperties(nonExistentFile);
String newValue= properties.getProperty("nonExistingValue");
assertEquals(newValue, null);
} finally {
try {
manager.disconnect(nonExistentPath, null);
} catch (CoreException e1) {
// ignore: test itself was already successful
}
}
}
public void testFindInFile() {
ITextFileBufferManager manager= FileBuffers.getTextFileBufferManager();
assertNotNull(manager);
String fileName= "" + System.currentTimeMillis();
IPath nonExistentPath= fJProject.getProject().getFullPath().append(fileName);
IPath nonExistentLocation= fJProject.getProject().getLocation().append(fileName);
try {
manager.connect(nonExistentLocation, null);
} catch (CoreException e) {
fail();
}
try {
ITextFileBuffer buffer= manager.getTextFileBuffer(nonExistentLocation);
buffer.getDocument().set("newKey= newValue");
buffer.commit(null, false);
fJProject.getProject().refreshLocal(IResource.DEPTH_ONE, null);
IFile existentFile= ResourcesPlugin.getWorkspace().getRoot().getFile(nonExistentPath);
assertEquals(true, existentFile.exists());
Properties properties= NLSHintHelper.getProperties(existentFile);
String newValue= properties.getProperty("newKey");
assertEquals("newValue", newValue);
} catch (CoreException ex) {
fail();
} finally {
try {
manager.disconnect(nonExistentPath, null);
} catch (CoreException e1) {
// ignore: test itself was already successful
}
}
}
public void testDoNotFindInFile() {
ITextFileBufferManager manager= FileBuffers.getTextFileBufferManager();
assertNotNull(manager);
String fileName= "" + System.currentTimeMillis();
IPath nonExistentPath= fJProject.getProject().getFullPath().append(fileName);
IPath nonExistentLocation= fJProject.getProject().getLocation().append(fileName);
try {
manager.connect(nonExistentLocation, null);
} catch (CoreException e) {
fail();
}
try {
ITextFileBuffer buffer= manager.getTextFileBuffer(nonExistentLocation);
buffer.getDocument().set("newKey= newValue");
buffer.commit(null, false);
fJProject.getProject().refreshLocal(IResource.DEPTH_ONE, null);
IFile existentFile= ResourcesPlugin.getWorkspace().getRoot().getFile(nonExistentPath);
assertEquals(true, existentFile.exists());
Properties properties= NLSHintHelper.getProperties(existentFile);
String newValue= properties.getProperty("nonExistingValue");
assertEquals(newValue, null);
} catch (CoreException ex) {
fail();
} finally {
try {
manager.disconnect(nonExistentPath, null);
} catch (CoreException e1) {
// ignore: test itself was already successful
}
}
}
public void testFindResourceBundleName1f() throws Exception {
String source=
"package test;\n" +
"public class TestMessages {\n" +
" private static final String BUNDLE_NAME = \"test.test\";\n" +
" public static String getString(String s) {" +
" return \"\";\n" +
" }\n" +
"}\n";
assertEquals("test.test", getResourceBundleName(source, "TestMessages", "test"));
}
public void testFindResourceBundleName1s() throws Exception {
String source=
"package test;\n" +
"public class TestMessages {\n" +
" private static String BUNDLE_NAME;\n" +
" static {\n" +
" BUNDLE_NAME= \"test.test\";\n" +
" }\n" +
" public static String getString(String s) {" +
" return \"\";\n" +
" }\n" +
"}\n";
assertEquals("test.test", getResourceBundleName(source, "TestMessages", "test"));
}
public void testFindResourceBundleName2f() throws Exception {
String source=
"package test;\n" +
"public class TestMessages {\n" +
" private static final String BUNDLE_NAME = TestMessages.class.getName();\n" +
" public static String getString(String s) {\n" +
" return \"\";\n" +
" }\n" +
"}\n";
assertEquals("test.TestMessages", getResourceBundleName(source, "TestMessages", "test"));
}
public void testFindResourceBundleName2s() throws Exception {
String source=
"package test;\n" +
"public class TestMessages {\n" +
" private static String BUNDLE_NAME;\n" +
" static {\n" +
" BUNDLE_NAME = TestMessages.class.getName();\n" +
" }\n" +
" public static String getString(String s) {\n" +
" return \"\";\n" +
" }\n" +
"}\n";
assertEquals("test.TestMessages", getResourceBundleName(source, "TestMessages", "test"));
}
public void testFindResourceBundleName3f() throws Exception {
String source=
"package test;\n" +
"import java.util.ResourceBundle;\n" +
"public class TestMessages {\n" +
" private static final ResourceBundle b= ResourceBundle.getBundle(TestMessages.class.getName());\n" +
" public static String getString(String s) {\n" +
" return \"\";\n" +
" }\n" +
"}\n";
assertEquals("test.TestMessages", getResourceBundleName(source, "TestMessages", "test"));
}
public void testFindResourceBundleName3s() throws Exception {
String source=
"package test;\n" +
"import java.util.ResourceBundle;\n" +
"public class TestMessages {\n" +
" private static ResourceBundle b;\n" +
" static {\n" +
" b= ResourceBundle.getBundle(TestMessages.class.getName());\n" +
" }\n" +
" public static String getString(String s) {\n" +
" return \"\";\n" +
" }\n" +
"}\n";
assertEquals("test.TestMessages", getResourceBundleName(source, "TestMessages", "test"));
}
public void testFindResourceBundleName4f() throws Exception {
String source=
"package test;\n" +
"import java.util.ResourceBundle;\n" +
"public class TestMessages {\n" +
" private static final ResourceBundle b= ResourceBundle.getBundle(\"test.test\");\n" +
" public static String getString(String s) {\n" +
" return \"\";\n" +
" }\n" +
"}\n";
assertEquals("test.test", getResourceBundleName(source, "TestMessages", "test"));
}
public void testFindResourceBundleName4s() throws Exception {
String source=
"package test;\n" +
"import java.util.ResourceBundle;\n" +
"public class TestMessages {\n" +
" private static ResourceBundle b;\n" +
" static {\n" +
" b= ResourceBundle.getBundle(\"test.test\");\n" +
" }\n" +
" public static String getString(String s) {\n" +
" return \"\";\n" +
" }\n" +
"}\n";
assertEquals("test.test", getResourceBundleName(source, "TestMessages", "test"));
}
public void testFindResourceBundleName5f() throws Exception {
String source=
"package test;\n" +
"import java.util.ResourceBundle;\n" +
"public class TestMessages {\n" +
" private static final String RESOURCE_BUNDLE= TestMessages.class.getName();\n" +
" private static final ResourceBundle b= ResourceBundle.getBundle(RESOURCE_BUNDLE);\n" +
" public static String getString(String s) {\n" +
" return \"\";\n" +
" }\n" +
"}\n";
assertEquals("test.TestMessages", getResourceBundleName(source, "TestMessages", "test"));
}
public void testFindResourceBundleName5s() throws Exception {
String source=
"package test;\n" +
"import java.util.ResourceBundle;\n" +
"public class TestMessages {\n" +
" private static final String RESOURCE_BUNDLE= TestMessages.class.getName();\n" +
" private static ResourceBundle b;\n" +
" static {\n" +
" b= ResourceBundle.getBundle(RESOURCE_BUNDLE);\n" +
" }\n" +
" public static String getString(String s) {\n" +
" return \"\";\n" +
" }\n" +
"}\n";
assertEquals("test.TestMessages", getResourceBundleName(source, "TestMessages", "test"));
}
public void testFindResourceBundleName6() throws Exception {
String source=
"package test;\n" +
"import java.util.ResourceBundle;\n" +
"public class TestMessages {\n" +
" private static final String RESOURCE_BUNDLE= TestMessages.class.getName();\n" +
" private static ResourceBundle fgResourceBundle= ResourceBundle.getBundle(RESOURCE_BUNDLE);\n" +
" public static String getString(String s) {\n" +
" return \"\";\n" +
" }\n" +
"}\n";
assertEquals("test.TestMessages", getResourceBundleName(source, "TestMessages", "test"));
}
private String getResourceBundleName(String source, String className, String packageName) throws Exception {
// Create CU
IPackageFragmentRoot sourceFolder = JavaProjectHelper.addSourceContainer(fJProject, "src");
IPackageFragment pack = sourceFolder.createPackageFragment(packageName, false, null);
ICompilationUnit cu= pack.createCompilationUnit(className + ".java", source, false, null);
// Get type binding
CompilationUnit ast= JavaPlugin.getDefault().getASTProvider().getAST(cu, ASTProvider.WAIT_YES, null);
ASTNode node= NodeFinder.perform(ast, cu.getType(className).getSourceRange());
ITypeBinding typeBinding= ((TypeDeclaration)node).resolveBinding();
return NLSHintHelper.getResourceBundleName(typeBinding);
}
protected void tearDown() throws Exception {
JavaProjectHelper.clear(fJProject, ProjectTestSetup.getDefaultClasspath());
}
}