package td5.p1;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

import org.junit.jupiter.api.Test;

import td5.p1.arme.Arme;
import td5.p1.personnage.Orc;
import td5.p1.personnage.Personnage;
import td5.p1.personnage.Tauren;

public class testArmes {

	@Test
	public void test1() {
		Tauren diablon = new Tauren("Diablon", 15);
		Orc azag = new Orc("Azag", 5);

		diablon.attack(azag);
		azag.attack(diablon);
		assertEquals(100, azag.getHp());
		assertEquals(95, diablon.getHp());
	}

	@Test
	public void test2() {
		WeaponFactory wf = new WeaponFactory();
		Arme w = wf.createWeapon("SWORD", "excalibur");
		Arme w1 = wf.getWeapon("excalibur");
		assertEquals(w, w1);
		Personnage azag = new Orc("Azag", 5);
		try {
			assertEquals(Class.forName("td5.p1.arme.Epée"), azag.getArme().getClass());
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}		
	}

	@Test
	public void test3() {
		WeaponFactory wp = new WeaponFactory();
		WeaponFactory wp2 = new ModernWeaponFactory();
		String nom = "Ref";
		int i = 0;
		Arme a1 = wp.createWeapon("SWORD", nom + i);
		i++;
		Arme a2 = wp2.createWeapon("Dague", nom + i);
		i++;
		Arme a3 = wp2.createWeapon("Fusil", nom + i);
		i++;
		Arme a4 = wp2.createWeapon("Missil", nom + i); // Type non reconnu
		assertTrue(a1 != null);
		assertTrue(a2 != null);
		assertTrue(a3 != null);
		assertTrue(a4 == null);
		assertEquals(a1, wp.getWeapon(nom + 0)); // On retrouve une arme créée par un autre
		assertEquals(a3, wp.getWeapon(nom + 2));
	}

}