Compare commits
No commits in common. "main" and "master" have entirely different histories.
|
@ -1,34 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:pong/main.dart';
|
|
||||||
import 'package:mockito/mockito.dart'
|
|
||||||
|
|
||||||
|
|
||||||
class MockGameScreen extends Mock implements GameScreen {}
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
// Test for the 'moveRacket' function
|
|
||||||
test('moveRacket', () {});
|
|
||||||
|
|
||||||
// Test for the 'moveBall' function, checking ball position updates and collision handling
|
|
||||||
test('moveBall updates ball position and handles collisions', () {
|
|
||||||
final gameScreenState = GameScreenState();
|
|
||||||
|
|
||||||
// Set the ball to an initial position
|
|
||||||
gameScreenState.ballPositionX = 50;
|
|
||||||
gameScreenState.ballPositionY = 50;
|
|
||||||
|
|
||||||
// Move the ball to the right and check the position
|
|
||||||
gameScreenState.moveBall(1.0);
|
|
||||||
expect(gameScreenState.ballPositionX, greaterThan(50));
|
|
||||||
|
|
||||||
// Move the ball down and check the position
|
|
||||||
gameScreenState.moveBall(1.0);
|
|
||||||
expect(gameScreenState.ballPositionY, greaterThan(50));
|
|
||||||
|
|
||||||
// Test collision with the walls
|
|
||||||
gameScreenState.ballPositionX = 0;
|
|
||||||
gameScreenState.ballSpeedX = -1.0;
|
|
||||||
gameScreenState.moveBall(1.0);
|
|
||||||
expect(gameScreenState.ballSpeedX, greaterThan(0));
|
|
||||||
});
|
|
||||||
}
|
|
|
@ -1,47 +0,0 @@
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:flutter/scheduler.dart';
|
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
|
|
||||||
import 'package:pong/main.dart';
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
// Widget test for the "Berühren um zu beginnen!" message
|
|
||||||
testWidgets('Tests "Berühren um zu beginnen!"', (WidgetTester tester) async {
|
|
||||||
final tapToStart = find.text("Berühren um zu beginnen!");
|
|
||||||
|
|
||||||
// Build the widget tree with StartScreen and pump the widget tree
|
|
||||||
await tester.pumpWidget(const MaterialApp(home: StartScreen()));
|
|
||||||
|
|
||||||
// Verify that the "Berühren um zu beginnen!" text is displayed
|
|
||||||
expect(tapToStart, findsOneWidget);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Widget test for the "Punkte:" message in GameScreen
|
|
||||||
testWidgets('Tests "Punkte:"', (WidgetTester tester) async {
|
|
||||||
final points = find.text("Punkte: 0");
|
|
||||||
|
|
||||||
// Build the widget tree with GameScreen and pump the widget tree
|
|
||||||
await tester.pumpWidget(const MaterialApp(home: GameScreen()));
|
|
||||||
|
|
||||||
// Verify that the "Punkte: 0" text is displayed
|
|
||||||
expect(points, findsOneWidget);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Widget test for the UI of StartScreen
|
|
||||||
testWidgets('StartScreen UI Test', (WidgetTester tester) async {
|
|
||||||
// Build our app and trigger a frame.
|
|
||||||
await tester.pumpWidget(const MaterialApp(
|
|
||||||
home: StartScreen(),
|
|
||||||
));
|
|
||||||
|
|
||||||
// Verify that the "Berühren um zu beginnen!" Text is displayed.
|
|
||||||
expect(find.text('Berühren um zu beginnen!'), findsOneWidget);
|
|
||||||
|
|
||||||
// Tap on the GestureDetector to navigate to GameScreen.
|
|
||||||
await tester.tap(find.byType(GestureDetector));
|
|
||||||
await tester.pump();
|
|
||||||
|
|
||||||
// Verify that the transition to GameScreen has occurred.
|
|
||||||
expect(find.byType(GameScreen), findsOneWidget);
|
|
||||||
});
|
|
||||||
}
|
|
Before Width: | Height: | Size: 544 B After Width: | Height: | Size: 544 B |
Before Width: | Height: | Size: 442 B After Width: | Height: | Size: 442 B |
Before Width: | Height: | Size: 721 B After Width: | Height: | Size: 721 B |
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 295 B After Width: | Height: | Size: 295 B |
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 406 B |
Before Width: | Height: | Size: 450 B After Width: | Height: | Size: 450 B |
Before Width: | Height: | Size: 282 B After Width: | Height: | Size: 282 B |
Before Width: | Height: | Size: 462 B After Width: | Height: | Size: 462 B |
Before Width: | Height: | Size: 704 B After Width: | Height: | Size: 704 B |
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 406 B |
Before Width: | Height: | Size: 586 B After Width: | Height: | Size: 586 B |
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 862 B |
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 862 B |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 762 B After Width: | Height: | Size: 762 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 68 B |
Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 68 B |
Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 68 B |
|
@ -1,65 +1,65 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class PongMenu extends StatelessWidget {
|
class PongMenu extends StatelessWidget {
|
||||||
// Constructor to initialize the PongMenu with required properties
|
// Constructor to initialize the PongMenu with required properties
|
||||||
const PongMenu({
|
const PongMenu({
|
||||||
super.key,
|
super.key,
|
||||||
required this.title,
|
required this.title,
|
||||||
required this.subTitle,
|
required this.subTitle,
|
||||||
required this.child,
|
required this.child,
|
||||||
});
|
});
|
||||||
|
|
||||||
final String title;
|
final String title;
|
||||||
final String subTitle;
|
final String subTitle;
|
||||||
final Widget child;
|
final Widget child;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
// Get the size of the screen
|
// Get the size of the screen
|
||||||
final mq = MediaQuery.of(context).size;
|
final mq = MediaQuery.of(context).size;
|
||||||
// Calculate the height and width of the dialog
|
// Calculate the height and width of the dialog
|
||||||
final dialogHeight = mq.height * 0.4;
|
final dialogHeight = mq.height * 0.4;
|
||||||
final dialogWidth = mq.width * 0.8;
|
final dialogWidth = mq.width * 0.8;
|
||||||
|
|
||||||
// Return a custom-styled Dialog with specified properties
|
// Return a custom-styled Dialog with specified properties
|
||||||
return Dialog(
|
return Dialog(
|
||||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
|
||||||
elevation: 0,
|
elevation: 0,
|
||||||
backgroundColor: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
child: Container(
|
child: Container(
|
||||||
width: dialogWidth,
|
width: dialogWidth,
|
||||||
height: dialogHeight,
|
height: dialogHeight,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: const Color.fromARGB(255, 33, 33, 33),
|
color: const Color.fromARGB(255, 33, 33, 33),
|
||||||
borderRadius: BorderRadius.circular(25),
|
borderRadius: BorderRadius.circular(25),
|
||||||
),
|
),
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisSize: MainAxisSize.max,
|
mainAxisSize: MainAxisSize.max,
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
children: [
|
children: [
|
||||||
// Display the title with custom styling
|
// Display the title with custom styling
|
||||||
Text(
|
Text(
|
||||||
title,
|
title,
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
fontSize: 30,
|
fontSize: 30,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
// Display the subTitle with custom styling
|
// Display the subTitle with custom styling
|
||||||
Text(
|
Text(
|
||||||
subTitle,
|
subTitle,
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
fontSize: 30,
|
fontSize: 30,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
// Display the child widget
|
// Display the child widget
|
||||||
child,
|
child,
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 101 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 520 B After Width: | Height: | Size: 520 B |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |