Skip to content

Instantly share code, notes, and snippets.

@gregoriokusowski
Created August 9, 2012 15:41
Show Gist options
  • Save gregoriokusowski/3305267 to your computer and use it in GitHub Desktop.
Save gregoriokusowski/3305267 to your computer and use it in GitHub Desktop.
String Calculator Kata realizado na Prime Systems em POA. 06/09/2011.
package tdd.kata;
public class Calculadora {
public Integer add(String string) {
if (string.equals("")) return 0;
else if(string.equals("1")) return 1;
String delimitador = "[,|\n]";
if (string.startsWith("//")) {
delimitador = string.substring(2,3);
string = string.substring(4);
}
String negativos = "";
String[] numeros = string.split("["+ delimitador + "]");
Integer total = 0;
for(String numero : numeros){
Integer novoValor = new Integer(numero);
if(novoValor < 0) {
negativos += numero + ",";
}
if(novoValor < 1001){
total += novoValor;
}
}
if(!negativos.isEmpty()){
throw new RuntimeException("Nao esperado " + negativos);
}
return total;
}
}
package tdd.kata;
import static org.junit.Assert.*;
import java.util.Random;
import org.junit.Before;
import org.junit.Test;
public class CalculadoraTest {
Calculadora calculadora;
@Before
public void prepara(){
calculadora = new Calculadora();
}
@Test
public void testComUmaStringVaziaDeveRetornarZero() {
Integer resultado = calculadora.add("");
assertEquals(new Integer(0), resultado);
}
private Integer randomPositivoMenorQueMil(){
Random numeroQualquer = new Random();
return numeroQualquer.nextInt(1000);
}
@Test
public void testComUmaStringContendoUmNumeroRetornarUmNumero() {
Integer numeroGerado = randomPositivoMenorQueMil();
Integer resultado = calculadora.add(numeroGerado.toString());
assertEquals(numeroGerado, resultado);
}
@Test
public void testComUmaStringContendoUmEDoisRetornarTres() {
Integer resultado = calculadora.add("1,2");
assertEquals(new Integer(3), resultado);
}
@Test
public void testComUmaStringContendoUmEDoisTresRetornaSeis() {
Integer resultado = calculadora.add("1,2,3");
assertEquals(new Integer(6), resultado);
}
@Test
public void testComUmaStringContendoVirgulaeNewLine() {
Integer resultado = calculadora.add("1,2\n3");
assertEquals(new Integer(6), resultado);
}
@Test
public void testComUmDelimitadorEscolhido() {
Integer resultado = calculadora.add("//|\n1|2");
assertEquals(new Integer(3), resultado);
}
@Test(expected=Exception.class)
public void testDeveLancarExceptionComNegativos() {
calculadora.add("//|\n-11|2");
}
@Test
public void testDeveLancarExceptionComMensagemQundoReceberNegativos() {
Exception exception = null;
try{
calculadora.add("//|\n-11|-22");
}catch(RuntimeException e){
exception = e;
}
assertTrue(exception.getMessage().contains("-11"));
assertTrue(exception.getMessage().contains("-22"));
}
@Test
public void testDeveIgnorarNumerosMaioresQueMil() {
Integer resultado = calculadora.add("2,1001");
assertEquals(new Integer(2), resultado);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment