package br.com.caelum.stella.inwords;
import static org.junit.Assert.assertEquals;
import java.util.Locale;
import org.junit.Test;
/**
* @author <a href="mailto:hprange@gmail.com">Henrique Prange</a>
*/
public class DolarNumericToWordsConverterTest {
private final NumericToWordsConverter converter = new NumericToWordsConverter(new FormatoDeDolar(), Locale.ENGLISH);
@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.0;
String actual = converter.toWords(one);
assertEquals("one dollar", actual);
}
@Test
public void shouldTransformLongOneInWords() {
long one = 1L;
String actual = converter.toWords(one);
assertEquals("one dollar", actual);
}
@Test
public void shouldTransformOneCentInWords() {
double val = 0.01;
String actual = converter.toWords(val);
assertEquals("one cent", actual);
}
@Test
public void shouldTransformDoubleOneWithCentsInWords() {
double val = 1.65;
String actual = converter.toWords(val);
assertEquals("one dollar and sixty-five cents", actual);
}
@Test
public void shouldTransform2InWords() {
double two = 2;
String actual = converter.toWords(two);
assertEquals("two dollars", actual);
}
@Test
public void shouldTransform14InWords() {
double fourteen = 14;
String actual = converter.toWords(fourteen);
assertEquals("fourteen dollars", actual);
}
@Test
public void shouldTransform53InWordsUsingAnd() {
double fiftyThree = 53;
String actual = converter.toWords(fiftyThree);
assertEquals("fifty-three dollars", actual);
}
@Test
public void shouldTransformOneHundredInWords() {
double oneHundred = 100;
String actual = converter.toWords(oneHundred);
assertEquals("one hundred dollars", actual);
}
@Test
public void shouldTransformOneHundredInWordsUsingAnd() {
double oneHundredAndNine = 109;
String actual = converter.toWords(oneHundredAndNine);
assertEquals("one hundred and nine dollars", actual);
}
@Test
public void shouldTransformTwoHundredInWords() {
double twoHundred = 200;
String actual = converter.toWords(twoHundred);
assertEquals("two hundred dollars", actual);
}
@Test
public void shouldTransformThousandInWords() {
double thousand = 1000;
String actual = converter.toWords(thousand);
assertEquals("one thousand dollars", actual);
}
@Test
public void shouldTransformThousandInWordsUsingAnd() {
double thousand = 1031;
String actual = converter.toWords(thousand);
assertEquals("one thousand and thirty-one dollars", actual);
}
@Test
public void shouldTransformAMillionIntoNumberInWords() {
double oneMillion = 1000000;
String actual = converter.toWords(oneMillion);
assertEquals("one million dollars", actual);
}
@Test
public void shouldTransformAMillionIntoNumberInWordsUsingAnd() {
double twoHundred = 1000150.99;
String actual = converter.toWords(twoHundred);
assertEquals("one million and one hundred and fifty dollars and ninety-nine cents", actual);
}
@Test
public void shouldTransformAMillionAndThousandIntoNumberInWordsUsingAnd() {
double twoHundred = 1023850;
String actual = converter.toWords(twoHundred);
assertEquals("one million, twenty-three thousand and eight hundred and fifty dollars", actual);
}
@Test
public void shouldTransformANumberInWordsUsingFraction() {
double twoHundred = 0.22;
String actual = converter.toWords(twoHundred);
assertEquals("twenty-two cents", actual);
}
@Test
public void shouldTransformOneDecimalWords() {
double oneDecimal = 0.1;
String actual = converter.toWords(oneDecimal);
assertEquals("ten cents", actual);
}
@Test
public void shouldRoundAndTransformANumberInWordsUsingFraction() {
double twoHundred = 0.229;
String words = converter.toWords(twoHundred);
assertEquals("twenty-three cents", words);
}
@Test
public void shouldTransformAThousandAndOne() {
double number = 1001;
String words = converter.toWords(number);
assertEquals("one thousand and one dollars", words);
}
@Test
public void shouldTransformAMillionAndOne() {
double number = 1000001;
String words = converter.toWords(number);
assertEquals("one million and one dollars", words);
}
@Test
public void shouldTransformABillion() {
double number = 1E9;
String words = converter.toWords(number);
assertEquals("one billion dollars", words);
}
@Test
public void shouldTransform1000000000000000001AsLong() {
long number = (1000000000000000001L);
String words = converter.toWords(number);
assertEquals("one quintillion and one dollars", words);
}
@Test
public void shouldTransform999999999999999L() {
long number = 999999999999999L;
String words = converter.toWords(number);
assertEquals("nine hundred and ninety-nine trillion, " + "nine hundred and ninety-nine billion, "
+ "nine hundred and ninety-nine million, " + "nine hundred and ninety-nine thousand and "
+ "nine hundred and ninety-nine dollars", words);
}
}