This commit is contained in:
147
test/calculator_logic_test.dart
Normal file
147
test/calculator_logic_test.dart
Normal file
@@ -0,0 +1,147 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:kalkulator/calculator_logic.dart';
|
||||
|
||||
void main() {
|
||||
late CalculatorLogic calc;
|
||||
|
||||
setUp(() {
|
||||
calc = CalculatorLogic();
|
||||
});
|
||||
|
||||
group('inputDigit', () {
|
||||
test('starts with 0', () {
|
||||
expect(calc.display, '0');
|
||||
});
|
||||
|
||||
test('replaces initial 0 with digit', () {
|
||||
calc.inputDigit('5');
|
||||
expect(calc.display, '5');
|
||||
});
|
||||
|
||||
test('appends digits', () {
|
||||
calc.inputDigit('1');
|
||||
calc.inputDigit('2');
|
||||
calc.inputDigit('3');
|
||||
expect(calc.display, '123');
|
||||
});
|
||||
});
|
||||
|
||||
group('inputDecimal', () {
|
||||
test('adds decimal point', () {
|
||||
calc.inputDigit('3');
|
||||
calc.inputDecimal();
|
||||
expect(calc.display, '3.');
|
||||
});
|
||||
|
||||
test('ignores second decimal point', () {
|
||||
calc.inputDigit('3');
|
||||
calc.inputDecimal();
|
||||
calc.inputDigit('1');
|
||||
calc.inputDecimal();
|
||||
expect(calc.display, '3.1');
|
||||
});
|
||||
});
|
||||
|
||||
group('addition', () {
|
||||
test('2 + 3 = 5', () {
|
||||
calc.inputDigit('2');
|
||||
calc.inputOperator('+');
|
||||
calc.inputDigit('3');
|
||||
calc.calculate();
|
||||
expect(calc.display, '5');
|
||||
});
|
||||
});
|
||||
|
||||
group('subtraction', () {
|
||||
test('9 - 4 = 5', () {
|
||||
calc.inputDigit('9');
|
||||
calc.inputOperator('-');
|
||||
calc.inputDigit('4');
|
||||
calc.calculate();
|
||||
expect(calc.display, '5');
|
||||
});
|
||||
});
|
||||
|
||||
group('multiplication', () {
|
||||
test('6 * 7 = 42', () {
|
||||
calc.inputDigit('6');
|
||||
calc.inputOperator('*');
|
||||
calc.inputDigit('7');
|
||||
calc.calculate();
|
||||
expect(calc.display, '42');
|
||||
});
|
||||
});
|
||||
|
||||
group('division', () {
|
||||
test('8 / 2 = 4', () {
|
||||
calc.inputDigit('8');
|
||||
calc.inputOperator('/');
|
||||
calc.inputDigit('2');
|
||||
calc.calculate();
|
||||
expect(calc.display, '4');
|
||||
});
|
||||
|
||||
test('division by zero returns Infinity', () {
|
||||
calc.inputDigit('5');
|
||||
calc.inputOperator('/');
|
||||
calc.inputDigit('0');
|
||||
calc.calculate();
|
||||
expect(calc.display, 'Infinity');
|
||||
});
|
||||
|
||||
test('decimal result: 7 / 2 = 3.5', () {
|
||||
calc.inputDigit('7');
|
||||
calc.inputOperator('/');
|
||||
calc.inputDigit('2');
|
||||
calc.calculate();
|
||||
expect(calc.display, '3.5');
|
||||
});
|
||||
});
|
||||
|
||||
group('chained operations', () {
|
||||
test('2 + 3 + 4 = 9', () {
|
||||
calc.inputDigit('2');
|
||||
calc.inputOperator('+');
|
||||
calc.inputDigit('3');
|
||||
calc.inputOperator('+');
|
||||
expect(calc.display, '5');
|
||||
calc.inputDigit('4');
|
||||
calc.calculate();
|
||||
expect(calc.display, '9');
|
||||
});
|
||||
});
|
||||
|
||||
group('clear', () {
|
||||
test('resets to 0', () {
|
||||
calc.inputDigit('5');
|
||||
calc.inputOperator('+');
|
||||
calc.inputDigit('3');
|
||||
calc.clear();
|
||||
expect(calc.display, '0');
|
||||
});
|
||||
});
|
||||
|
||||
group('toggleSign', () {
|
||||
test('positive to negative', () {
|
||||
calc.inputDigit('7');
|
||||
calc.toggleSign();
|
||||
expect(calc.display, '-7');
|
||||
});
|
||||
|
||||
test('negative to positive', () {
|
||||
calc.inputDigit('7');
|
||||
calc.toggleSign();
|
||||
calc.toggleSign();
|
||||
expect(calc.display, '7');
|
||||
});
|
||||
});
|
||||
|
||||
group('percent', () {
|
||||
test('50 percent = 0.5', () {
|
||||
calc.inputDigit('5');
|
||||
calc.inputDigit('0');
|
||||
calc.percent();
|
||||
expect(calc.display, '0.5');
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user