/******************************************************************************* * 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); } }