diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3d309c8..1e8174c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -14,34 +14,35 @@ # For more information, see: https://docs.gitlab.com/ee/ci/yaml/index.html#stages stages: # List of stages for jobs, and their order of execution - - build + - lint - test + - build - deploy -build-job: # This job runs in the build stage, which runs first. - stage: build +before_script: + - flutter pub get + - flutter clean + +linting-code: # This job runs in the test stage. + stage: lint # It only starts when the job in the build stage completes successfully. script: - - echo "Compiling the code..." - - echo "Compile complete." + - flutter analyze --no-fatal-infos --no-fatal-warnings tags: - MacOS -unit-test-job: # This job runs in the test stage. +unit-tests: # This job runs in the test stage. stage: test # It only starts when the job in the build stage completes successfully. script: - - echo "Running unit tests... This will take about 60 seconds." - - sleep 60 - - echo "Code coverage is 90%" + - flutter test tags: - MacOS - -lint-test-job: # This job also runs in the test stage. - stage: test # It can run at the same time as unit-test-job (in parallel). +build-debug: + stage: build + only: + - branches script: - - echo "Linting code... This will take about 10 seconds." - - sleep 10 - - echo "No lint issues found." + - flutter build appbundle --debug tags: - MacOS @@ -49,6 +50,6 @@ deploy-job: # This job runs in the deploy stage. stage: deploy # It only runs when *both* jobs in the test stage complete successfully. script: - echo "Deploying application..." - - echo "Application successfully deployed." + - echo "Application successfully deployed. (JK gotta implement this sometime)" tags: - MacOS \ No newline at end of file diff --git a/lib/widgets/results.dart b/lib/widgets/results.dart index 5e2aae6..42bf26d 100644 --- a/lib/widgets/results.dart +++ b/lib/widgets/results.dart @@ -3,11 +3,11 @@ import 'package:tensordex_mobile/widgets/poke_finder.dart'; import '../tflite/model/outputs/recognition.dart'; import '../tflite/model/outputs/stats.dart'; - /// [PokeFinder] sends each frame for inference class Results extends StatefulWidget { final List recognitions; final Stats stats; + /// Constructor const Results(this.recognitions, this.stats, {Key? key}) : super(key: key); @@ -23,6 +23,15 @@ class _ResultsState extends State { @override Widget build(BuildContext context) { - return Text(widget.recognitions.toString()); + return Column( + children: widget.recognitions + .map((recognition) => Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Text(recognition.label.toString()), + Text(recognition.score.toString()), + ], + )).toList(), + ); } } diff --git a/oldCameraCode.dart b/old_camera_code.dart similarity index 100% rename from oldCameraCode.dart rename to old_camera_code.dart diff --git a/pubspec.lock b/pubspec.lock index ef2a499..b7be072 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -28,7 +28,21 @@ packages: name: camera url: "https://pub.dartlang.org" source: hosted - version: "0.9.7+1" + version: "0.9.8+1" + camera_android: + dependency: transitive + description: + name: camera_android + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.8+3" + camera_avfoundation: + dependency: transitive + description: + name: camera_avfoundation + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.8+2" camera_platform_interface: dependency: transitive description: @@ -211,7 +225,7 @@ packages: name: path_provider_android url: "https://pub.dartlang.org" source: hosted - version: "2.0.15" + version: "2.0.16" path_provider_ios: dependency: transitive description: diff --git a/test/widget_test.dart b/test/widget_test.dart deleted file mode 100644 index 44e1892..0000000 --- a/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:tensordex_mobile/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); - }); -} diff --git a/test/widget_test_app.dart b/test/widget_test_app.dart new file mode 100644 index 0000000..a0e48e0 --- /dev/null +++ b/test/widget_test_app.dart @@ -0,0 +1,27 @@ +import 'package:flutter/material.dart'; + +class WidgetTestApp extends StatelessWidget { + final List widgets; + + const WidgetTestApp(this.widgets, {Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Test App', + theme: ThemeData( + primarySwatch: Colors.lightBlue, + ), + home: Scaffold( + appBar: AppBar( + title: const Text('TEST APP'), + ), + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: widgets, + ), + ), + )); + } +} diff --git a/test/widgets/results_test.dart b/test/widgets/results_test.dart new file mode 100644 index 0000000..0c4c2b4 --- /dev/null +++ b/test/widgets/results_test.dart @@ -0,0 +1,44 @@ +// 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:tensordex_mobile/tflite/model/outputs/recognition.dart'; +import 'package:tensordex_mobile/tflite/model/outputs/stats.dart'; +import 'package:tensordex_mobile/widgets/results.dart'; + +import '../widget_test_app.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + List recognitions = [ + Recognition(1, 'Pikachu', 0.9), + Recognition(1, 'Raichu', 0.09), + Recognition(1, 'Pichu', 0.01), + ]; + + Stats stat = Stats( + totalTime: 150, + preProcessingTime: 75, + inferenceTime: 50, + postProcessingTime: 25, + ); + Results results = Results(recognitions, stat); + // Build our app and trigger a frame. + List widgets = [results]; + await tester.pumpWidget(WidgetTestApp(widgets)); + + // Verify that all of hte rcognitions can be found on the recognition widget + expect(find.text('Pikachu'), findsOneWidget); + expect(find.text('Raichu'), findsOneWidget); + expect(find.text('Pichu'), findsOneWidget); + expect(find.text('0.9'), findsOneWidget); + expect(find.text('0.09'), findsOneWidget); + + }); +} diff --git a/test/widgets/widget_wrapper.dart b/test/widgets/widget_wrapper.dart new file mode 100644 index 0000000..e69de29