blob: 513bfcfd4ea69fa110a3437ed248ed1e6deaf29d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2013 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.text.tests;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.io.StringReader;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.eclipse.jdt.testplugin.JavaProjectHelper;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.text.tests.Accessor;
import org.eclipse.jface.text.DocumentCommand;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.ui.tests.core.ProjectTestSetup;
/**
* PropertiesFileAutoEditStratergyTest
*
* @since 3.7
*/
public class PropertiesFileAutoEditStrategyTest extends TestCase {
private static final String UTF_8= "UTF-8";
private static final String ISO_8859_1= "ISO-8859-1";
private DocumentCommand fDocumentCommand;
private IJavaProject fJProject1;
private IPackageFragmentRoot fSourceFolder;
private IFile fPropertiesFileISO_8859_1;
private IFile fPropertiesFileUTF8;
private Accessor fAccessorPropertiesFileAutoEditStrategyISO_8859_1;
private Accessor fAccessorPropertiesFileUTF8;
public PropertiesFileAutoEditStrategyTest(String name) {
super(name);
fDocumentCommand= new DocumentCommand() {
};
}
public static Test suite() {
return new ProjectTestSetup(new TestSuite(PropertiesFileAutoEditStrategyTest.class));
}
@Override
protected void setUp() throws Exception {
super.setUp();
try {
fJProject1= ProjectTestSetup.getProject();
fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
IPackageFragment pack= fSourceFolder.createPackageFragment("test", false, null);
fPropertiesFileISO_8859_1= write((IFolder)pack.getCorrespondingResource(), "", "Messages_ISO_8859_1.properties");
fPropertiesFileISO_8859_1.setCharset(ISO_8859_1, null);
fPropertiesFileUTF8= write((IFolder)pack.getCorrespondingResource(), "", "Messages_UTF8.properties");
fPropertiesFileUTF8.setCharset(UTF_8, null);
fAccessorPropertiesFileAutoEditStrategyISO_8859_1= new Accessor("org.eclipse.jdt.internal.ui.propertiesfileeditor.PropertiesFileAutoEditStrategy", getClass().getClassLoader(),
new Class[] { IFile.class, ISourceViewer.class }, new Object[] { fPropertiesFileISO_8859_1, null });
fAccessorPropertiesFileUTF8= new Accessor("org.eclipse.jdt.internal.ui.propertiesfileeditor.PropertiesFileAutoEditStrategy", getClass().getClassLoader(), new Class[] { IFile.class,
ISourceViewer.class }, new Object[] { fPropertiesFileUTF8, null });
} catch (CoreException e) {
e.printStackTrace();
}
}
@Override
protected void tearDown() throws Exception {
JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
super.tearDown();
}
//utility methods
private Object performTestISO_8859_1() {
return fAccessorPropertiesFileAutoEditStrategyISO_8859_1.invoke("escape", new Class[] { DocumentCommand.class }, new Object[] { fDocumentCommand });
}
private Object performTestUTF8() {
return fAccessorPropertiesFileUTF8.invoke("escape", new Class[] { DocumentCommand.class }, new Object[] { fDocumentCommand });
}
private IFile write(IFolder folder, final String content, final String fileName) throws CoreException {
InputStream stream= new InputStream() {
private final Reader fReader= new StringReader(content);
@Override
public int read() throws IOException {
return fReader.read();
}
};
IFile file= fJProject1.getProject().getFile(folder.getProjectRelativePath().append(fileName));
file.create(stream, true, null);
return file;
}
private String getProposalText(Object proposal) {
String proposalInfo= ((ICompletionProposal)proposal).getAdditionalProposalInfo();
proposalInfo= proposalInfo.substring(5, proposalInfo.length() - 6); //remove <pre> and </pre> tags
return proposalInfo;
}
//typing ISO-8859-1
public void testTypeISO_8859_1_01() throws Exception {
fDocumentCommand.text= "\\";
Object proposal= performTestISO_8859_1();
assertEquals("\\", fDocumentCommand.text);
assertNull(proposal);
}
public void testTypeISO_8859_1_02() throws Exception {
fDocumentCommand.text= "\t";
Object proposal= performTestISO_8859_1();
assertEquals("\t", fDocumentCommand.text);
assertNull(proposal);
}
public void testTypeISO_8859_1_03() throws Exception {
fDocumentCommand.text= "\f";
Object proposal= performTestISO_8859_1();
assertEquals("\f", fDocumentCommand.text);
assertNull(proposal);
}
public void testTypeISO_8859_1_04() throws Exception {
fDocumentCommand.text= "\r";
Object proposal= performTestISO_8859_1();
assertEquals("\r", fDocumentCommand.text);
assertNull(proposal);
}
public void testTypeISO_8859_1_05() throws Exception {
fDocumentCommand.text= "\n";
Object proposal= performTestISO_8859_1();
assertEquals("\n", fDocumentCommand.text);
assertNull(proposal);
}
public void testTypeISO_8859_1_06() throws Exception {
fDocumentCommand.text= "\u2603";
Object proposal= performTestISO_8859_1();
assertEquals("\\u2603", fDocumentCommand.text);
assertNull(proposal);
}
//typing UTF-8
public void testTypeUTF8_01() throws Exception {
fDocumentCommand.text= "\u2603";
Object proposal= performTestUTF8();
assertEquals("\u2603", fDocumentCommand.text);
assertNull(proposal);
}
//paste ISO-8859-1
public void testPasteISO_8859_1_01() throws Exception {
fDocumentCommand.text= "C:\\Program Files\\Java";
Object proposal= performTestISO_8859_1();
assertEquals("C:\\Program Files\\Java", fDocumentCommand.text);
assertEquals("C:\\\\Program Files\\\\Java", getProposalText(proposal));
}
public void testPasteISO_8859_1_02() throws Exception {
fDocumentCommand.text= "C:\\new folder\\A.java";
Object proposal= performTestISO_8859_1();
assertEquals("C:\\new folder\\A.java", fDocumentCommand.text);
assertEquals("C:\\\\new folder\\\\A.java", getProposalText(proposal));
}
public void testPasteISO_8859_1_03() throws Exception {
fDocumentCommand.text= "\u0926 \u0905";
Object proposal= performTestISO_8859_1();
assertEquals("\\u0926 \\u0905", fDocumentCommand.text);
assertNull(proposal);
}
public void testPasteISO_8859_1_04() throws Exception {
fDocumentCommand.text= "\u0926 \\u0905";
Object proposal= performTestISO_8859_1();
assertEquals("\\u0926 \\u0905", fDocumentCommand.text);
assertEquals("\\u0926 \\\\u0905", getProposalText(proposal));
}
public void testPasteISO_8859_1_05() throws Exception {
fDocumentCommand.text= "ä \u0926";
Object proposal= performTestISO_8859_1();
assertEquals("ä \\u0926", fDocumentCommand.text);
assertNull(proposal);
}
public void testPasteISO_8859_1_06() throws Exception {
fDocumentCommand.text= "some text\\";
Object proposal= performTestISO_8859_1();
assertEquals("some text\\", fDocumentCommand.text);
assertEquals("some text\\\\", getProposalText(proposal));
}
//paste UTF-8
public void testPasteUTF8_01() throws Exception {
fDocumentCommand.text= "C:\\Program Files\\Java";
Object proposal= performTestUTF8();
assertEquals("C:\\Program Files\\Java", fDocumentCommand.text);
assertEquals("C:\\\\Program Files\\\\Java", getProposalText(proposal));
}
public void testPasteUTF8_02() throws Exception {
fDocumentCommand.text= "C:\\new folder\\A.java";
Object proposal= performTestUTF8();
assertEquals("C:\\new folder\\A.java", fDocumentCommand.text);
assertEquals("C:\\\\new folder\\\\A.java", getProposalText(proposal));
}
public void testPasteUTF8_03() throws Exception {
fDocumentCommand.text= "\u0926 \u0905";
Object proposal= performTestUTF8();
assertEquals("\u0926 \u0905", fDocumentCommand.text);
assertNull(proposal);
}
public void testPasteUTF8_04() throws Exception {
fDocumentCommand.text= "\u0926 \\u0905";
Object proposal= performTestUTF8();
assertEquals("\u0926 \\u0905", fDocumentCommand.text);
assertNull(proposal);
}
public void testPasteUTF8_05() throws Exception {
fDocumentCommand.text= "\u0926 \\some text";
Object proposal= performTestUTF8();
assertEquals("\u0926 \\some text", fDocumentCommand.text);
assertEquals("\u0926 \\\\some text", getProposalText(proposal));
}
//paste from properties file ISO-8859-1
public void testPasteFromPropertiesFileISO_8859_1_01() throws Exception {
fDocumentCommand.text= "\t \n \f \r";
Object proposal= performTestISO_8859_1();
assertEquals("\t \n \f \r", fDocumentCommand.text);
assertNull(proposal);
}
public void testPasteFromPropertiesFileISO_8859_1_02() throws Exception {
fDocumentCommand.text= "\\u00e4 \\t \\u0926 \\n";
Object proposal= performTestISO_8859_1();
assertEquals("\\u00e4 \\t \\u0926 \\n", fDocumentCommand.text);
assertNull(proposal);
}
public void testPasteFromPropertiesFileISO_8859_1_03() throws Exception {
fDocumentCommand.text= "C:\\\\Program Files\\\\Java";
Object proposal= performTestISO_8859_1();
assertEquals("C:\\\\Program Files\\\\Java", fDocumentCommand.text);
assertNull(proposal);
}
public void testPasteFromPropertiesFileISO_8859_1_04() throws Exception {
fDocumentCommand.text= "C:\\\\new folder\\\\A.java";
Object proposal= performTestISO_8859_1();
assertEquals("C:\\\\new folder\\\\A.java", fDocumentCommand.text);
assertNull(proposal);
}
public void testPasteFromPropertiesFileISO_8859_1_05() throws Exception {
fDocumentCommand.text= "\\u2603 \\\\u2603";
Object proposal= performTestISO_8859_1();
assertEquals("\\u2603 \\\\u2603", fDocumentCommand.text);
assertNull(proposal);
}
public void testPasteFromPropertiesFileISO_8859_1_06() throws Exception {
fDocumentCommand.text= "key=value\\\nsecond line";
Object proposal= performTestISO_8859_1();
assertEquals("key=value\\\nsecond line", fDocumentCommand.text);
assertNull(proposal);
}
public void testPasteFromPropertiesFileISO_8859_1_07() throws Exception {
fDocumentCommand.text= "\\:\\=";
Object proposal= performTestISO_8859_1();
assertEquals("\\:\\=", fDocumentCommand.text);
assertNull(proposal);
}
//change encoding of file
public void testChangeEncodingOfFile_01() throws Exception {
fDocumentCommand.text= "\u2603";
performTestUTF8();
assertEquals("\u2603", fDocumentCommand.text);
fPropertiesFileUTF8.setCharset(ISO_8859_1, null);
fDocumentCommand.text= "\u2603";
performTestUTF8();
assertEquals("\\u2603", fDocumentCommand.text);
fPropertiesFileUTF8.setCharset(UTF_8, null);
}
public void testChangeEncodingOfFile_02() throws Exception {
fDocumentCommand.text= "\u2603";
performTestISO_8859_1();
assertEquals("\\u2603", fDocumentCommand.text);
fPropertiesFileISO_8859_1.setCharset(UTF_8, null);
fDocumentCommand.text= "\u2603";
performTestISO_8859_1();
assertEquals("\u2603", fDocumentCommand.text);
fPropertiesFileISO_8859_1.setCharset(ISO_8859_1, null);
}
}