[Ermine] Added unit tests for visualizer widgets
Change-Id: I0b42a7ca1656dc3ee281dbe00650ab83d92ae7f9
diff --git a/session_shells/ermine/BUILD.gn b/session_shells/ermine/BUILD.gn
index 26e7042..d0f37a4 100644
--- a/session_shells/ermine/BUILD.gn
+++ b/session_shells/ermine/BUILD.gn
@@ -165,8 +165,11 @@
flutter_test("visualizers_unittests") {
sources = [
"status_graph_visualizer_model_test.dart",
+ "status_graph_visualizer_test.dart",
"status_progress_bar_visualizer_model_test.dart",
+ "status_progress_bar_visualizer_test.dart",
"status_tick_bar_visualizer_model_test.dart",
+ "status_tick_bar_visualizer_test.dart",
]
deps = [
diff --git a/session_shells/ermine/test/status_graph_visualizer_test.dart b/session_shells/ermine/test/status_graph_visualizer_test.dart
new file mode 100644
index 0000000..c64ff20
--- /dev/null
+++ b/session_shells/ermine/test/status_graph_visualizer_test.dart
@@ -0,0 +1,102 @@
+// Copyright 2019 The Fuchsia Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// ignore_for_file: implementation_imports
+
+import 'dart:math';
+import 'package:flutter/material.dart';
+
+import 'package:ermine_library/src/widgets/status_graph_visualizer.dart';
+import 'package:test/test.dart';
+
+void main() {
+ StatusGraphVisualizer testGraph;
+ StatusGraphVisualizer testGraphCustom;
+ MainAxisAlignment testAlign;
+ TextStyle testTextStyle;
+ Paint testPaint;
+
+ setUp(() async {
+ testAlign = MainAxisAlignment.spaceBetween;
+ testTextStyle = TextStyle();
+ testPaint = Paint();
+ testGraph = StatusGraphVisualizer(
+ model: StatusGraphVisualizerModel(),
+ axisAlignment: testAlign,
+ textStyle: testTextStyle,
+ drawStyle: testPaint,
+ );
+ testGraphCustom = StatusGraphVisualizer(
+ model: StatusGraphVisualizerModel(),
+ axisAlignment: testAlign,
+ textStyle: testTextStyle,
+ drawStyle: testPaint,
+ );
+ });
+
+ test('test to confirm StatusGraphVisualizer constructs via default model',
+ () {
+ expect(testGraph.model.graphValue, 'loading...');
+ expect(
+ testGraph.model.graphData, lessThanOrEqualTo(testGraph.model.graphMax));
+ expect(testGraph.model.graphData,
+ greaterThanOrEqualTo(testGraph.model.graphMin));
+ expect(testGraph.model.graphData, greaterThanOrEqualTo(0));
+ expect(testGraph.model.graphHeight, greaterThan(0));
+ expect(testGraph.model.graphWidth, greaterThan(0));
+ expect(testGraph.model.graphMin, greaterThanOrEqualTo(0));
+ expect(testGraph.model.graphMin, lessThan(testGraph.model.graphMax));
+ expect(testGraph.model.graphMax, greaterThanOrEqualTo(0));
+ expect(testGraph.model.graphMax, greaterThan(testGraph.model.graphMin));
+ expect(testGraph.model.graphFirst, isNotNull);
+ expect(testGraph.model.borderActive, isNotNull);
+ expect(testGraph.model.fillActive, isNotNull);
+ });
+
+ test(
+ 'test to confirm StatusGraphVisualizer graphValue is set correctly via model changes',
+ () {
+ // Confirm default graphValue construction values are equal.
+ expect(testGraph.model.graphValue, testGraphCustom.model.graphValue);
+ // Change graphValue within custom graph (which reflects in animation).
+ String testCustomGraphValue = 'test';
+ testGraphCustom.model.graphValue = testCustomGraphValue;
+ // Confirm graphValue updated correctly & custom model has changed from default.
+ expect(testGraphCustom.model.graphValue, testCustomGraphValue);
+ expect(testGraph.model.graphValue, isNot(testGraphCustom.model.graphValue));
+ // Change graphValue value again to confirm continuous animation updates possible.
+ testCustomGraphValue = 'test2';
+ testGraphCustom.model.graphValue = testCustomGraphValue;
+ // Confirm graphValue updated correctly again & custom model has changed from default.
+ expect(testGraphCustom.model.graphValue, testCustomGraphValue);
+ expect(testGraph.model.graphValue, isNot(testGraphCustom.model.graphValue));
+ });
+
+ test(
+ 'test to confirm StatusGraphVisualizer graphData is set correctly via model changes',
+ () {
+ // Confirm default graphData construction values are equal.
+ expect(testGraph.model.graphData, testGraphCustom.model.graphData);
+ // Change graphData within custom graph (which reflects in animation).
+ double testRandomGraphData = Random().nextDouble() * 100;
+ testGraphCustom.model.graphData = testRandomGraphData;
+ // Confirm graphData updated correctly & custom model has changed from default.
+ expect(testGraphCustom.model.graphData, testRandomGraphData);
+ expect(testGraph.model.graphData, isNot(testGraphCustom.model.graphData));
+ // Change graphData value again to confirm continuous animation updates possible.
+ testRandomGraphData = Random().nextDouble() * 100;
+ testGraphCustom.model.graphData = testRandomGraphData;
+ // Confirm graphData updated correctly again & custom model has changed from default.
+ expect(testGraphCustom.model.graphData, testRandomGraphData);
+ expect(testGraph.model.graphData, isNot(testGraphCustom.model.graphData));
+ });
+
+ tearDown(() async {
+ testGraph = null;
+ testGraphCustom = null;
+ testAlign = null;
+ testTextStyle = null;
+ testPaint = null;
+ });
+}
diff --git a/session_shells/ermine/test/status_progress_bar_visualizer_test.dart b/session_shells/ermine/test/status_progress_bar_visualizer_test.dart
new file mode 100644
index 0000000..4c8d26e
--- /dev/null
+++ b/session_shells/ermine/test/status_progress_bar_visualizer_test.dart
@@ -0,0 +1,120 @@
+// Copyright 2019 The Fuchsia Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// ignore_for_file: implementation_imports
+
+import 'dart:math';
+import 'package:flutter/material.dart';
+
+import 'package:ermine_library/src/widgets/status_progress_bar_visualizer.dart';
+import 'package:test/test.dart';
+
+void main() {
+ StatusProgressBarVisualizer testProgressBar;
+ StatusProgressBarVisualizer testProgressBarCustom;
+ TextAlign testTextAlign;
+ TextStyle testTextStyle;
+
+ setUp(() async {
+ testTextAlign = TextAlign.right;
+ testTextStyle = TextStyle();
+ testProgressBar = StatusProgressBarVisualizer(
+ model: StatusProgressBarVisualizerModel(),
+ textAlignment: testTextAlign,
+ textStyle: testTextStyle,
+ );
+ testProgressBarCustom = StatusProgressBarVisualizer(
+ model: StatusProgressBarVisualizerModel(),
+ textAlignment: testTextAlign,
+ textStyle: testTextStyle,
+ );
+ });
+
+ test(
+ 'test to confirm StatusProgressBarVisualizer constructs via default model',
+ () {
+ expect(testProgressBar.model.barValue, 'loading...');
+ expect(testProgressBar.model.barSize, inInclusiveRange(0, 1));
+ expect(testProgressBar.model.barMax, greaterThan(0));
+ expect(testProgressBar.model.barMax,
+ greaterThanOrEqualTo(testProgressBar.model.barFill));
+ expect(testProgressBar.model.barFill, greaterThanOrEqualTo(0));
+ expect(testProgressBar.model.barFill,
+ lessThanOrEqualTo(testProgressBar.model.barMax));
+ expect(testProgressBar.model.offset, greaterThanOrEqualTo(0));
+ expect(testProgressBar.model.barHeight, greaterThanOrEqualTo(0));
+ expect(testProgressBar.model.barFirst, isNotNull);
+ });
+
+ test(
+ 'test to confirm StatusProgressBarVisualizer barValue is set correctly via model changes',
+ () {
+ // Confirm default barValue construction values are equal.
+ expect(
+ testProgressBar.model.barValue, testProgressBarCustom.model.barValue);
+ // Change barValue within custom progress bar (which reflects in animation).
+ String testCustomBarValue = 'test';
+ testProgressBarCustom.model.barValue = testCustomBarValue;
+ // Confirm barValue updated correctly & custom model has changed from default.
+ expect(testProgressBarCustom.model.barValue, testCustomBarValue);
+ expect(testProgressBar.model.barValue,
+ isNot(testProgressBarCustom.model.barValue));
+ // Change barValue value again to confirm continuous animation updates possible.
+ testCustomBarValue = 'test2';
+ testProgressBarCustom.model.barValue = testCustomBarValue;
+ // Confirm barValue updated correctly again & custom model has changed from default.
+ expect(testProgressBarCustom.model.barValue, testCustomBarValue);
+ expect(testProgressBar.model.barValue,
+ isNot(testProgressBarCustom.model.barValue));
+ });
+
+ test(
+ 'test to confirm StatusProgressBarVisualizer barFill is set correctly via model changes',
+ () {
+ // Confirm default barFill construction values are equal.
+ expect(testProgressBar.model.barFill, testProgressBarCustom.model.barFill);
+ // Change barFill within custom progress bar (which reflects in animation).
+ double testRandomBarFill = Random().nextDouble() * 100;
+ testProgressBarCustom.model.barFill = testRandomBarFill;
+ // Confirm barFill updated correctly & custom model has changed from default.
+ expect(testProgressBarCustom.model.barFill, testRandomBarFill);
+ expect(testProgressBar.model.barFill,
+ isNot(testProgressBarCustom.model.barFill));
+ // Change barFill value again to confirm continuous animation updates possible.
+ testRandomBarFill = Random().nextDouble() * 100;
+ testProgressBarCustom.model.barFill = testRandomBarFill;
+ // Confirm barFill updated correctly again & custom model has changed from default.
+ expect(testProgressBarCustom.model.barFill, testRandomBarFill);
+ expect(testProgressBar.model.barFill,
+ isNot(testProgressBarCustom.model.barFill));
+ });
+
+ test(
+ 'test to confirm StatusProgressBarVisualizer barMax is set correctly via model changes',
+ () {
+ // Confirm default barMax construction values are equal.
+ expect(testProgressBar.model.barMax, testProgressBarCustom.model.barMax);
+ // Change barMax within custom progress bar (which reflects in animation).
+ double testRandomBarMax = Random().nextDouble() * 100;
+ testProgressBarCustom.model.barMax = testRandomBarMax;
+ // Confirm barMax updated correctly & custom model has changed from default.
+ expect(testProgressBarCustom.model.barMax, testRandomBarMax);
+ expect(testProgressBar.model.barMax,
+ isNot(testProgressBarCustom.model.barMax));
+ // Change barMax value again to confirm continuous animation updates possible.
+ testRandomBarMax = Random().nextDouble() * 100;
+ testProgressBarCustom.model.barMax = testRandomBarMax;
+ // Confirm barMax updated correctly again & custom model has changed from default.
+ expect(testProgressBarCustom.model.barMax, testRandomBarMax);
+ expect(testProgressBar.model.barMax,
+ isNot(testProgressBarCustom.model.barMax));
+ });
+
+ tearDown(() async {
+ testProgressBar = null;
+ testProgressBarCustom = null;
+ testTextAlign = null;
+ testTextStyle = null;
+ });
+}
diff --git a/session_shells/ermine/test/status_tick_bar_visualizer_test.dart b/session_shells/ermine/test/status_tick_bar_visualizer_test.dart
new file mode 100644
index 0000000..39d2692
--- /dev/null
+++ b/session_shells/ermine/test/status_tick_bar_visualizer_test.dart
@@ -0,0 +1,110 @@
+// Copyright 2019 The Fuchsia Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// ignore_for_file: implementation_imports
+
+import 'dart:math';
+import 'package:flutter/material.dart';
+
+import 'package:ermine_library/src/widgets/status_tick_bar_visualizer.dart';
+import 'package:test/test.dart';
+
+void main() {
+ StatusTickBarVisualizer testTickBar;
+ StatusTickBarVisualizer testTickBarCustom;
+ TextAlign testTextAlign;
+ TextStyle testTextStyle;
+
+ setUp(() async {
+ testTextAlign = TextAlign.right;
+ testTextStyle = TextStyle();
+ testTickBar = StatusTickBarVisualizer(
+ model: StatusTickBarVisualizerModel(),
+ textAlignment: testTextAlign,
+ textStyle: testTextStyle,
+ );
+ testTickBarCustom = StatusTickBarVisualizer(
+ model: StatusTickBarVisualizerModel(),
+ textAlignment: testTextAlign,
+ textStyle: testTextStyle,
+ );
+ });
+
+ test('test to confirm StatusTickBarVisualizer constructs via default model',
+ () {
+ expect(testTickBar.model.barValue, 'loading...');
+ expect(testTickBar.model.barFill, greaterThanOrEqualTo(0));
+ expect(
+ testTickBar.model.barFill, lessThanOrEqualTo(testTickBar.model.barMax));
+ expect(testTickBar.model.barMax, greaterThanOrEqualTo(0));
+ expect(testTickBar.model.barMax,
+ greaterThanOrEqualTo(testTickBar.model.barFill));
+ expect(testTickBar.model.tickMax, greaterThan(0));
+ expect(testTickBar.model.barFirst, isNotNull);
+ });
+
+ test(
+ 'test to confirm StatusTickBarVisualizer barValue is set correctly via model changes',
+ () {
+ // Confirm default barValue construction values are equal.
+ expect(testTickBar.model.barValue, testTickBarCustom.model.barValue);
+ // Change barValue within custom tick bar (which reflects in animation).
+ String testCustomBarValue = 'test';
+ testTickBarCustom.model.barValue = testCustomBarValue;
+ // Confirm barValue updated correctly & custom model has changed from default.
+ expect(testTickBarCustom.model.barValue, testCustomBarValue);
+ expect(testTickBar.model.barValue, isNot(testTickBarCustom.model.barValue));
+ // Change barValue value again to confirm continuous animation updates possible.
+ testCustomBarValue = 'test2';
+ testTickBarCustom.model.barValue = testCustomBarValue;
+ // Confirm barValue updated correctly again & custom model has changed from default.
+ expect(testTickBarCustom.model.barValue, testCustomBarValue);
+ expect(testTickBar.model.barValue, isNot(testTickBarCustom.model.barValue));
+ });
+
+ test(
+ 'test to confirm StatusTickBarVisualizer barFill is set correctly via model changes',
+ () {
+ // Confirm default barFill construction values are equal.
+ expect(testTickBar.model.barFill, testTickBarCustom.model.barFill);
+ // Change barFill within custom tick bar (which reflects in animation).
+ double testRandomBarFill = Random().nextDouble() * 100;
+ testTickBarCustom.model.barFill = testRandomBarFill;
+ // Confirm barFill updated correctly & custom model has changed from default.
+ expect(testTickBarCustom.model.barFill, testRandomBarFill);
+ expect(testTickBar.model.barFill, isNot(testTickBarCustom.model.barFill));
+ // Change barFill value again to confirm continuous animation updates possible.
+ testRandomBarFill = Random().nextDouble() * 100;
+ testTickBarCustom.model.barFill = testRandomBarFill;
+ // Confirm barFill updated correctly again & custom model has changed from default.
+ expect(testTickBarCustom.model.barFill, testRandomBarFill);
+ expect(testTickBar.model.barFill, isNot(testTickBarCustom.model.barFill));
+ });
+
+ test(
+ 'test to confirm StatusTickBarVisualizer barMax is set correctly via model changes',
+ () {
+ // Confirm default barMax construction values are equal.
+ expect(testTickBar.model.barMax, testTickBarCustom.model.barMax);
+ // Change barMax within custom tick bar (which reflects in animation).
+ double testRandomBarMax = Random().nextDouble() * 100;
+ testTickBarCustom.model.barMax = testRandomBarMax;
+ // Confirm barMax updated correctly & custom model has changed from default.
+ expect(testTickBarCustom.model.barMax, testRandomBarMax);
+ expect(testTickBar.model.barMax, isNot(testTickBarCustom.model.barMax));
+ // Change barMax value again to confirm continuous animation updates possible.
+ testRandomBarMax = Random().nextDouble() * 100;
+ testTickBarCustom.model.barMax = testRandomBarMax;
+ // Confirm barMax updated correctly again & custom model has changed from default.
+ expect(testTickBarCustom.model.barMax, testRandomBarMax);
+ expect(testTickBar.model.barMax, isNot(testTickBarCustom.model.barMax));
+ });
+
+ tearDown(() async {
+ testTickBar = null;
+ testTickBarCustom = null;
+ testTextAlign = null;
+ testTextStyle = null;
+ });
+}