Newer
Older
Algolike / src / test / java / AlgoTest.java
import models.Algo;
import org.junit.jupiter.api.Test;

import java.util.AbstractMap;

import static org.junit.jupiter.api.Assertions.*;

class AlgoTest {

    @Test
    void ゲーム開始時0から11のカードで構成されたデッキとそこから2枚引いて構成された各プレイヤーの手札が存在する() {
        Algo algo = new Algo();
        printState(algo);
        assertEquals(2, algo.getHandsA().size());
        assertEquals(2, algo.getHandsB().size());
    }

    @Test
    void Aはデッキから引いたカードでのアタックが成功しBのカードが1枚表になる() {
        //初期化
        Algo algo = new Algo();
        var iniHandsANum = algo.getHandsA().size();
        var initDeckNum=algo.getDeck().size();
        //正解のカードを選択させるための変数
        var guess = algo.getHandsB().get(0).getKey();
        var target = 0;
        //テスト対象メソッド
        algo.drawA(guess, target);

        printState(algo);
        //Aはデッキから引いているので,実行前と比べて枚数が1枚増えているか
        assertEquals(iniHandsANum+1,algo.getHandsA().size());
        //Aによってアタックを成功されたBのカードが表になっているか
        assertEquals(true, algo.getHandsB().get(0).getValue());
        //Aがデッキから引いているので,デッキの枚数が1枚減っているか
        assertEquals(initDeckNum-1,algo.getDeck().size());

    }
    @Test
    void Aはデッキから引いたカードでのアタックが失敗しAのデッキに表のカードが追加される() {
        //初期化
        Algo algo = new Algo();
        var iniHandsANum = algo.getHandsA().size();
        var initDeckNum=algo.getDeck().size();
        //正解でないカードを選択させるための変数
        var guess = algo.getHandsB().get(0).getKey()+1;
        var target = 0;
        var top = algo.getDeck().get(0);
        //テスト対象メソッド
        algo.drawA(guess, target);

        printState(algo);
        //Aはデッキから引いているので,実行前と比べて枚数が1枚増えている

        assertEquals(iniHandsANum+1,algo.getHandsA().size());
        //アタックの失敗でBのカードが表になっていない
        assertEquals(false, algo.getHandsB().get(0).getValue());
        //アタックが失敗したので,使用したカードが表になっている
        assertTrue(algo.getHandsA().contains(new AbstractMap.SimpleEntry<>(top.getKey(),true)));
        //Aがデッキから引いているので,デッキの枚数が1枚減っている
        assertEquals(initDeckNum-1,algo.getDeck().size());

    }
    @Test
    void Bはデッキから引いたカードでのアタックが成功しAのカードが1枚表になる() {
        //初期化
        Algo algo = new Algo();
        var iniHandsBNum = algo.getHandsB().size();
        var initDeckNum=algo.getDeck().size();
        //正解のカードを選択させるための変数
        var guess = algo.getHandsA().get(0).getKey();
        var target = 0;
        //テスト対象メソッド
        algo.drawB(guess, target);

        printState(algo);
        //Aはデッキから引いているので,実行前と比べて枚数が1枚増えているか
        assertEquals(iniHandsBNum+1,algo.getHandsB().size());
        //Aによってアタックを成功されたBのカードが表になっているか
        assertEquals(true, algo.getHandsA().get(0).getValue());
        //Aがデッキから引いているので,デッキの枚数が1枚減っているか
        assertEquals(initDeckNum-1,algo.getDeck().size());
    }
    @Test
    void Aは手札から選んだカードでのアタックが成功しBのカードが1枚表になる() {
        //初期化
        Algo algo = new Algo();

        //正解のカードを選択させるための変数
        var guess = algo.getHandsB().get(0).getKey();
        var target = 0;
        var attacker = 0;

        //テスト対象メソッド
        algo.selectA(guess, attacker, target);

        printState(algo);
        //Aによってアタックを成功されたBのカードが表になっているか
        assertEquals(true, algo.getHandsB().get(target).getValue());
        //Aのアタックを成功しているので,使用したカードが表になっていないか
        assertEquals(false, algo.getHandsA().get(attacker).getValue());
    }
    @Test
    void Aは手札から選んだカードでのアタックが失敗し選んだカードが表になる() {
        //初期化
        Algo algo = new Algo();

        //間違いのカードを選択させるための変数
        var target = 0;
        var attacker = 0;
        var guess = algo.getHandsB().get(target).getKey()+1;
        //テスト対象メソッド
        algo.selectA(guess, attacker, target);

        printState(algo);
        //Aによってアタックを成功されたBのカードが表になっていないか
        assertEquals(false, algo.getHandsB().get(target).getValue());
        //Aのアタックが失敗しているので,使用したカードが表になっているか
        assertEquals(true, algo.getHandsA().get(attacker).getValue());
    }

    void printState(Algo algo){
        String s="";
        s+="deck:\n";
        for(var i : algo.getDeck()){
            s+="\t"+i.getKey()+"\t"+(i.getValue()?"open":"closed")+"\n";
        }
        s+="handsA:\n";
        for(var i : algo.getHandsA()){
            s+="\t"+i.getKey()+"\t"+(i.getValue()?"open":"closed")+"\n";
        }
        s+="handsB:\n";
        for(var i : algo.getHandsB()){
            s+="\t"+i.getKey()+"\t"+(i.getValue()?"open":"closed")+"\n";
        }
        System.out.println(s);

    }
}