/*
* Copyright (c) 2014 tabletoptool.com team.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/gpl.html
*
* Contributors:
* rptools.com team - initial implementation
* tabletoptool.com team - further development
*/
package com.t3.dice;
import java.util.Arrays;
import java.util.Random;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class DiceTests {
@DataProvider(name="diceProvider", parallel=false)
public Object[][] getChatParserData () {
return new Object[][] {
{DiceBuilder.roll(1).d(6),new Random(1),4,new int[]{4}},
{DiceBuilder.roll(5).d(8),new Random(1),17,new int[]{6,1,4,4,2}},
{DiceBuilder.roll(5).d(8).drop(1),new Random(1),16,new int[]{6,4,4,2}},
{DiceBuilder.roll(5).d(8).keep(3),new Random(1),14,new int[]{6,4,4}},
{DiceBuilder.roll(5).d(8).reroll(2),new Random(2),28,new int[]{3,4,6,7,8}},
{DiceBuilder.roll(5).d(8).s(4),new Random(1),3,new int[]{1,0,1,1,0}},
{DiceBuilder.roll(5).d(8).e(),new Random(2),29,new int[]{1,3,4,6,7,8}},
};
}
@Test(dataProvider="diceProvider")
public void testParsedChat(Dice d, Random r, int result, int[] results) {
d.roll(r);
Assert.assertEquals(d.getResult(),result);
Arrays.sort(d.getResults());
Arrays.sort(results);
Assert.assertEquals(d.getResults(),results, "Expected "+Arrays.toString(results)+" instead of "+Arrays.toString(d.getResults()));
}
@Test
public void testHighestResult() {
Dice d=DiceBuilder.roll(7).d(9);
d.roll(new Random(1));
Assert.assertEquals(d.getHighestResult(), 9);
}
@Test
public void testHerodBodyDamage() {
Dice d=DiceBuilder.roll(9).d(6);
d.roll(new Random(1));
Assert.assertEquals(d.getHeroBodyDamage(),0);
}
@Test
public void testRolling() {
Dice d=DiceBuilder.roll(3).d(6);
Assert.assertFalse(d.isRolled());
d.getResult();
Assert.assertTrue(d.isRolled());
}
@Test
public void specialDices() {
DiceBuilder.roll(4).df().roll();
DiceBuilder.roll(4).du().roll();
}
@DataProvider(name="shadowRunDataProvider", parallel=false)
public Object[][] getShadowrunDiceTestData() {
return new Object[][] {
{DiceBuilder.roll(5).sr4(),new Random(1),1,new int[]{0,0,0,0,1},false,false},
{DiceBuilder.roll(5).sr4().e(),new Random(5),4,new int[]{0,0,0,1,1,1,1},false,false},
{DiceBuilder.roll(5).sr4().g(4),new Random(5),2,new int[]{0,0,0,1,1},true,false},
{DiceBuilder.roll(5).sr4().e().g(4),new Random(5),4,new int[]{0,0,0,1,1,1,1},true,false},
{DiceBuilder.roll(2).sr4().e().g(4),new Random(3),0,new int[]{0,0},true,true},
};
}
@Test(dataProvider="shadowRunDataProvider")
public void shadowrunDice(ShadowrunDice srd, Random r, int expectedResult, int[] expectedResults, boolean isGlitch, boolean isCritiaclGlitch) {
srd.roll(r);
Assert.assertEquals(srd.getResult(), expectedResult);
Arrays.sort(srd.getResults());
Arrays.sort(expectedResults);
Assert.assertEquals(srd.getResults(), expectedResults, "Expected "+Arrays.toString(expectedResults)+" instead of "+Arrays.toString(srd.getResults()));
Assert.assertEquals(srd.isGlitch(),isGlitch);
Assert.assertEquals(srd.isCriticalGlitch(), isCritiaclGlitch);
}
}