Skip to content

Commit

Permalink
New compressor (#28)
Browse files Browse the repository at this point in the history
* .travis.ymlの修正

* .travis.ymlの修正 (#8)

* ライセンスバッチの追加

* .travis.ymlの修正

* バッチの修正

* バッチの修正

* 単体テストの自動生成プラグインをmavenに追加した。

* 単体テスト作成モジュール(evosuite)で作成したコードのうち、動作がおかしいものを修正した。

また、単体テストを実装に伴い、READMEも修正した。

* 玉田さん指摘, 修正していただいたpom.xmlファイル.
これに変更することで, 生成されたコードは`separateClassLoader`がfalseで生成される.
変更したpomでコードを生成すると,前の時に比べて, `Main`のカバレッジは0%ではなくなった.

* 修正を加えた`pom.xml`に修正したEvoSuiteによって生成された単体テストコード群.

* カバレッジが低かったMainのテスト部分の修正をした。これによりJaCoCoのカバレッジは90%を超えた。

* カバレッジのバッチを取得するためにtravisを使って、Coverallsを実行するようにtravis.ymlを修正した。

* coverallsのバッチを追加したREADME

* .travis.ymlを修正してテストをできるようにしていたが、書き方が間違っていたようである。そのため、動くのに必要なプログラムを修正した。

* jacocoによるカバレッジを出すつもりであったが、プラグインによるビルドがうまく行かないため,coberturaに切り替えた。

* 新しい圧縮形式zlibをするプログラムを追加した。

* 変更したファイルに出し忘れがあっため、追加でupする。(javadocのコメント付きファイル、verの数を増やしたMainファイル)

* 新しく作った圧縮プログラム(ZlibCompressor)のテストファイルを作っていなかったため、新規に追加した。

* Zlibのテストに必要なファイルを用意してなかったため、追加でupする。

* テストプログラムにあった不具合の原因を修正した。
(拡張子の付け方を間違えていた。)

* テスト実行時エラーとなる原因を修正した。(時間内に終了しなかったため処理を軽くした。)
  • Loading branch information
g1644222 authored Aug 9, 2020
1 parent e57ad1c commit fdcd80b
Show file tree
Hide file tree
Showing 12 changed files with 273 additions and 19 deletions.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@
* `mvn install`

## 使用方法
プログラムを実行するには、`java`コマンドの`jar`オプションにcompressor-0.1.0.jarを指定してください。
* `java -jar target/compressor-1.0.0.jar [OPTIONS] <FILES...>`
プログラムを実行するには、`java`コマンドの`jar`オプションにcompressor-1.2.0.jarを指定してください。
* `java -jar target/compressor-1.2.0.jar [OPTIONS] <FILES...>`
ヘルプメッセージは以下の通りです。
```sh
OPTIONS
-c, --compress <ALGORITHM> specifies compress algorithm. Default is `gzip`.
Available: gzip, and bzip2
Available: gzip, and bzip2, zlib
-d, --delete-original Delete original files after compression.
-v, --version print version.
-h, --help print this message.
Expand Down
37 changes: 30 additions & 7 deletions src/main/java/jp/ac/kyoto_su/ise/compressor/Arguments.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
import java.util.stream.Stream;

public class Arguments {
/**
*引数を解析するためのクラス。
*圧縮方式、圧縮元を消す、ヘルプ、バージョンの確認、ファイルの指定を行う。
*/
@Option(name="-c", aliases="--compress", metaVar="ALGORITHM", usage="specifies compress algorithm. Default is \"gzip\"")
private String compressType = "gzip";
@Option(name="-d", aliases="--delete-original", usage="delete original files after compression.")
Expand All @@ -23,40 +27,59 @@ public class Arguments {
private List<String> arguments = new ArrayList<>();

public boolean needsToHelp() {
/**
*ヘルプを出力するかのメソッド。
*/
return helpFlag || arguments.size() == 0;
}

public boolean deleteOriginal() {
/**
*圧縮元のデータを消すかどうかを判断するメソッド。
*/
return deleteFlag;
}

public boolean versioninformation() {
/**
*バージョン情報を出力するか判断するメソッド
*/
return versionFlag;
}

public Stream<String> stream() {
/**
*ストリーム情報を返すメソッド。
*/
return arguments.stream();
}

public Compressor compressor() throws NoCompressorException {
/**
*圧縮方式を返すメソッド。
*/
return Compressor.compressor(compressType);
}

public static Arguments parse(String[] args) throws CmdLineException {
/**
*引数を解析するためのメソッド。
*/
Arguments arguments = new Arguments();
CmdLineParser parser = new CmdLineParser(arguments); //パースを読み込むためのクラス
parser.parseArgument(args);
return arguments;
}

public static final String helpMessage() {

// ヘルプメッセージ
// -cは圧縮アルゴリズムの指定、デフォルトは「gzip」。他に「bzip2」が使用可能
// -dは圧縮元のファイルを削除
// -vは現在のシステムのバージョンを表示
// -hはこのメッセージを出力

/**
*
* ヘルプメッセージ
* -cは圧縮アルゴリズムの指定、デフォルトは「gzip」。他に「bzip2」が使用可能
* -dは圧縮元のファイルを削除
* -vは現在のシステムのバージョンを表示
* -hはこのメッセージを出力
*/
return String.format("java -jar compressor.jar [OPTIONS] <FILES...>%n" +
"OPTIONS%n" +
" -c, --compress <ALGORITHM> specifies compress algorithm. Default is \"gzip\".%n" +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
import org.apache.commons.compress.compressors.bzip2.BZip2CompressorOutputStream;

public class BZip2Compressor implements Compressor {
/**
*bzip圧縮を実行するクラス。
*/
@Override
public void compress(InputStream in, OutputStream out) throws IOException {
BZip2CompressorOutputStream bzip2Out = new BZip2CompressorOutputStream(out);
Expand Down
13 changes: 13 additions & 0 deletions src/main/java/jp/ac/kyoto_su/ise/compressor/Compressor.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,37 @@
import java.util.Optional;

public interface Compressor {
/**
*圧縮をするための親クラス。
*それぞれの圧縮クラスへデータを渡したり、データを書き込む処理などがある。
*/
void compress(InputStream in, OutputStream out) throws IOException;

String renameFile(String originalFileName);

default void drain(InputStream in, OutputStream out) throws IOException {
/**
*圧縮するデータを書き込むメソッド
*/
int data;
while((data = in.read()) != -1) {
out.write(data);
}
}

static Compressor compressor(String algorithm) throws NoCompressorException {
/**
*各圧縮クラスを実行するためのメソッド
*/
if(Objects.equals(algorithm, "gzip")){
return new GzipCompressor();
}
else if(Objects.equals(algorithm, "bzip2")){
return new BZip2Compressor();
}
else if(Objects.equals(algorithm, "zlib")){
return new ZlibCompressor();
}
throw new NoCompressorException(String.format("%s: compressor not found", algorithm));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
import java.util.zip.GZIPOutputStream;

public class GzipCompressor implements Compressor {
/**
* gzipを使った圧縮をするクラス
*/
@Override
public void compress(InputStream in, OutputStream out) throws IOException {
GZIPOutputStream gzipOut = new GZIPOutputStream(out);
Expand Down
15 changes: 14 additions & 1 deletion src/main/java/jp/ac/kyoto_su/ise/compressor/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,16 @@
import java.util.Optional;

public class Main {
public static final String VERSION = "1.0.0";
/**
*圧縮をするためのメインプログラム。
*ここでは引数を解析するクラスやデータを圧縮するクラスにデータを渡す。
*/
public static final String VERSION = "1.2.0";

public Main(String[] arguments) throws Exception {
/**
*引数を解析してヘルプとバージョンの情報を出力するか、圧縮処理をするかを決定する。
*/
Arguments args = Arguments.parse(arguments);
if(args.versioninformation()) {
System.out.println(Arguments.version());
Expand All @@ -24,6 +31,9 @@ public Main(String[] arguments) throws Exception {
}

public void perform(Arguments args) throws NoCompressorException {
/**
*引数のファイルをストリームにして圧縮するメソッドに渡す。
*/
Compressor compressor = args.compressor();
args.stream().map(file -> Pair.of(file, compressor.renameFile(file))) //mapに指定された形式にしたストリームを返す
.forEach(pair -> performEach(compressor, pair));
Expand All @@ -34,6 +44,9 @@ public void perform(Arguments args) throws NoCompressorException {
}

public void performEach(Compressor compressor, Pair<String, String> pair) {
/**
*ストリーム情報に合わせて圧縮する方式を帰るメソッド。
*/
String originalFileName = pair.map((l, r) -> l);
String destFileName = pair.map((l, r) -> r);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package jp.ac.kyoto_su.ise.compressor;

public class NoCompressorException extends Exception {
/**
* 圧縮するクラスの呼び出しに失敗した場合、エラー原因を出力する
*/
public NoCompressorException(String message) {
super(message);
}
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/jp/ac/kyoto_su/ise/compressor/Pair.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
import java.util.function.Function;

public class Pair<L, R> {
/**
*圧縮するファイルの入力と出力をマップで保存するためのクラス。
*/
private L left;
private R right;

Expand Down
26 changes: 26 additions & 0 deletions src/main/java/jp/ac/kyoto_su/ise/compressor/ZlibCompressor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package jp.ac.kyoto_su.ise.compressor;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import java.util.Scanner;
import java.util.zip.*;
import java.io.*;

public class ZlibCompressor implements Compressor{
/**
*zlib圧縮を実行するクラス。
*/
@Override
public void compress(InputStream in, OutputStream out) throws IOException {
OutputStream zlibOut = new DeflaterOutputStream(out);
drain(in, zlibOut);
// zlibOut.finish();
}

@Override
public String renameFile(String originalFileName) {
return originalFileName + ".zlib";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import org.junit.runner.RunWith;


@RunWith(EvoRunner.class) @EvoRunnerParameters(mockJVMNonDeterminism = true, useVFS = true, useVNET = true, resetStaticState = true, useJEE = true)
@RunWith(EvoRunner.class) @EvoRunnerParameters(mockJVMNonDeterminism = true, useVFS = true, useVNET = true, resetStaticState = true, useJEE = true)

public class Arguments_ESTest extends Arguments_ESTest_scaffolding {

Expand All @@ -38,10 +38,10 @@ public void test01() throws Throwable {
stringArray0[6] = "jp.ac.kyoto_su.ise.compressor.Arguments";
stringArray0[7] = "sv)Bg";
stringArray0[8] = "&(Aq'dNa5@ij)Y";
try {
try {
Arguments.parse(stringArray0);
fail("Expecting exception: Exception");

} catch(Exception e) {
//
// \"-#7\" is not a valid option
Expand All @@ -54,11 +54,11 @@ public void test01() throws Throwable {
public void test02() throws Throwable {

// Undeclared exception!
try {
try {
Arguments.parse((String[]) null);

fail("Expecting exception: NullPointerException");

} catch(NullPointerException e) {
//
// args is null
Expand Down Expand Up @@ -92,10 +92,10 @@ public void test04() throws Throwable {
public void test05() throws Throwable {
String[] stringArray0 = new String[1];
// Undeclared exception!
try {
try {
Arguments.parse(stringArray0);
fail("Expecting exception: NullPointerException");

} catch(NullPointerException e) {
//
// no message in exception (getMessage() returned null)
Expand All @@ -107,7 +107,7 @@ public void test05() throws Throwable {
@Test(timeout = 4000)
public void test06() throws Throwable {
String string0 = Arguments.version();
assertEquals("1.0.0", string0);
assertEquals("1.2.0", string0);
}

@Test(timeout = 4000)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/*
* This file was automatically generated by EvoSuite
* Wed Jun 03 07:55:01 GMT 2020
*/

package jp.ac.kyoto_su.ise.compressor;

import org.junit.Test;
import static org.junit.Assert.*;
import static org.evosuite.shaded.org.mockito.Mockito.*;
import static org.evosuite.runtime.EvoAssertions.*;
import java.io.InputStream;
import java.io.OutputStream;
import jp.ac.kyoto_su.ise.compressor.ZlibCompressor;
import org.evosuite.runtime.EvoRunner;
import org.evosuite.runtime.EvoRunnerParameters;
import org.evosuite.runtime.ViolatedAssumptionAnswer;
import org.junit.runner.RunWith;


@RunWith(EvoRunner.class) @EvoRunnerParameters(mockJVMNonDeterminism = true, useVFS = true, useVNET = true, resetStaticState = true, useJEE = true)
public class ZlibCompressor_ESTest extends ZlibCompressor_ESTest_scaffolding {

@Test(timeout = 4000)
public void test0() throws Throwable {
ZlibCompressor ZlibCompressor0 = new ZlibCompressor();
InputStream inputStream0 = mock(InputStream.class, new ViolatedAssumptionAnswer());
doReturn((-315), (-315), (-1)).when(inputStream0).read();
OutputStream outputStream0 = mock(OutputStream.class, new ViolatedAssumptionAnswer());
ZlibCompressor0.compress(inputStream0, outputStream0);
}

@Test(timeout = 4000)
public void test1() throws Throwable {
ZlibCompressor ZlibCompressor0 = new ZlibCompressor();
OutputStream outputStream0 = mock(OutputStream.class, new ViolatedAssumptionAnswer());
// Undeclared exception!
try {
ZlibCompressor0.compress((InputStream) null, outputStream0);
fail("Expecting exception: NullPointerException");

} catch(NullPointerException e) {
//
// no message in exception (getMessage() returned null)
//
verifyException("jp.ac.kyoto_su.ise.compressor.Compressor", e);
}
}

@Test(timeout = 4000)
public void test2() throws Throwable {
ZlibCompressor ZlibCompressor0 = new ZlibCompressor();
String string0 = ZlibCompressor0.renameFile("");
assertEquals(".zlib", string0);
}

}
Loading

0 comments on commit fdcd80b

Please sign in to comment.