package br.com.caelum.stella.inwords;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
/**
* @author Victor dos Santos Pereira
* @author Leonardo Bessa
*/
public class RealNumericToWordsConverterTest {
private final NumericToWordsConverter converter = new NumericToWordsConverter(new FormatoDeReal());
@Test(expected = IllegalArgumentException.class)
public void shouldTransformNegativeLong() {
long negative = -1;
converter.toWords(negative);
}
@Test(expected = IllegalArgumentException.class)
public void shouldNotTransformNegativeDouble() {
double negative = -1;
converter.toWords(negative);
}
@Test
public void shouldTransform0InWords() {
double zero = 0;
String actual = converter.toWords(zero);
assertEquals("zero", actual);
}
@Test
public void shouldTransformLongZeroInWords() {
long zero = 0;
String actual = converter.toWords(zero);
assertEquals("zero", actual);
}
@Test
public void shouldTransform1InWords() {
double one = 1;
String actual = converter.toWords(one);
assertEquals("um real", actual);
}
@Test
public void shouldTransformLongOneInWords() {
long one = 1;
String actual = converter.toWords(one);
assertEquals("um real", actual);
}
@Test
public void shouldTransformDoubleOneWithCentsInWords() {
double val = 1.65;
String actual = converter.toWords(val);
assertEquals("um real e sessenta e cinco centavos", actual);
}
@Test
public void shouldTransform2InWords() {
double two = 2;
String actual = converter.toWords(two);
assertEquals("dois reais", actual);
}
@Test
public void shouldTransform14InWords() {
double fourteen = 14;
String actual = converter.toWords(fourteen);
assertEquals("quatorze reais", actual);
}
@Test
public void shouldTransformLong15InWords() {
long fifteen = 15;
String actual = converter.toWords(fifteen);
assertEquals("quinze reais", actual);
}
@Test
public void shouldTransform53InWordsUsingAnd() {
double fiftyThree = 53;
String actual = converter.toWords(fiftyThree);
assertEquals("cinquenta e três reais", actual);
}
@Test
public void shouldTransformOneHundredInWords() {
double oneHundred = 100;
String actual = converter.toWords(oneHundred);
assertEquals("cem reais", actual);
}
@Test
public void shouldTransformOneHundredInWordsUsingAnd() {
double oneHundredAndNine = 109;
String actual = converter.toWords(oneHundredAndNine);
assertEquals("cento e nove reais", actual);
}
@Test
public void shouldTransformTwoHundredInWords() {
double twoHundred = 200;
String actual = converter.toWords(twoHundred);
assertEquals("duzentos reais", actual);
}
@Test
public void shouldTransformThousandInWords() {
double thousand = 1000;
String actual = converter.toWords(thousand);
assertEquals("um mil reais", actual);
}
@Test
public void shouldTransformThousandInWordsUsingAnd() {
double thousand = 1031;
String actual = converter.toWords(thousand);
assertEquals("um mil e trinta e um reais", actual);
}
@Test
public void shouldTransformAMillionIntoNumberInWords() {
double oneMillion = 1000000;
String actual = converter.toWords(oneMillion);
assertEquals("um milhão de reais", actual);
}
@Test
public void shouldTransformAMillionIntoNumberInWordsUsingAnd() {
double twoHundred = 1000150.99;
String actual = converter.toWords(twoHundred);
assertEquals("um milhão e cento e cinquenta reais e noventa e nove centavos", actual);
}
@Test
public void shouldTransformAMillionAndThousandIntoNumberInWordsUsingAnd() {
double twoHundred = 1023850;
String actual = converter.toWords(twoHundred);
assertEquals("um milhão, vinte e três mil e oitocentos e cinquenta reais", actual);
}
@Test
public void shouldTransformANumberInWordsUsingFraction() {
double twoHundred = 0.22;
String actual = converter.toWords(twoHundred);
assertEquals("vinte e dois centavos", actual);
}
@Test
public void shouldTransformOneDecimalWords() {
double oneDecimal = 0.1;
String actual = converter.toWords(oneDecimal);
assertEquals("dez centavos", actual);
}
@Test
public void shouldRoundAndTransformANumberInWordsUsingFraction() {
double twoHundred = 0.229;
String words = converter.toWords(twoHundred);
assertEquals("vinte e três centavos", words);
}
@Test
public void shouldTransformAThousandAndOne() {
double number = 1001;
String words = converter.toWords(number);
assertEquals("um mil e um reais", words);
}
@Test
public void shouldTransformAMillionAndOne() {
double number = 1000001;
String words = converter.toWords(number);
assertEquals("um milhão e um reais", words);
}
@Test
public void shouldTransformABillion() {
double number = 1E9;
String words = converter.toWords(number);
assertEquals("um bilhão de reais", words);
}
@Test
public void shouldTransform1E12() {
double number = 1E12;
String words = converter.toWords(number);
assertEquals("um trilhão de reais", words);
}
@Test
public void shouldTransform1E15() {
double number = 1E15;
String words = converter.toWords(number);
assertEquals("um quatrilhão de reais", words);
}
@Test
public void shouldTransform1000000000000000001AsLong() {
long number = (1000000000000000001L);
String words = converter.toWords(number);
assertEquals("um quintilhão e um reais", words);
}
@Test
public void shouldTransform999999999999999L() {
long number = 999999999999999L;
String words = converter.toWords(number);
assertEquals("novecentos e noventa e nove trilhões, " + "novecentos e noventa e nove bilhões, "
+ "novecentos e noventa e nove milhões, " + "novecentos e noventa e nove mil e "
+ "novecentos e noventa e nove reais", words);
}
}