dartlang.org/
class TestRunner{Function _setUp;set setUp(Function func)=>_setUp=func;Function _tearDown;set tearDown(Function func)=>_tearDown=func;Map<String,Function> tests;TestRunner(){_setUp=null;_tearDown=null;tests=new LinkedHashMap<String,Function>();}add(message,test)=>tests[message]=test;run()=>((){var cnt=0;var failures=0;var errors=0;tests.forEach((message,test){cnt++;try{if(_setUp!=null)_setUp();test();print('${message} : Green!');}catch(ExpectException e){print('${message} : Red!');print(' ${e}');failures++;}catch(Exception e){print('${message} : Error!');print(' ${e}');errors++;}finally{if(_tearDown!=null)_tearDown();}});print('Tests run: ${cnt}, Failures: ${failures}, Errors: ${errors}');})();}
main() {
var runner = new TestRunner();
var fizzBuzz;
runner.setUp = () => fizzBuzz = new FizzBuzz();
runner.add('speak number by 1', () => Expect.equals('1', fizzBuzz.speak(1)));
runner.add('speak number by 2', () => Expect.equals('2', fizzBuzz.speak(2)));
runner.add('speak Fizz by 3', () => Expect.equals('Fizz', fizzBuzz.speak(3)));
runner.add('speak Fizz by 6', () => Expect.equals('Fizz', fizzBuzz.speak(6)));
runner.add('speak Buzz by 5', () => Expect.equals('Buzz', fizzBuzz.speak(5)));
runner.add('speak FizzBuzz by 15', () => Expect.equals('FizzBuzz', fizzBuzz.speak(15)));
runner.run();
}
class FizzBuzz {
speak(number) {
var isFizz = (number % 3 == 0);
var isBuzz = (number % 5 == 0);
if (isFizz && isBuzz) return 'FizzBuzz';
if (isFizz) return 'Fizz';
if (isBuzz) return 'Buzz';
return number.toString();
}
}