Initial commit
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
for-solutions.com
2026-02-06 21:42:17 +01:00
commit 869dd771c9
132 changed files with 5261 additions and 0 deletions

View 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');
});
});
}

50
test/widget_test.dart Normal file
View File

@@ -0,0 +1,50 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:kalkulator/main.dart';
void main() {
testWidgets('displays 0 on start', (tester) async {
await tester.pumpWidget(const KalkulatorApp());
// '0' appears on both the display and the '0' button
expect(find.text('0'), findsWidgets);
});
testWidgets('tapping digit updates display', (tester) async {
await tester.pumpWidget(const KalkulatorApp());
await tester.tap(find.text('5'));
await tester.pump();
expect(find.text('5'), findsWidgets);
});
testWidgets('simple addition 3 + 2 = 5', (tester) async {
await tester.pumpWidget(const KalkulatorApp());
await tester.tap(find.text('3'));
await tester.pump();
await tester.tap(find.text('+'));
await tester.pump();
await tester.tap(find.text('2'));
await tester.pump();
await tester.tap(find.text('='));
await tester.pump();
expect(find.text('5'), findsWidgets);
});
testWidgets('clear resets display to 0', (tester) async {
await tester.pumpWidget(const KalkulatorApp());
await tester.tap(find.text('7'));
await tester.pump();
await tester.tap(find.text('C'));
await tester.pump();
expect(find.text('0'), findsWidgets);
});
testWidgets('all buttons are rendered', (tester) async {
await tester.pumpWidget(const KalkulatorApp());
for (final label in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']) {
expect(find.text(label), findsWidgets);
}
for (final label in ['+', '-', '*', '/', '=', 'C', '.', '%', '+/-']) {
expect(find.text(label), findsOneWidget);
}
});
}