diff --git a/.drone.yml b/.drone.yml
index 13bc83b..edc2351 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -15,6 +15,14 @@ steps:
- cd ./Sources/bowlin_project/
- flutter build apk
+ - name: test
+ image: cirrusci/flutter:stable
+ commands:
+ - cd Sources/bowlin_project/
+ - flutter pub get
+ - flutter test --machine --coverage
+ depends_on: [ app-build ]
+
# build CONTAINER for sonar on flutter IMAGE
- name: code-analysis
image: cirrusci/flutter:stable
@@ -28,8 +36,8 @@ steps:
- unzip -o $HOME/.sonar/sonar-scanner.zip -d $HOME/.sonar/
- export PATH=$SONAR_SCANNER_HOME/bin:$PATH
- export SONAR_SCANNER_OPTS="-server"
- - sonar-scanner -D sonar.projectKey=Bowl_in -D sonar.sources=./Sources/bowlin_project -D sonar.host.url=https://codefirst.iut.uca.fr/sonar -D sonar.coverageReportPaths=./Sources/bowlin_project/coverage/lcov.info
- depends_on: [ app-build ]
+ - sonar-scanner -D sonar.projectKey=Bowl_in -D sonar.sources=./Sources/bowlin_project -D sonar.host.url=https://codefirst.iut.uca.fr/sonar -D sonar.flutter.coverage.reportPath=./Sources/bowlin_project/coverage/lcov.info
+ depends_on: [ test ]
# database container deployment
- name: deploy-container-postgresql
diff --git a/README.md b/README.md
index 913fe47..780372a 100644
--- a/README.md
+++ b/README.md
@@ -17,6 +17,8 @@
[](https://codefirst.iut.uca.fr/sonar/dashboard?id=Bowl_in)
[](https://codefirst.iut.uca.fr/sonar/dashboard?id=Bowl_in)
[](https://codefirst.iut.uca.fr/sonar/dashboard?id=Bowl_in)
+[](https://codefirst.iut.uca.fr/sonar/dashboard?id=Bowl_in)
+
---
diff --git a/Sources/bowlin_project/android/app/src/main/res/drawable-v21/launch_background.xml b/Sources/bowlin_project/android/app/src/main/res/drawable-v21/launch_background.xml
index 1cb7aa2..0430efb 100644
--- a/Sources/bowlin_project/android/app/src/main/res/drawable-v21/launch_background.xml
+++ b/Sources/bowlin_project/android/app/src/main/res/drawable-v21/launch_background.xml
@@ -3,10 +3,4 @@
-
-
diff --git a/Sources/bowlin_project/android/app/src/main/res/drawable/launch_background.xml b/Sources/bowlin_project/android/app/src/main/res/drawable/launch_background.xml
index 8403758..8af0f98 100644
--- a/Sources/bowlin_project/android/app/src/main/res/drawable/launch_background.xml
+++ b/Sources/bowlin_project/android/app/src/main/res/drawable/launch_background.xml
@@ -3,10 +3,4 @@
-
-
diff --git a/Sources/bowlin_project/android/app/src/main/res/values/styles.xml b/Sources/bowlin_project/android/app/src/main/res/values/styles.xml
index 5fac679..45578d6 100644
--- a/Sources/bowlin_project/android/app/src/main/res/values/styles.xml
+++ b/Sources/bowlin_project/android/app/src/main/res/values/styles.xml
@@ -1,17 +1,10 @@
-
-
diff --git a/Sources/bowlin_project/lib/config/app_router.dart b/Sources/bowlin_project/lib/config/app_router.dart
index 1bc45be..5ac59c7 100644
--- a/Sources/bowlin_project/lib/config/app_router.dart
+++ b/Sources/bowlin_project/lib/config/app_router.dart
@@ -1,8 +1,6 @@
import 'package:bowl_in/model/AbstractRound.dart';
import 'package:bowl_in/model/GameDetail.dart';
-import 'package:bowl_in/model/Round.dart';
import 'package:bowl_in/views/ingame_screen2.dart';
-import 'package:bowl_in/widgets/button_new_party.dart';
import 'package:flutter/cupertino.dart';
import 'package:go_router/go_router.dart';
diff --git a/Sources/bowlin_project/lib/main.dart b/Sources/bowlin_project/lib/main.dart
index 1046f67..50a8162 100644
--- a/Sources/bowlin_project/lib/main.dart
+++ b/Sources/bowlin_project/lib/main.dart
@@ -1,11 +1,5 @@
-import 'package:bowl_in/views/game_screen.dart';
-import 'package:bowl_in/views/ingame_screen.dart';
-import 'package:bowl_in/views/main_screen.dart';
-import 'package:bowl_in/views/rank_screen.dart';
-import 'package:bowl_in/views/welcome_screen.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
-import 'package:go_router/go_router.dart';
import 'package:bowl_in/config/app_router.dart';
import 'model/IManager.dart';
diff --git a/Sources/bowlin_project/lib/model/AbstractRound.dart b/Sources/bowlin_project/lib/model/AbstractRound.dart
index b636611..b5293db 100644
--- a/Sources/bowlin_project/lib/model/AbstractRound.dart
+++ b/Sources/bowlin_project/lib/model/AbstractRound.dart
@@ -1,5 +1,7 @@
import 'Player.dart';
+final maxScoreInFrame = 30;
+
abstract class AbstractRound {
int? _firstThrow;
int? _secondThrow;
@@ -28,7 +30,11 @@ abstract class AbstractRound {
int? get points => _points;
set points(int? value) {
- _points = value;
+ if((value??0)>=maxScoreInFrame){
+ _points=maxScoreInFrame;
+ }else {
+ _points = value;
+ }
}
@@ -76,11 +82,14 @@ abstract class AbstractRound {
}
void update(int val){
+ print(" ROUND " + number.toString() + "UPDATE : " + val.toString());
+
points = (points ?? 0) + val;
previousRound?.update(val);
}
void unsubscribePreviousRound(){
+ print("UNSUBSCRIBE");
previousRound?.unsubscribePreviousRound();
previousRound=null;
}
diff --git a/Sources/bowlin_project/lib/model/Game.dart b/Sources/bowlin_project/lib/model/Game.dart
index 8f6c909..7c73eee 100644
--- a/Sources/bowlin_project/lib/model/Game.dart
+++ b/Sources/bowlin_project/lib/model/Game.dart
@@ -1,44 +1,17 @@
import 'Player.dart';
class Game {
- int _id;
- DateTime _date;
- int _pointsCurrentUser;
- bool _isFinished;
- List _players = [];
+ final int _id;
+ final DateTime _date;
+ final int _pointsCurrentUser;
+ final List _players;
// Constructor
- Game(this._id, this._date, this._pointsCurrentUser, this._isFinished,
+ Game(this._id, this._date, this._pointsCurrentUser,
this._players);
- // Getters and setters
int get id => _id;
-
- set id(int value) {
- _id = value;
- }
-
DateTime get date => _date;
-
- set date(DateTime value) {
- _date = value;
- }
-
int get pointsCurrentUser => _pointsCurrentUser;
-
- set pointsCurrentUser(int value) {
- _pointsCurrentUser = value;
- }
-
- bool get isFinished => _isFinished;
-
- set isFinished(bool value) {
- _isFinished = value;
- }
-
List get players => _players;
-
- set playersId(List value) {
- _players = value;
- }
}
diff --git a/Sources/bowlin_project/lib/model/GameDetail.dart b/Sources/bowlin_project/lib/model/GameDetail.dart
index 4b159e9..51c0cd4 100644
--- a/Sources/bowlin_project/lib/model/GameDetail.dart
+++ b/Sources/bowlin_project/lib/model/GameDetail.dart
@@ -1,26 +1,21 @@
import 'package:bowl_in/model/AbstractRound.dart';
import 'package:bowl_in/model/Game.dart';
-import 'package:bowl_in/model/GamePlayer.dart';
import 'package:bowl_in/model/LastRound.dart';
-
import 'Player.dart';
import 'Round.dart';
import 'User.dart';
class GameDetail {
int _id;
- DateTime _time;
+ final DateTime _time;
Player? _winner;
- int _nbPoints;
- bool _isFinished;
- int _host;
- List _rounds = [];
- List _players = [];
+ final int _host;
+ final List _rounds = [];
+ final List _players;
final Map _points = {};
// Constructor
- GameDetail(this._id, this._time, this._winner, this._nbPoints,
- this._isFinished, this._host, this._players) {
+ GameDetail(this._id, this._time, this._winner, this._host, this._players) {
for (int i = 1; i <= 9; i++) {
players.forEach((element) {
this.rounds.add(Round(null, null, 0, element, i));
@@ -29,7 +24,6 @@ class GameDetail {
players.forEach((element) {
this.rounds.add(LastRound(null, null, 0, element, 10, null));
});
-
}
// Getters and setters
@@ -41,75 +35,48 @@ class GameDetail {
DateTime get time => _time;
- set time(DateTime value) {
- _time = value;
- }
-
Player? get winner => _winner;
set winner(Player? value) {
_winner = value;
}
- int get nbPoints => _nbPoints;
-
- set nbPoints(int value) {
- _nbPoints = value;
- }
-
- bool get isFinished => _isFinished;
-
- set isFinished(bool value) {
- _isFinished = value;
- }
-
int get host => _host;
- set host(int value) {
- _host = value;
- }
-
List get rounds => _rounds;
- set rounds(List value) {
- _rounds = value;
- }
-
List get players => _players;
- set players(List value) {
- _players = value;
- }
-
-
Map get points => _points;
- void addGameToUsers(){
- for(var p in players){
- if(p is User){
- p.games.add(Game(this.id, this.time, points[p] ?? 0, true, players));
+ void addGameToUsers() {
+ for (var p in players) {
+ if (p is User) {
+ p.games.add(Game(this.id, this.time, points[p] ?? 0, players));
p.stat.updateStats(this, p);
}
}
}
- void computeWinner(){
+ void computeWinner() {
print(getRank().entries.first.key.name);
this.winner = getRank().entries.first.key;
}
- void computeScores(){
+ void computeScores() {
print("====COMPUTE POINTS====");
- for(var element in rounds){
- points[element.player] = (points[element.player] ?? 0) + (element.points ?? 0);
+ for (var element in rounds) {
+ points[element.player] =
+ (points[element.player] ?? 0) + (element.points ?? 0);
+ print(element.points);
}
computeWinner();
addGameToUsers();
}
Map getRank() {
- var sortedByValueMap = Map.fromEntries(
- points.entries.toList()..sort((e1, e2) => e2.value.compareTo(e1.value)));
+ var sortedByValueMap = Map.fromEntries(points.entries.toList()
+ ..sort((e1, e2) => e2.value.compareTo(e1.value)));
return sortedByValueMap;
}
}
diff --git a/Sources/bowlin_project/lib/model/GamePlayer.dart b/Sources/bowlin_project/lib/model/GamePlayer.dart
index 8deb5c6..61af1ad 100644
--- a/Sources/bowlin_project/lib/model/GamePlayer.dart
+++ b/Sources/bowlin_project/lib/model/GamePlayer.dart
@@ -1,3 +1,4 @@
+import 'package:bowl_in/model/AbstractRound.dart';
import 'package:bowl_in/model/IManager.dart';
import 'package:flutter/cupertino.dart';
@@ -20,7 +21,14 @@ class GamePlayer {
_game = value;
}
- void onNext(bool isRoundFinished, BuildContext context) {
+ AbstractRound? get currentRound {
+ if (currentRoundIndex < game.rounds.length){
+ return game.rounds[currentRoundIndex];
+ }
+ return null;
+ }
+
+ void onNext(bool isRoundFinished, BuildContext? context) {
if (isRoundFinished) {
print("++");
currentRoundIndex++;
@@ -32,7 +40,7 @@ class GamePlayer {
_parent.gameMgr.addGame(game);
game.computeScores();
- context.go("/scoreboard", extra: game);
+ context?.go("/scoreboard", extra: game);
} else {
print("IN GAME : " + currentRoundIndex.toString());
if (game.rounds[currentRoundIndex] is Round) {
@@ -40,7 +48,7 @@ class GamePlayer {
} else {
print("LAST ROUND");
}
- context.pushReplacement("/in-game",
+ context?.pushReplacement("/in-game",
extra: game.rounds[currentRoundIndex]);
}
}
diff --git a/Sources/bowlin_project/lib/model/IGameManager.dart b/Sources/bowlin_project/lib/model/IGameManager.dart
index 6040d3c..2b4eff8 100644
--- a/Sources/bowlin_project/lib/model/IGameManager.dart
+++ b/Sources/bowlin_project/lib/model/IGameManager.dart
@@ -1,9 +1,7 @@
import 'GameDetail.dart';
import 'Player.dart';
-import 'User.dart';
abstract class IGameManager {
- // Methods
GameDetail getGameById(int id);
List getGamesByPlayerId(int id);
List getGamesByPlayer(Player user);
diff --git a/Sources/bowlin_project/lib/model/IManager.dart b/Sources/bowlin_project/lib/model/IManager.dart
index 00ecb8c..27ea88c 100644
--- a/Sources/bowlin_project/lib/model/IManager.dart
+++ b/Sources/bowlin_project/lib/model/IManager.dart
@@ -1,11 +1,8 @@
import 'package:bowl_in/model/GameDetail.dart';
import 'package:bowl_in/model/GamePlayer.dart';
-
import 'User.dart';
-import 'Game.dart';
import 'IUserManager.dart';
import 'IGameManager.dart';
-import 'Game.dart';
abstract class IManager {
late User _userCurrent;
diff --git a/Sources/bowlin_project/lib/model/LastRound.dart b/Sources/bowlin_project/lib/model/LastRound.dart
index 71cbb86..5448035 100644
--- a/Sources/bowlin_project/lib/model/LastRound.dart
+++ b/Sources/bowlin_project/lib/model/LastRound.dart
@@ -1,11 +1,10 @@
import 'package:bowl_in/model/AbstractRound.dart';
-import 'Player.dart';
-
-class LastRound extends AbstractRound{
+class LastRound extends AbstractRound {
int? _thirdThrow;
- LastRound(super.firstThrow, super.secondThrow, super.points, super.player, super.number, this._thirdThrow);
+ LastRound(super.firstThrow, super.secondThrow, super.points, super.player,
+ super.number, this._thirdThrow);
int? get thirdThrow => _thirdThrow;
@@ -15,21 +14,21 @@ class LastRound extends AbstractRound{
@override
bool computeNext(int val) {
- if(firstThrow==null){
- firstThrow=val;
- if(previousRound?.isSpare() ?? false){
+ if (firstThrow == null) {
+ firstThrow = val;
+ if (previousRound?.isSpare() ?? false) {
previousRound?.update(val);
}
return false;
- }else if(secondThrow==null){
- secondThrow=val;
- if ((firstThrow??0)+(secondThrow??0)<10){
+ } else if (secondThrow == null) {
+ secondThrow = val;
+ if ((firstThrow ?? 0) + (secondThrow ?? 0) < 10) {
computePoints();
- return true ;
+ return true;
}
return false;
- }else if((firstThrow??0)+(secondThrow??0)>=10){
- thirdThrow=val;
+ } else if ((firstThrow ?? 0) + (secondThrow ?? 0) >= 10) {
+ thirdThrow = val;
}
computePoints();
return true;
@@ -37,35 +36,36 @@ class LastRound extends AbstractRound{
@override
void computePoints() {
- points = (firstThrow??0)+(secondThrow??0)+(thirdThrow??0);
+ points = (firstThrow ?? 0) + (secondThrow ?? 0) + (thirdThrow ?? 0);
+ print("Compute points : " + points.toString());
- if(previousRound?.isStrike()??false){
- update(points??0);
+ if (previousRound?.isStrike() ?? false) {
+ update(points ?? 0);
}
unsubscribePreviousRound();
}
@override
- bool shotIsStrike(){
- if(firstThrow==null){
+ bool shotIsStrike() {
+ if (firstThrow == null) {
return true;
- }else if(secondThrow==null){
- return firstThrow==10;
- }else{
- return secondThrow==10;
+ } else if (secondThrow == null) {
+ return firstThrow == 10;
+ } else {
+ return secondThrow == 10;
}
}
@override
int getNbSpares() {
int nb = 0;
- if(firstThrow!=10){
- if((firstThrow??0)+(secondThrow??0)==10){
- nb+=1;
+ if (firstThrow != 10) {
+ if ((firstThrow ?? 0) + (secondThrow ?? 0) == 10) {
+ nb += 1;
}
- }else{
- if((thirdThrow??0)+(secondThrow??0)==10) {
- nb+=1;
+ } else {
+ if ((thirdThrow ?? 0) + (secondThrow ?? 0) == 10) {
+ nb += 1;
}
}
return nb;
@@ -74,17 +74,17 @@ class LastRound extends AbstractRound{
@override
int getNbStrike() {
int nb = 0;
- if(firstThrow==10){
- nb+=1;
- if(secondThrow==10){
- nb+=1;
- if(thirdThrow==10) {
- nb+=1;
+ if (firstThrow == 10) {
+ nb += 1;
+ if (secondThrow == 10) {
+ nb += 1;
+ if (thirdThrow == 10) {
+ nb += 1;
}
}
- }else{
- if(thirdThrow==10) {
- nb+=1;
+ } else {
+ if (thirdThrow == 10) {
+ nb += 1;
}
}
return nb;
@@ -92,23 +92,21 @@ class LastRound extends AbstractRound{
@override
int getPinsKnockedDown() {
- return (firstThrow??0)+(secondThrow??0)+(thirdThrow??0);
+ return (firstThrow ?? 0) + (secondThrow ?? 0) + (thirdThrow ?? 0);
}
-
@override
int getMaxPinsThisShot() {
- if(firstThrow==null){
+ if (firstThrow == null) {
return 10;
- }else if(firstThrow==10 && secondThrow==null){
+ } else if (firstThrow == 10 && secondThrow == null) {
return 10;
- }else if(secondThrow==null){
- return 10 - (firstThrow??0);
- }else if(secondThrow==10){
+ } else if ( secondThrow == null ){
+ return 10 - ( firstThrow ?? 0 );
+ } else if ( ( firstThrow ?? 0 ) + ( secondThrow ?? 0 ) == 10 || secondThrow == 10 ){
return 10;
- }else{
- return 10 - (secondThrow??0);
+ } else {
+ return 10 - ( secondThrow ?? 0 );
}
}
-
}
diff --git a/Sources/bowlin_project/lib/model/Round.dart b/Sources/bowlin_project/lib/model/Round.dart
index 6e1d9c3..3b50946 100644
--- a/Sources/bowlin_project/lib/model/Round.dart
+++ b/Sources/bowlin_project/lib/model/Round.dart
@@ -1,25 +1,24 @@
import 'package:bowl_in/model/AbstractRound.dart';
-import 'GamePlayer.dart';
-class Round extends AbstractRound{
-
- Round(super.firstThrow, super.secondThrow, super.points, super.player, super.number);
+class Round extends AbstractRound {
+ Round(super.firstThrow, super.secondThrow, super.points, super.player,
+ super.number);
@override
bool computeNext(int val) {
- if(firstThrow==null){
- firstThrow=val;
- if(previousRound?.isSpare() ?? false){
+ if (firstThrow == null) {
+ firstThrow = val;
+ if (previousRound?.isSpare() ?? false) {
previousRound?.update(val);
unsubscribePreviousRound();
}
- if(val==10){
+ if (val == 10) {
computePoints();
return true;
}
return false;
- }else if(firstThrow!=10 && secondThrow==null){
- secondThrow=val;
+ } else if (firstThrow != 10 && secondThrow == null) {
+ secondThrow = val;
}
computePoints();
return true;
@@ -27,21 +26,20 @@ class Round extends AbstractRound{
@override
void computePoints() {
- points = (firstThrow ?? 0)+(secondThrow ?? 0);
- if(previousRound?.isStrike() ?? false){
+ points = (firstThrow ?? 0) + (secondThrow ?? 0);
+ if (previousRound?.isStrike() ?? false) {
previousRound?.update(points ?? 0);
}
- unsubscribePreviousRound();
}
@override
- bool shotIsStrike(){
- return firstThrow==null;
+ bool shotIsStrike() {
+ return firstThrow == null;
}
@override
int getNbSpares() {
- if(isSpare()){
+ if (isSpare()) {
return 1;
}
return 0;
@@ -49,7 +47,7 @@ class Round extends AbstractRound{
@override
int getNbStrike() {
- if(isStrike()){
+ if (isStrike()) {
return 1;
}
return 0;
@@ -57,14 +55,14 @@ class Round extends AbstractRound{
@override
int getPinsKnockedDown() {
- return (firstThrow ?? 0)+(secondThrow ?? 0);
+ return (firstThrow ?? 0) + (secondThrow ?? 0);
}
@override
int getMaxPinsThisShot() {
- if(firstThrow==null){
+ if (firstThrow == null) {
return 10;
- }else{
+ } else {
return 10 - (firstThrow ?? 0);
}
}
diff --git a/Sources/bowlin_project/lib/model/Stat.dart b/Sources/bowlin_project/lib/model/Stat.dart
index d68fa57..434b0ff 100644
--- a/Sources/bowlin_project/lib/model/Stat.dart
+++ b/Sources/bowlin_project/lib/model/Stat.dart
@@ -1,17 +1,15 @@
import 'package:bowl_in/model/GameDetail.dart';
import 'package:bowl_in/model/Player.dart';
-import 'User.dart';
-
class Stat {
- int _nbVictory;
- int _nbGames;
- int _highscore;
- int _nbStrikes;
- int _nbSpares;
- int _nbScore;
- double _avgScore;
- double _avgPinsPerRound;
+ int _nbVictory = 0;
+ int _nbGames = 0;
+ int _highscore = 0;
+ int _nbStrikes = 0;
+ int _nbSpares = 0;
+ int _nbScore = 0;
+ double _avgScore = 0;
+ double _avgPinsPerRound = 0;
// Constructor
Stat(
@@ -25,6 +23,9 @@ class Stat {
this._avgPinsPerRound,
);
+ Stat.empty();
+
+
// Getters and setters
int get nbVictory => _nbVictory;
@@ -74,26 +75,25 @@ class Stat {
_avgPinsPerRound = value;
}
- void updateStats(GameDetail gd, Player p){
- nbGames +=1;
- if(gd.winner == p){
- nbVictory +=1;
+ void updateStats(GameDetail gd, Player p) {
+ nbGames += 1;
+ if (gd.winner == p) {
+ nbVictory += 1;
}
- if((gd.points[p] ?? 0) > highscore){
+ if ((gd.points[p] ?? 0) > highscore) {
highscore = gd.points[p] ?? 0;
}
double totalpins = 0;
- for(var r in gd.rounds){
-
- if(p == r.player){
+ for (var r in gd.rounds) {
+ if (p == r.player) {
nbStrikes += r.getNbStrike();
nbSpares += r.getNbSpares();
totalpins = totalpins + r.getPinsKnockedDown();
}
}
- avgPinsPerRound = ((avgPinsPerRound * (nbGames-1)) + (totalpins/10))/nbGames;
-
+ avgPinsPerRound =
+ ((avgPinsPerRound * (nbGames - 1)) + (totalpins / 10)) / nbGames;
}
}
diff --git a/Sources/bowlin_project/lib/model/StubManager/AuthManager.dart b/Sources/bowlin_project/lib/model/StubManager/AuthManager.dart
index fc93912..2b581dd 100644
--- a/Sources/bowlin_project/lib/model/StubManager/AuthManager.dart
+++ b/Sources/bowlin_project/lib/model/StubManager/AuthManager.dart
@@ -1,4 +1,5 @@
library StubLib;
+
import '../IAuthManager.dart';
import '../User.dart';
import 'StubData.dart';
@@ -12,10 +13,10 @@ class AuthManager extends IAuthManager {
bool verifiedUser(String mail, String password) {
for (var user in parent.players) {
if (user is User && user.mail == mail) {
- parent.userCurrent = user as User;
+ parent.userCurrent = user;
return true;
}
}
return false;
}
-}
\ No newline at end of file
+}
diff --git a/Sources/bowlin_project/lib/model/StubManager/GameManager.dart b/Sources/bowlin_project/lib/model/StubManager/GameManager.dart
index 511acaf..63c878e 100644
--- a/Sources/bowlin_project/lib/model/StubManager/GameManager.dart
+++ b/Sources/bowlin_project/lib/model/StubManager/GameManager.dart
@@ -1,11 +1,9 @@
library StubLib;
-import '../Game.dart';
import '../IGameManager.dart';
import '../GameDetail.dart';
import '../Player.dart';
import '../User.dart';
-import '../Guest.dart';
import 'StubData.dart';
class GameManager extends IGameManager {
diff --git a/Sources/bowlin_project/lib/model/StubManager/StubData.dart b/Sources/bowlin_project/lib/model/StubManager/StubData.dart
index 001b928..5bb66b8 100644
--- a/Sources/bowlin_project/lib/model/StubManager/StubData.dart
+++ b/Sources/bowlin_project/lib/model/StubManager/StubData.dart
@@ -2,7 +2,6 @@ library StubLib;
import '../Guest.dart';
import '../IManager.dart';
-import '../Game.dart';
import '../IUserManager.dart';
import '../IGameManager.dart';
import '../Player.dart';
@@ -50,16 +49,7 @@ class StubData extends IManager {
Achievement("2 strikes in a row"),
Achievement("Win a game")
],
- [],
- Stat(
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0)),
+ []),
User(
9,
"Dave",
@@ -81,16 +71,7 @@ class StubData extends IManager {
Achievement("2 strikes in a row"),
Achievement("Win a game")
],
- [],
- Stat(
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0)),
+ []),
User(
22,
"Louison",
@@ -101,16 +82,7 @@ class StubData extends IManager {
Achievement("2 strikes in a row"),
Achievement("Win a game")
],
- [],
- Stat(
- 10,
- 12,
- 150,
- 7,
- 6,
- 700,
- 58.33,
- 30.2)),
+ []),
User(
23,
"Owen",
@@ -121,16 +93,7 @@ class StubData extends IManager {
Achievement("2 strikes in a row"),
Achievement("Win a game")
],
- [],
- Stat(
- 10,
- 12,
- 10,
- 7,
- 6,
- 700,
- 58.33,
- 30.2)),
+ []),
User(
24,
"LULU",
@@ -141,16 +104,7 @@ class StubData extends IManager {
Achievement("2 strikes in a row"),
Achievement("Win a game")
],
- [],
- Stat(
- 10,
- 12,
- 40,
- 7,
- 6,
- 700,
- 58.33,
- 30.2)),
+ []),
User(
25,
"Raphael",
@@ -161,26 +115,8 @@ class StubData extends IManager {
Achievement("2 strikes in a row"),
Achievement("Win a game")
],
- [],
- Stat(
- 10,
- 12,
- 76,
- 7,
- 6,
- 700,
- 58.33,
- 30.2)),
- ],
- Stat(
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0))
+ []),
+ ])
];
List _gameDetails = [];
@@ -229,8 +165,6 @@ class StubData extends IManager {
List get rounds => _rounds;
- List _games = [];
-
void _initGame() {
// games.add(Game(
// gameDetails[0].id,
diff --git a/Sources/bowlin_project/lib/model/StubManager/UserManager.dart b/Sources/bowlin_project/lib/model/StubManager/UserManager.dart
index c4e7f57..fd8d9e9 100644
--- a/Sources/bowlin_project/lib/model/StubManager/UserManager.dart
+++ b/Sources/bowlin_project/lib/model/StubManager/UserManager.dart
@@ -1,13 +1,10 @@
library StubLib;
import '../IUserManager.dart';
-import '../IAuthManager.dart';
import '../Player.dart';
import '../User.dart';
import 'AuthManager.dart';
import 'StubData.dart';
-import '../Player.dart';
-import '../Stat.dart';
class UserManager extends IUserManager {
final StubData parent;
diff --git a/Sources/bowlin_project/lib/model/User.dart b/Sources/bowlin_project/lib/model/User.dart
index b1740aa..b5b1bd7 100644
--- a/Sources/bowlin_project/lib/model/User.dart
+++ b/Sources/bowlin_project/lib/model/User.dart
@@ -8,12 +8,12 @@ class User extends Player {
String _mail;
List _achievements = [];
List _friends = [];
- Stat _stat;
+ final Stat _stat = Stat.empty();
List games = [];
// Constructor
User(this._id, String name, String image, this._mail, this._achievements,
- this._friends, this._stat)
+ this._friends)
: super(name, image);
int get id => _id;
@@ -38,8 +38,4 @@ class User extends Player {
}
Stat get stat => _stat;
-
- set stat(Stat value) {
- _stat = value;
- }
}
diff --git a/Sources/bowlin_project/lib/views/ingame_screen.dart b/Sources/bowlin_project/lib/views/ingame_screen.dart
index 6a47b3c..5bccba5 100644
--- a/Sources/bowlin_project/lib/views/ingame_screen.dart
+++ b/Sources/bowlin_project/lib/views/ingame_screen.dart
@@ -1,17 +1,10 @@
import 'package:bowl_in/main.dart';
import 'package:bowl_in/model/GameDetail.dart';
-import 'package:bowl_in/model/GamePlayer.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
-import 'package:go_router/go_router.dart';
import 'package:google_fonts/google_fonts.dart';
-
-import '../model/Game.dart';
-import '../model/Guest.dart';
import '../model/Player.dart';
-import '../widgets/button_new_party.dart';
import '../widgets/ingame_widgets.dart';
-import '../widgets/scores_list_widget.dart';
class InGameScreen extends StatefulWidget {
const InGameScreen({Key? key}) : super(key: key);
@@ -57,12 +50,7 @@ class _InGameScreenState extends State {
Spacer(),
ElevatedButton(
onPressed: () {
- GameDetail gd = GameDetail(
- -1,
- DateTime.now(),
- null,
- 0,
- false,
+ GameDetail gd = GameDetail(-1, DateTime.now(), null,
MyApp.controller.userCurrent.id, listPlayers);
MyApp.controller.gamePlayer.game = gd;
@@ -81,8 +69,8 @@ class _InGameScreenState extends State {
width: 7,
color: Color(0xff1ABAE0),
),
- onPrimary: Colors.transparent,
- primary: Colors.transparent,
+ foregroundColor: Colors.transparent,
+ backgroundColor: Colors.transparent,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(55),
),
diff --git a/Sources/bowlin_project/lib/views/ingame_screen2.dart b/Sources/bowlin_project/lib/views/ingame_screen2.dart
index 3d11b9a..1fdbc60 100644
--- a/Sources/bowlin_project/lib/views/ingame_screen2.dart
+++ b/Sources/bowlin_project/lib/views/ingame_screen2.dart
@@ -3,11 +3,7 @@ import 'package:bowl_in/model/AbstractRound.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
-
-import '../model/Round.dart';
-import '../widgets/button_new_party.dart';
import '../widgets/ingame_widgets.dart';
-import '../widgets/scores_list_widget.dart';
class InGameScreen2 extends StatefulWidget {
final AbstractRound currentRound;
@@ -93,8 +89,8 @@ class _InGameScreen2State extends State {
width: 7,
color: Color(0xff1ABAE0),
),
- onPrimary: Colors.transparent,
- primary: Colors.transparent,
+ foregroundColor: Colors.transparent,
+ backgroundColor: Colors.transparent,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(55),
),
diff --git a/Sources/bowlin_project/lib/views/welcome_screen.dart b/Sources/bowlin_project/lib/views/welcome_screen.dart
index 4ee80bf..b09bf14 100644
--- a/Sources/bowlin_project/lib/views/welcome_screen.dart
+++ b/Sources/bowlin_project/lib/views/welcome_screen.dart
@@ -66,8 +66,8 @@ class ButtonConnexion extends StatelessWidget {
width: 7,
color: Color(0xffFF419B),
),
- onPrimary: Colors.white,
- primary: Color(0xffF40375),
+ backgroundColor: Colors.white,
+ foregroundColor: Color(0xffF40375),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(35),
),
diff --git a/Sources/bowlin_project/lib/widgets/button_new_party.dart b/Sources/bowlin_project/lib/widgets/button_new_party.dart
index e31275e..3709cdb 100644
--- a/Sources/bowlin_project/lib/widgets/button_new_party.dart
+++ b/Sources/bowlin_project/lib/widgets/button_new_party.dart
@@ -3,11 +3,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:go_router/go_router.dart';
import 'package:google_fonts/google_fonts.dart';
-
-import '../main.dart';
import '../model/GameDetail.dart';
-import '../model/Player.dart';
-import '../model/User.dart';
import 'ingame_widgets.dart';
class ButtonNewParty extends StatelessWidget {
@@ -21,8 +17,8 @@ class ButtonNewParty extends StatelessWidget {
width: 4,
color: Color(0xffFF419B),
),
- onPrimary: Colors.white,
- primary: Color(0xffF40375),
+ backgroundColor: Colors.white,
+ foregroundColor: Color(0xffF40375),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(35),
),
@@ -127,8 +123,8 @@ class NewGameModal extends StatelessWidget {
fontWeight: FontWeight.bold, fontSize: 18),
),
style: ElevatedButton.styleFrom(
- onPrimary: Colors.white,
- primary: Color(0xffF40375),
+ backgroundColor: Colors.white,
+ foregroundColor: Color(0xffF40375),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
@@ -229,8 +225,8 @@ class ButtonJoinParty extends StatelessWidget {
width: 4,
color: Color(0xff6B6588),
),
- onPrimary: Colors.white,
- primary: Color(0xff45405D),
+ backgroundColor: Colors.white,
+ foregroundColor: Color(0xff45405D),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(35),
),
diff --git a/Sources/bowlin_project/lib/widgets/ingame_widgets.dart b/Sources/bowlin_project/lib/widgets/ingame_widgets.dart
index 8b9cf57..781f548 100644
--- a/Sources/bowlin_project/lib/widgets/ingame_widgets.dart
+++ b/Sources/bowlin_project/lib/widgets/ingame_widgets.dart
@@ -1,13 +1,9 @@
import 'dart:ui';
-
import 'package:bowl_in/main.dart';
-import 'package:bowl_in/widgets/profil_listpodium_widget.dart';
-import 'package:bowl_in/widgets/scores_list_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:google_fonts/google_fonts.dart';
-
import '../model/AbstractRound.dart';
import '../model/GameDetail.dart';
import '../model/Guest.dart';
@@ -170,8 +166,8 @@ class _FinalScoreBoardState extends State {
width: 7,
color: Color(0xff1ABAE0),
),
- onPrimary: Colors.transparent,
- primary: Colors.transparent,
+ backgroundColor: Colors.transparent,
+ foregroundColor: Colors.transparent,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(55),
),
@@ -252,7 +248,8 @@ class PodiumGameOverWidget extends StatelessWidget {
class InGameCardConfig extends StatefulWidget {
final List listPlayer;
- const InGameCardConfig({Key? key, required this.listPlayer}) : super(key: key);
+ const InGameCardConfig({Key? key, required this.listPlayer})
+ : super(key: key);
@override
State createState() => _InGameCardConfigState();
@@ -264,16 +261,14 @@ class _InGameCardConfigState extends State {
super.initState();
}
- void onDelete(Player p){
+ void onDelete(Player p) {
setState(() {
-
widget.listPlayer.remove(p);
});
}
- void onReorder(int oldIndex, int newIndex){
+ void onReorder(int oldIndex, int newIndex) {
setState(() {
-
if (oldIndex < newIndex) {
newIndex -= 1;
}
@@ -325,7 +320,11 @@ class _InGameCardConfigState extends State {
],
),
)),
- ListUserInGame(listPlayer: widget.listPlayer, onDelete: onDelete, onReorder: onReorder,),
+ ListUserInGame(
+ listPlayer: widget.listPlayer,
+ onDelete: onDelete,
+ onReorder: onReorder,
+ ),
Spacer(),
Image(
image: AssetImage("assets/images/start_sentence.png"),
@@ -350,7 +349,7 @@ class _InGameCardConfigState extends State {
style: ElevatedButton.styleFrom(
elevation: 5,
shadowColor: Color(0xffB70056),
- primary: Color(0xffF40375),
+ foregroundColor: Color(0xffF40375),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
@@ -367,14 +366,18 @@ class ListUserInGame extends StatefulWidget {
final List listPlayer;
final Function(Player) onDelete;
final Function(int, int) onReorder;
- const ListUserInGame({Key? key, required this.listPlayer, required this.onDelete, required this.onReorder}) : super(key: key);
+ const ListUserInGame(
+ {Key? key,
+ required this.listPlayer,
+ required this.onDelete,
+ required this.onReorder})
+ : super(key: key);
@override
State createState() => _ListUserInGameState();
}
class _ListUserInGameState extends State {
-
@override
Widget build(BuildContext context) {
return Padding(
@@ -388,10 +391,14 @@ class _ListUserInGameState extends State {
),
child: ReorderableListView.builder(
itemCount: widget.listPlayer.length,
- itemBuilder: (context, index) {
- return UserInGame(key:ValueKey(widget.listPlayer[index]) ,player: widget.listPlayer[index], onDelete: widget.onDelete, index: index);
- },
- onReorder: widget.onReorder,
+ itemBuilder: (context, index) {
+ return UserInGame(
+ key: ValueKey(widget.listPlayer[index]),
+ player: widget.listPlayer[index],
+ onDelete: widget.onDelete,
+ index: index);
+ },
+ onReorder: widget.onReorder,
),
),
RichText(
@@ -418,7 +425,12 @@ class UserInGame extends StatefulWidget {
final Player player;
final Function(Player) onDelete;
final int index;
- const UserInGame({Key? key, required this.player, required this.onDelete, required this.index}) : super(key: key);
+ const UserInGame(
+ {Key? key,
+ required this.player,
+ required this.onDelete,
+ required this.index})
+ : super(key: key);
@override
State createState() => _UserInGameState();
@@ -442,17 +454,17 @@ class _UserInGameState extends State {
child: Row(
children: [
ReorderableDragStartListener(
- index: widget.index,
- child : Container(
- width: 30,
- height: 30,
- decoration: BoxDecoration(
- borderRadius: BorderRadius.all(Radius.circular(70)),
- image: DecorationImage(
- image: AssetImage(widget.player.image), fit: BoxFit.cover),
+ index: widget.index,
+ child: Container(
+ width: 30,
+ height: 30,
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.all(Radius.circular(70)),
+ image: DecorationImage(
+ image: AssetImage(widget.player.image), fit: BoxFit.cover),
+ ),
),
),
- ),
SizedBox(
width: 10,
),
@@ -472,29 +484,26 @@ class _UserInGameState extends State {
),
cursorColor: Colors.purple,
textAlign: TextAlign.left,
- onChanged: (str)=> widget.player.name=str
- ,
+ onChanged: (str) => widget.player.name = str,
),
),
)
: SizedBox(
width: 220,
- child: Text(
- widget.player.name,
- style: GoogleFonts.roboto(
- fontSize: 18,
- decoration: TextDecoration.none,
- color: Color(0xff241E40))
- ),
+ child: Text(widget.player.name,
+ style: GoogleFonts.roboto(
+ fontSize: 18,
+ decoration: TextDecoration.none,
+ color: Color(0xff241E40))),
),
- (widget.player is User && (widget.player as User).id == MyApp.controller.userCurrent.id) ?
- Icon(Icons.lock, color: Colors.amber) :
- GestureDetector(
- onTap: () {
- widget.onDelete(widget.player);
- },
- child: Icon(Icons.close)
- ),
+ (widget.player is User &&
+ (widget.player as User).id == MyApp.controller.userCurrent.id)
+ ? Icon(Icons.lock, color: Colors.amber)
+ : GestureDetector(
+ onTap: () {
+ widget.onDelete(widget.player);
+ },
+ child: Icon(Icons.close)),
Spacer()
],
),
@@ -518,8 +527,6 @@ class InGameCardThrow extends StatefulWidget {
}
class _InGameCardThrowState extends State {
- GlobalKey<_NumberPadState> _numberPadKey = GlobalKey();
-
void initState() {
super.initState();
}
diff --git a/Sources/bowlin_project/lib/widgets/profil_listpodium_widget.dart b/Sources/bowlin_project/lib/widgets/profil_listpodium_widget.dart
index a4c1a90..62f7e0a 100644
--- a/Sources/bowlin_project/lib/widgets/profil_listpodium_widget.dart
+++ b/Sources/bowlin_project/lib/widgets/profil_listpodium_widget.dart
@@ -2,9 +2,7 @@ import 'package:bowl_in/widgets/scores_list_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
-
import '../main.dart';
-import '../model/Player.dart';
import '../model/User.dart';
class ProfilPodiumWidget extends StatelessWidget {
diff --git a/Sources/bowlin_project/lib/widgets/scores_list_widget.dart b/Sources/bowlin_project/lib/widgets/scores_list_widget.dart
index c66c665..a9716a9 100644
--- a/Sources/bowlin_project/lib/widgets/scores_list_widget.dart
+++ b/Sources/bowlin_project/lib/widgets/scores_list_widget.dart
@@ -2,7 +2,6 @@ import 'package:bowl_in/main.dart';
import 'package:bowl_in/widgets/button_new_party.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
-import 'package:go_router/go_router.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:intl/date_symbol_data_local.dart';
import 'package:intl/intl.dart';
diff --git a/Sources/bowlin_project/test/manager_test.dart b/Sources/bowlin_project/test/manager_test.dart
new file mode 100644
index 0000000..62b237c
--- /dev/null
+++ b/Sources/bowlin_project/test/manager_test.dart
@@ -0,0 +1,37 @@
+import 'package:bowl_in/model/GameDetail.dart';
+import 'package:bowl_in/model/Guest.dart';
+import 'package:bowl_in/model/IManager.dart';
+import 'package:bowl_in/model/Player.dart';
+import 'package:bowl_in/model/StubManager/StubData.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+void testManager(IManager mgr) {
+ test("Test manager " + mgr.runtimeType.toString(), () {
+ expect(mgr.userCurrent, mgr.userMgr.getUsersByName("Dave").first);
+ expect(mgr.userCurrent, mgr.userMgr.getUserById(mgr.userCurrent.id));
+
+ List players = [mgr.userCurrent, Guest("Emre")];
+ GameDetail gd = GameDetail(
+ mgr.gameMgr.getNextId(), DateTime.now(), null, mgr.userCurrent.id, players);
+
+ expect(gd.players, players);
+ expect(gd.host, mgr.userCurrent.id);
+
+
+ mgr.gameMgr.addGame(gd);
+
+ expect(gd, mgr.gameMgr.getGameById(gd.id));
+
+ expect(gd, mgr.gameMgr.getGamesByPlayer(mgr.userCurrent).first);
+
+ expect(gd, mgr.gameMgr.getGamesByPlayerId(mgr.userCurrent.id).first);
+
+ expect(players, mgr.gameMgr.getPlayersByIdGame(gd.id));
+
+ expect(gd, mgr.gameMgr.getGamesByPlayers(players).first);
+ });
+}
+
+void main() {
+ testManager(StubData());
+}
diff --git a/Sources/bowlin_project/test/model_test.dart b/Sources/bowlin_project/test/model.dart
similarity index 100%
rename from Sources/bowlin_project/test/model_test.dart
rename to Sources/bowlin_project/test/model.dart
diff --git a/Sources/bowlin_project/test/play_test.dart b/Sources/bowlin_project/test/play_test.dart
new file mode 100644
index 0000000..4ecbc1e
--- /dev/null
+++ b/Sources/bowlin_project/test/play_test.dart
@@ -0,0 +1,140 @@
+import 'package:bowl_in/model/AbstractRound.dart';
+import 'package:bowl_in/model/GameDetail.dart';
+import 'package:bowl_in/model/GamePlayer.dart';
+import 'package:bowl_in/model/Guest.dart';
+import 'package:bowl_in/model/IManager.dart';
+import 'package:bowl_in/model/Player.dart';
+import 'package:bowl_in/model/StubManager/StubData.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+void main() {
+ test("Just strikes", (){
+ final IManager mgr = StubData();
+ final List listPlayers = [mgr.userCurrent, Guest("Lucas")];
+
+ final GameDetail gd = GameDetail(
+ -1,
+ DateTime.now(),
+ null,
+ mgr.userCurrent.id,
+ listPlayers);
+ mgr.gamePlayer.game = gd;
+ mgr.gamePlayer.onNext(false, null);
+
+ AbstractRound? currentRound = mgr.gamePlayer.currentRound;
+ while (currentRound != null) {
+ bool isFinished = currentRound.computeNext(10);
+ if (currentRound.isSpareOrStrike()) {
+ mgr.gamePlayer.onSpareOrStrike();
+ }
+ mgr.gamePlayer.onNext(isFinished, null);
+ currentRound = mgr.gamePlayer.currentRound;
+ }
+
+ final int score = gd
+ .getRank()
+ .values
+ .first;
+ expect(score, 300);
+ });
+
+ test("Classic game", (){
+ final IManager mgr = StubData();
+ final List listPlayers = [mgr.userCurrent, Guest("Lucas")];
+
+ final DateTime dateGame = DateTime.now();
+
+ final GameDetail gd = GameDetail(
+ -1,
+ dateGame,
+ null,
+ mgr.userCurrent.id,
+ listPlayers);
+ mgr.gamePlayer.game = gd;
+ mgr.gamePlayer.onNext(false, null);
+
+ makeThrow(7, mgr.gamePlayer);
+ makeThrow(2, mgr.gamePlayer);
+
+ makeThrow(10, mgr.gamePlayer);
+
+ makeThrow(5, mgr.gamePlayer);
+ makeThrow(5, mgr.gamePlayer);
+
+ makeThrow(5, mgr.gamePlayer);
+ makeThrow(5, mgr.gamePlayer);
+
+ makeThrow(3, mgr.gamePlayer);
+ makeThrow(7, mgr.gamePlayer);
+
+ makeThrow(0, mgr.gamePlayer);
+ makeThrow(7, mgr.gamePlayer);
+
+ makeThrow(10, mgr.gamePlayer);
+
+ makeThrow(0, mgr.gamePlayer);
+ makeThrow(0, mgr.gamePlayer);
+
+ makeThrow(9, mgr.gamePlayer);
+ makeThrow(0, mgr.gamePlayer);
+
+ makeThrow(0, mgr.gamePlayer);
+ makeThrow(10, mgr.gamePlayer);
+
+ makeThrow(2, mgr.gamePlayer);
+ makeThrow(2, mgr.gamePlayer);
+
+ makeThrow(5, mgr.gamePlayer);
+ makeThrow(5, mgr.gamePlayer);
+
+ makeThrow(10, mgr.gamePlayer);
+
+ makeThrow(3, mgr.gamePlayer);
+ makeThrow(2, mgr.gamePlayer);
+
+ makeThrow(1, mgr.gamePlayer);
+ makeThrow(2, mgr.gamePlayer);
+
+ makeThrow(7, mgr.gamePlayer);
+ makeThrow(1, mgr.gamePlayer);
+
+ makeThrow(4, mgr.gamePlayer);
+ makeThrow(6, mgr.gamePlayer);
+
+ makeThrow(1, mgr.gamePlayer);
+ makeThrow(7, mgr.gamePlayer);
+
+ makeThrow(10, mgr.gamePlayer);
+ makeThrow(6, mgr.gamePlayer);
+ makeThrow(2, mgr.gamePlayer);
+
+ makeThrow(8, mgr.gamePlayer);
+ makeThrow(1, mgr.gamePlayer);
+
+
+
+ final Iterable score = gd
+ .getRank()
+ .values;
+ expect(score.first, 128);
+ expect(score.last, 95);
+
+ expect(mgr.userCurrent.games.length, 1);
+ expect(mgr.userCurrent.games.first.id, mgr.gamePlayer.game.id);
+ expect(mgr.userCurrent.games.first.pointsCurrentUser, 128);
+ expect(mgr.userCurrent.games.first.date, dateGame);
+ expect(mgr.userCurrent.games.first.players, listPlayers);
+
+ });
+
+}
+
+
+void makeThrow(int input, GamePlayer gamePlayer){
+ AbstractRound currentRound = gamePlayer.currentRound!;
+ bool isFinished = currentRound.computeNext(input);
+ if (currentRound.isSpareOrStrike()) {
+ gamePlayer.onSpareOrStrike();
+ }
+ gamePlayer.onNext(isFinished, null);
+}
\ No newline at end of file
diff --git a/Sources/bowlin_project/test/round_test.dart b/Sources/bowlin_project/test/round_test.dart
new file mode 100644
index 0000000..ca46b52
--- /dev/null
+++ b/Sources/bowlin_project/test/round_test.dart
@@ -0,0 +1,80 @@
+import 'package:bowl_in/model/LastRound.dart';
+import 'package:bowl_in/model/Round.dart';
+import 'package:bowl_in/model/Stat.dart';
+import 'package:bowl_in/model/User.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+
+void main() {
+ test("Test Round", (){
+ User u = User(1, "Louison" , "Sources/bowlin_project/assets/images/image_user_pink.png", "loparant@gmail.com", [], []);
+ Round r = Round(null, null, null, u, 1);
+
+ expect(r.getMaxPinsThisShot(), 10);
+ expect(r.isSpareOrStrike(), false);
+
+ r.computeNext(4);
+
+ expect(r.getMaxPinsThisShot(), 6);
+ r.computeNext(6);
+
+
+ expect(r.isSpare(), true);
+ expect(r.isSpareOrStrike(), true);
+ expect(r.isStrike(), false);
+ expect(r.getNbSpares(), 1);
+ expect(r.getNbStrike(), 0);
+
+ Round r2 = Round(null, null, null, u, 2);
+ r2.computeNext(10);
+ expect(r2.isSpare(), false);
+ expect(r2.isStrike(), true);
+ expect(r2.isSpareOrStrike(), true);
+ expect(r2.getNbSpares(), 0);
+ expect(r2.getNbStrike(), 1);
+
+ Round r3 = Round(null, null, null, u, 2);
+ r3.computeNext(2);
+ r3.computeNext(5);
+ expect(r3.getPinsKnockedDown(), 7);
+ });
+
+ test("Test LastRound", (){
+ User u = User(1, "Louison" , "Sources/bowlin_project/assets/images/image_user_pink.png", "loparant@gmail.com", [], []);
+ LastRound r = LastRound(null, null, null, u, 1, null);
+
+ expect(r.getMaxPinsThisShot(), 10);
+ expect(r.isSpareOrStrike(), false);
+ r.computeNext(10);
+
+ expect(r.getMaxPinsThisShot(), 10);
+ r.computeNext(10);
+
+ expect(r.getMaxPinsThisShot(), 10);
+ r.computeNext(10);
+
+ expect(r.getPinsKnockedDown(), 30);
+ expect(r.getNbSpares(), 0);
+ expect(r.getNbStrike(), 3);
+
+ LastRound r2 = LastRound(null, null, null, u, 1, null);
+ r2.computeNext(1);
+ expect(r2.getMaxPinsThisShot(), 9);
+ r2.computeNext(9);
+ expect(r2.getMaxPinsThisShot(), 10);
+ r2.computeNext(10);
+ expect(r2.getPinsKnockedDown(), 20);
+ expect(r2.getNbSpares(), 1);
+ expect(r2.getNbStrike(), 1);
+
+ LastRound r3 = LastRound(null, null, null, u, 1, null);
+ r3.computeNext(10);
+ r3.computeNext(2);
+ expect(r3.getMaxPinsThisShot(), 8);
+ r3.computeNext(8);
+ expect(r3.getPinsKnockedDown(), 20);
+ expect(r3.getNbSpares(), 1);
+ expect(r3.getNbStrike(), 1);
+
+ });
+}
\ No newline at end of file
diff --git a/Sources/bowlin_project/test/widget_test.dart b/Sources/bowlin_project/test/widget_test.dart
deleted file mode 100644
index a0aaeac..0000000
--- a/Sources/bowlin_project/test/widget_test.dart
+++ /dev/null
@@ -1,30 +0,0 @@
-// This is a basic Flutter widget test.
-//
-// To perform an interaction with a widget in your test, use the WidgetTester
-// utility in the flutter_test package. For example, you can send tap and scroll
-// gestures. You can also use WidgetTester to find child widgets in the widget
-// tree, read text, and verify that the values of widget properties are correct.
-
-import 'package:flutter/material.dart';
-import 'package:flutter_test/flutter_test.dart';
-
-import 'package:bowl_in/main.dart';
-
-void main() {
- testWidgets('Counter increments smoke test', (WidgetTester tester) async {
- // Build our app and trigger a frame.
- await tester.pumpWidget(const MyApp());
-
- // Verify that our counter starts at 0.
- expect(find.text('0'), findsOneWidget);
- expect(find.text('1'), findsNothing);
-
- // Tap the '+' icon and trigger a frame.
- await tester.tap(find.byIcon(Icons.add));
- await tester.pump();
-
- // Verify that our counter has incremented.
- expect(find.text('0'), findsNothing);
- expect(find.text('1'), findsOneWidget);
- });
-}