import junit.framework.TestCase;
import java.io.*;

import xlsx.*;
import assert.*;


// データベース関連
// import org.dbunit.Assertion;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.ITable;
import org.dbunit.operation.DatabaseOperation;

// import org.dbunit.dataset.excel.*;


public class TestTest extends TestCase {
  public void setUp(){
    System.out.println("テスト前に呼ばれる");
    t = new test();
  }
  
  public void tearDown(){
    System.out.println("テスト後に呼ばれる");
  }
  
  public void testMain(){
    System.out.println(t);
  }
  
  private test t = null;
  
  public void testAdd(){
    System.out.println(t);
    assertEquals(2,t.add(1,1));
    assertEquals(2,t.add(1,2));
  }
  
  public void testDivide(){
    System.out.println(t);
    assertEquals(1,t.divide(1,1));
    
    // // ただ呼ぶだけでいいとおもう。
    // t.divide(1,0);
    
    try {
      assertEquals(0,t.divide(1,0));
      fail();
    } catch (ArithmeticException e){
    } catch (Exception e){
      fail();
    }
    
  }
  
  public void testReadDB() throws Exception {
    // System.out.println("test2");
    // DBAccessor db = new DBAccessor("org.sqlite.JDBC","jdbc:sqlite:test.db3","","");
    // 
    // System.out.println("test1");
    // //準備データをDBに入れる
    // DatabaseOperation.CLEAN_INSERT.execute(
      // new DatabaseConnection(db.getConnection()),
      // new XlsDataSet(new File("export.xls")));
    // System.out.println("test");
    // 
    // //ロジックの実行
    // // t.readDB();
    // 
    // //DBから実際のデータの取得
    // IDataSet databaseDataSet = new DatabaseConnection(db.getConnection()).createDataSet();
    // ITable actualTable = databaseDataSet.getTable("test1");
    // System.out.println(actualTable.getRowCount());
    // // 
    // // //期待値データの取得
    // // IDataSet expectedDataSet = new FlatXmlDataSet(SampleTest.class
    // // .getResourceAsStream("expected.xml"));
    // // ITable expectedTable = expectedDataSet.getTable("cd");
    // // 
    // // //期待値と実際のデータの比較
    // // Assertion.assertEquals(expectedTable, actualTable);
  }
  
  public void testWriteDB() throws Exception {
    // System.out.println("test2");
    DBAccessor db = DBAccessor.createInstance("org.sqlite.JDBC","jdbc:sqlite:resource/test.db3","","");
    // 
    // System.out.println("test1");
    //準備データをDBに入れる
    DatabaseOperation.CLEAN_INSERT.execute(
      new DatabaseConnection(db.getConnection()),
      new XlsDataSet(new File("resource/export.xlsx")));
    
    //ロジックの実行
    assertEquals(true,t.writeDB());
    
    //DBから実際のデータの取得
    IDataSet databaseDataSet = new DatabaseConnection(db.getConnection()).createDataSet();
    ITable actualTable = databaseDataSet.getTable("test1");
    System.out.println(actualTable.getRowCount());
    
    //期待値データの取得
    IDataSet expectedDataSet = new XlsDataSet(new File("resource/writeDB_output.xlsx"));
    ITable expectedTable = expectedDataSet.getTable("test1");
    
    //期待値と実際のデータの比較
    Assertion.assertEquals(expectedTable, actualTable);
  }
}