/******************************************************************************* * Copyright (c) 2010 Wind River Systems, Inc. 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: * Markus Schorn - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.parser.tests.scanner; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import junit.framework.TestSuite; import org.eclipse.cdt.core.testplugin.util.BaseTestCase; import org.eclipse.cdt.internal.core.parser.scanner.AbstractCharArray; import org.eclipse.cdt.internal.core.parser.scanner.FileCharArray; import org.eclipse.cdt.internal.core.parser.scanner.LazyCharArray; public class FileCharArrayTests extends BaseTestCase { public static TestSuite suite() { return suite(FileCharArrayTests.class); } private File fFile; @Override protected void tearDown() throws Exception { if (fFile != null) { fFile.delete(); } } public void testAlignedMinus() throws IOException { testFile(true, LazyCharArray.CHUNK_SIZE*3-1); } public void testAlignedEven() throws IOException { testFile(true, LazyCharArray.CHUNK_SIZE*3); } public void testAlignedPlus() throws IOException { testFile(true, LazyCharArray.CHUNK_SIZE*3+1); } public void testUnAlignedMinus() throws IOException { testFile(false, LazyCharArray.CHUNK_SIZE*3-1); } public void testUnAlignedEven() throws IOException { testFile(false, LazyCharArray.CHUNK_SIZE*3); } public void testUnAlignedPlus() throws IOException { testFile(false, LazyCharArray.CHUNK_SIZE*3+1); } private void testFile(boolean aligned, int charSize) throws IOException { createFile(aligned, charSize); AbstractCharArray charArray; final FileInputStream inputStream = new FileInputStream(fFile); try { charArray = FileCharArray.create(fFile.getPath(), "utf-8", inputStream); } finally { inputStream.close(); } checkContent(charArray, LazyCharArray.CHUNK_SIZE, charSize); assertEquals(charSize, charArray.getLength()); ((LazyCharArray) charArray).testClearData(); checkContent(charArray, LazyCharArray.CHUNK_SIZE, charSize); assertEquals(charSize, charArray.getLength()); } public void checkContent(AbstractCharArray charArray, int from, int to) { for (int i = from; i < to; i++) { assertEquals(i % 127, charArray.get(i)); if (i+3<=to) { char[] dest= new char[3]; charArray.arraycopy(i, dest, 0, 3); for (int j = 0; j < dest.length; j++) { assertEquals((i+j) % 127, dest[j]); } } } } private void createFile(boolean aligned, int charSize) throws IOException { fFile= File.createTempFile("data", ".txt"); OutputStream out= new BufferedOutputStream(new FileOutputStream(fFile)); try { if (!aligned) { out.write(0xc2); out.write(0xa2); } else { out.write(0); } for (int i = 1; i < charSize; i++) { out.write(i % 127); } } finally { out.close(); } } }