/**
* Copyright (C) 2010-2017 Gordon Fraser, Andrea Arcuri and EvoSuite
* contributors
*
* This file is part of EvoSuite.
*
* EvoSuite is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3.0 of the License, or
* (at your option) any later version.
*
* EvoSuite is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with EvoSuite. If not, see <http://www.gnu.org/licenses/>.
*/
package org.evosuite.runtime;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import org.evosuite.runtime.mock.java.io.MockFile;
import org.evosuite.runtime.mock.java.io.MockFileInputStream;
import org.evosuite.runtime.testdata.EvoSuiteFile;
import org.evosuite.runtime.testdata.FileSystemHandling;
import org.junit.After;
import org.junit.Assert;
import org.junit.Test;
public class FileSystemHandlingTest {
private static final boolean VFS = RuntimeSettings.useVFS;
@After
public void restoreProperties(){
RuntimeSettings.useVFS = VFS;
}
@Test
public void createNewFileByAddingData() throws IOException{
RuntimeSettings.useVFS = true;
Runtime.getInstance().resetRuntime();
byte[] data = new byte[]{42,66};
EvoSuiteFile file = new EvoSuiteFile("foo");
MockFile mf = new MockFile(file.getPath());
Assert.assertFalse(mf.exists());
FileSystemHandling.appendDataToFile(file, data);
Assert.assertTrue(mf.exists());
MockFileInputStream in = new MockFileInputStream(file.getPath());
byte[] buffer = new byte[4];
int count = in.read(buffer);
in.close();
Assert.assertEquals(data.length, count);
Assert.assertEquals(data[0],buffer[0]);
Assert.assertEquals(data[1],buffer[1]);
Assert.assertEquals(0,buffer[2]);
Assert.assertEquals(0,buffer[3]);
}
@Test
public void createNewFileByAddingLine() throws IOException{
RuntimeSettings.useVFS = true;
Runtime.getInstance().resetRuntime();
String data = "A new line to be added";
EvoSuiteFile file = new EvoSuiteFile("foo");
MockFile mf = new MockFile(file.getPath());
Assert.assertFalse(mf.exists());
FileSystemHandling.appendStringToFile(file, data);
Assert.assertTrue(mf.exists());
//try read bytes directly
MockFileInputStream in = new MockFileInputStream(file.getPath());
byte[] buffer = new byte[1024];
in.read(buffer);
in.close();
String byteString = new String(buffer);
Assert.assertTrue("Read: "+byteString, byteString.startsWith(data));
//try with InputStreamReader
InputStreamReader reader = new InputStreamReader(new MockFileInputStream(file.getPath()));
char[] cbuf = new char[1024];
reader.read(cbuf);
reader.close();
String charString = new String(cbuf);
Assert.assertTrue("Read: "+charString, charString.startsWith(data));
//try BufferedReader
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new MockFileInputStream(file.getPath())));
cbuf = new char[1024];
bufferedReader.read(cbuf);
bufferedReader.close();
charString = new String(cbuf);
Assert.assertTrue("Read: "+charString, charString.startsWith(data));
//try with Scanner
Scanner fromFile = new Scanner(new MockFileInputStream(file.getPath()));
String fileContent = fromFile.nextLine();
fromFile.close();
Assert.assertEquals(data,fileContent);
}
}