📄 fsmovietest.java
字号:
/*
* FSMovieTest.java
* Transform
*
* Copyright (c) 2001-2006 Flagstone Software Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* * Neither the name of Flagstone Software Ltd. nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package com.flagstone.transform.test;
import java.io.*;
import com.flagstone.transform.*;
import com.flagstone.transform.tools.*;
public class FSMovieTest
{
private static String newline = System.getProperty("line.separator");
private static int iterations = 100;
private File sourceDir = null;
private File destDir = null;
private File log = null;
private StringBuffer buffer = null;
private String extension = ".swf";
public FSMovieTest()
{
}
/**
* @testng.configuration beforeTest = "true" alwaysRun = "true"
* @testng.parameters value = "srcDir dstDir logFile"
*/
public void configure(String srcDir, String dstDir, String logFile)
{
sourceDir = new File(srcDir);
destDir = new File(dstDir);
if (destDir.getPath().length() > 0 && destDir.exists() == false)
assert destDir.mkdirs() : "Count not create directory: "+destDir;
if (logFile.length() > 0)
{
log = new File(logFile);
buffer = new StringBuffer();
}
}
/**
* @testng.configuration afterTest = "true" alwaysRun = "true"
*/
public void finish()
{
if (buffer != null)
{
try
{
FileOutputStream stream = new FileOutputStream(log);
stream.write(buffer.toString().getBytes());
stream.close();
}
catch (IOException e)
{
assert false : "Cannot write log file: "+log.getPath();
}
}
}
/**
* @testng.test dataProvider="files"
*/
public void decode(String file)
{
try
{
new FSMovie(new File(sourceDir, file).getPath());
}
catch (Exception e)
{
assert false : file+": "+e.toString();
}
}
/**
* @testng.test dataProvider="files"
*/
public void encode(String file)
{
try
{
File srcFile = new File(sourceDir, file);
File destFile = new File(destDir, file);
FSMovie movie = new FSMovie(srcFile.getPath());
movie.encodeToFile(destFile.getPath());
}
catch (Exception e)
{
assert false : file+": "+e.toString();
}
}
/**
* @testng.test dataProvider="files"
*/
public void lazyDecode(String file)
{
try
{
File srcFile = new File(sourceDir, file);
FSMovie movie = new FSMovie();
movie.setDecodeActions(false);
movie.setDecodeShapes(false);
movie.setDecodeGlyphs(false);
movie.decodeFromFile(srcFile.getPath());
}
catch (Exception e)
{
assert false : file+": "+e.toString();
}
}
/**
* @testng.test dataProvider="files"
*/
public void lazyEncode(String file)
{
try
{
File srcFile = new File(sourceDir, file);
File destFile = new File(destDir, file);
FSMovie movie = new FSMovie();
movie.setDecodeActions(false);
movie.setDecodeShapes(false);
movie.setDecodeGlyphs(false);
movie.decodeFromFile(srcFile.getPath());
movie.encodeToFile(destFile.getPath());
}
catch (Exception e)
{
assert false : file+": "+e.toString();
}
}
/**
* @testng.test dataProvider="files"
*/
public void clone(String file)
{
try
{
File srcFile = new File(sourceDir, file);
File destFile = new File(destDir, file);
FSMovie movie = new FSMovie(srcFile.getPath());
FSMovie clone = (FSMovie)movie.clone();
clone.encodeToFile(destFile.getPath());
}
catch (Exception e)
{
assert false : file+": "+e.toString();
}
}
/**
* @testng.test dataProvider="files"
*/
public void toText(String file)
{
try
{
File srcFile = new File(sourceDir, file);
File dstFile = new File(destDir, file.substring(0, file.length()-3)+"txt");
new TextDump(new String[] {
"--fileIn", srcFile.getPath(),
"--fileOut", dstFile.getPath()});
}
catch (Throwable e)
{
assert false : file+": "+e.toString();
}
}
/*
* Methods for benchmarking
*/
/**
* @testng.test dataProvider="files"
*/
public void benchmarkDecode(String file)
{
try
{
File swfFile = new File(sourceDir, file);
byte[] bytes = new byte[(int)swfFile.length()];
FileInputStream stream = new FileInputStream(swfFile);
stream.read(bytes);
stream.close();
System.gc();
double before = (double)System.currentTimeMillis();
for (int i=0; i<iterations; i++)
{
new FSMovie().decodeFromData(bytes);
}
double duration = (System.currentTimeMillis() - before)/(double)iterations;
buffer.append(file).append('\t').append(duration).append(newline);
}
catch (Exception e)
{
assert false : file+": "+e.toString();
}
}
/**
* @testng.test dataProvider="files"
*/
public void benchmarkEncode(String file)
{
try
{
File srcFile = new File(sourceDir, file);
FSMovie movie = new FSMovie(srcFile.getPath());
System.gc();
double before = (double)System.currentTimeMillis();
for (int i=0; i<iterations; i++)
{
movie.encode();
}
double duration = (System.currentTimeMillis() - before)/(double)iterations;
buffer.append(file).append('\t').append(duration).append(newline);
}
catch (Exception e)
{
assert false : file+": "+e.toString();
}
}
/**
* @testng.test dataProvider="files"
*/
public void benchmarkLazyDecode(String file)
{
try
{
File swfFile = new File(sourceDir, file);
byte[] bytes = new byte[(int)swfFile.length()];
FileInputStream stream = new FileInputStream(swfFile);
stream.read(bytes);
stream.close();
System.gc();
double before = (double)System.currentTimeMillis();
for (int i=0; i<iterations; i++)
{
FSMovie movie = new FSMovie();
movie.setDecodeActions(false);
movie.setDecodeShapes(false);
movie.setDecodeGlyphs(false);
movie.decodeFromData(bytes);
}
double duration = (System.currentTimeMillis() - before)/(double)iterations;
buffer.append(file).append('\t').append(duration).append(newline);
}
catch (Exception e)
{
assert false : file+": "+e.toString();
}
}
/**
* @testng.test dataProvider="files"
*/
public void benchmarkLazyEncode(String file)
{
try
{
File srcFile = new File(sourceDir, file);
FSMovie movie = new FSMovie();
movie.setDecodeActions(false);
movie.setDecodeShapes(false);
movie.setDecodeGlyphs(false);
movie.decodeFromFile(srcFile.getPath());
System.gc();
double before = (double)System.currentTimeMillis();
for (int i=0; i<iterations; i++)
{
movie.encode();
}
double duration = (System.currentTimeMillis() - before)/(double)iterations;
buffer.append(file).append('\t').append(duration).append(newline);
}
catch (Exception e)
{
assert false : file+": "+e.toString();
}
}
/**
* @testng.data-provider name="files"
*/
public Object[][] findFiles()
{
FilenameFilter filter = new FilenameFilter()
{
public boolean accept(File directory, String name) {
return name.endsWith(extension);
}
};
String[] files = sourceDir.list(filter);
Object[][] parameters = new Object[files.length][1];
for (int i=0; i<files.length; i++)
parameters[i] = new Object[] { files[i] };
return parameters;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -