blob: 070fdf72b525403362ae973a584e21abfef138f4 [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.search.tests.filesearch;
import java.io.IOException;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.search.internal.core.text.FileCharSequenceProvider;
import org.eclipse.search.tests.ResourceHelper;
public class FileCharSequenceTests extends TestCase {
private final String TEST_CONTENT= "ABCDEFGHIJKLMNOPQRSTUVWXYZÜöäüèéùabcdefghijklmnopqrstuvwxyz1234567890@\'\"\n$¢"; //€
private IProject fProject;
public FileCharSequenceTests(String name) {
super(name);
}
public static Test allTests() {
return setUpTest(new TestSuite(FileCharSequenceTests.class));
}
public static Test setUpTest(Test test) {
return new JUnitSourceSetup(test);
}
public static Test suite() {
return allTests();
}
protected void setUp() throws Exception {
fProject= ResourceHelper.createProject("my-project"); //$NON-NLS-1$
}
protected void tearDown() throws Exception {
ResourceHelper.deleteProject("my-project"); //$NON-NLS-1$
}
public void testFileCharSequence() throws Exception {
StringBuffer buf= new StringBuffer();
for (int i= 0; i < 500; i++) {
buf.append(TEST_CONTENT);
}
String encoding= "ISO-8859-1";
testForEncoding(buf, encoding);
}
public void testFileCharSequence2() throws Exception {
StringBuffer buf= new StringBuffer();
for (int i= 0; i < 2000; i++) {
buf.append(TEST_CONTENT);
}
String encoding= "UTF-8";
testForEncoding(buf, encoding);
}
public void testFileCharSequence3() throws Exception {
StringBuffer buf= new StringBuffer();
for (int i= 0; i < FileCharSequenceProvider.BUFFER_SIZE * 2; i++) {
buf.append(TEST_CONTENT);
}
String encoding= "UTF-16";
testForEncoding(buf, encoding);
}
private void testForEncoding(CharSequence buf, String encoding) throws CoreException, IOException {
IFolder folder= ResourceHelper.createFolder(fProject.getFolder("folder1"));
IFile file1= ResourceHelper.createFile(folder, "file1", buf.toString(), encoding);
FileCharSequenceProvider provider= new FileCharSequenceProvider();
CharSequence cs= null;
try {
cs= provider.newCharSequence(file1);
assertEquals(encoding, cs, buf);
assertSubSequence(encoding, cs, buf, 0, buf.length() / 6);
assertSubSequence(encoding, cs, buf, buf.length() / 6, FileCharSequenceProvider.BUFFER_SIZE);
int pos= 8 * buf.length() / 9;
assertSubSequence(encoding, cs, buf, pos, buf.length() - pos);
CharSequence seq1a= cs.subSequence(100, 100 + FileCharSequenceProvider.BUFFER_SIZE);
CharSequence seq1e= buf.subSequence(100, 100 + FileCharSequenceProvider.BUFFER_SIZE);
assertSubSequence(encoding, seq1a, seq1e, 500, 500);
assertSubSequence(encoding, seq1a, seq1e, FileCharSequenceProvider.BUFFER_SIZE, 0);
} finally {
if (cs != null) {
provider.releaseCharSequence(cs);
}
file1.delete(true, null);
}
}
private void assertSubSequence(String message, CharSequence actual, CharSequence expected, int start, int length) {
CharSequence actualSub= actual.subSequence(start, start + length);
CharSequence expectedSub= expected.subSequence(start, start + length);
assertEquals(message + " - subsequence(" + start + ", " + length + ")", actualSub, expectedSub);
}
private void assertEquals(String desc, CharSequence actual, CharSequence expected) {
for (int i= 0; i < expected.length(); i++) {
assertEquals(desc + " - forward " + i, expected.charAt(i), actual.charAt(i));
}
assertEquals(desc + " - length", expected.length(), actual.length());
for (int i= expected.length() - 1; i >= 0; i--) {
assertEquals(desc + " - backward " + i, expected.charAt(i), actual.charAt(i));
}
for (int i= 0; i < expected.length(); i+= 567) {
assertEquals(desc + " - forward - steps" + i, expected.charAt(i), actual.charAt(i));
}
for (int i= 0; i < expected.length(); i+= FileCharSequenceProvider.BUFFER_SIZE) {
assertEquals(desc + " - forward - buffersize" + i, expected.charAt(i), actual.charAt(i));
}
assertOutOfBound(desc + "access at length", actual, expected.length());
assertOutOfBound(desc + "access at -1", actual, -1);
assertEquals(desc + " - length", actual.toString(), expected.toString());
}
private void assertOutOfBound(String message, CharSequence cs, int i) {
try {
cs.charAt(i);
} catch (IndexOutOfBoundsException e) {
return;
}
assertFalse(message, true);
}
}