package rabbitescape.engine.util;
import static rabbitescape.engine.util.Util.*;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Map;
import java.util.TreeMap;
public class FakeFileSystem implements FileSystem
{
private final Map<String, String[]> files;
public FakeFileSystem( Object... namesAndContents )
{
reAssert( namesAndContents.length % 2 == 0 ); // Even number of args
files = new TreeMap<>();
for ( int i = 0; i < namesAndContents.length; i += 2 )
{
String name = (String)namesAndContents[i];
String[] contents = (String[])namesAndContents[ i + 1 ];
files.put( name, contents );
}
}
@Override
public boolean exists( String fileName )
{
return files.containsKey( fileName );
}
@Override
public String[] readLines( String fileName )
throws FileNotFoundException, IOException
{
if ( exists( fileName ) )
{
return files.get( fileName );
}
else
{
throw new FileNotFoundException(
"File '" + fileName + " not found." );
}
}
@Override
public String read( String fileName )
throws FileNotFoundException, IOException
{
return join( "\n", readLines( fileName ) );
}
@Override
public void write( String fileName, String contents )
{
files.put( fileName, contents.split( "\n" ) );
}
@Override
public String parent( String filePath )
{
int i = filePath.lastIndexOf( '/' );
if ( i != -1 )
{
return filePath.substring( 0, i );
}
else
{
return "";
}
}
@Override
public void mkdirs( String dirPath )
{
String parent = parent( dirPath );
if ( !Util.isEmpty( parent ) && !exists( parent ) )
{
mkdirs( parent );
}
files.put( dirPath, new String[] {} );
}
}