diff --git a/lib/screens/metering/components/camera_container/state_container_camera.dart b/lib/screens/metering/components/camera_container/state_container_camera.dart index 6548a87..4dfc02d 100644 --- a/lib/screens/metering/components/camera_container/state_container_camera.dart +++ b/lib/screens/metering/components/camera_container/state_container_camera.dart @@ -62,4 +62,14 @@ class CameraErrorState extends CameraContainerState { final CameraErrorType error; const CameraErrorState(this.error); + + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + if (other.runtimeType != runtimeType) return false; + return other is CameraErrorState && other.error == error; + } + + @override + int get hashCode => Object.hash(error, runtimeType); } diff --git a/test/screens/metering/components/camera/event_container_camera_test.dart b/test/screens/metering/components/camera/event_container_camera_test.dart new file mode 100644 index 0000000..f136b5f --- /dev/null +++ b/test/screens/metering/components/camera/event_container_camera_test.dart @@ -0,0 +1,44 @@ +// ignore_for_file: prefer_const_constructors + +import 'package:lightmeter/screens/metering/components/camera_container/event_container_camera.dart'; +import 'package:test/test.dart'; + +void main() { + group( + '`ZoomChangedEvent`', + () { + final a = ZoomChangedEvent(1.0); + final b = ZoomChangedEvent(1.0); + final c = ZoomChangedEvent(2.0); + test('==', () { + expect(a == b && b == a, true); + expect(a != c && c != a, true); + expect(b != c && c != b, true); + }); + test('hashCode', () { + expect(a.hashCode == b.hashCode, true); + expect(a.hashCode != c.hashCode, true); + expect(b.hashCode != c.hashCode, true); + }); + }, + ); + + group( + '`ExposureOffsetChangedEvent`', + () { + final a = ExposureOffsetChangedEvent(1.0); + final b = ExposureOffsetChangedEvent(1.0); + final c = ExposureOffsetChangedEvent(2.0); + test('==', () { + expect(a == b && b == a, true); + expect(a != c && c != a, true); + expect(b != c && c != b, true); + }); + test('hashCode', () { + expect(a.hashCode == b.hashCode, true); + expect(a.hashCode != c.hashCode, true); + expect(b.hashCode != c.hashCode, true); + }); + }, + ); +} diff --git a/test/screens/metering/components/camera/state_container_camera_test.dart b/test/screens/metering/components/camera/state_container_camera_test.dart new file mode 100644 index 0000000..91a3eae --- /dev/null +++ b/test/screens/metering/components/camera/state_container_camera_test.dart @@ -0,0 +1,64 @@ +// ignore_for_file: prefer_const_constructors + +import 'package:flutter/material.dart'; +import 'package:lightmeter/screens/metering/components/camera_container/models/camera_error_type.dart'; +import 'package:lightmeter/screens/metering/components/camera_container/state_container_camera.dart'; +import 'package:test/test.dart'; + +void main() { + group( + '`CameraActiveState`', + () { + final a = CameraActiveState( + zoomRange: RangeValues(1, 7), + currentZoom: 1, + exposureOffsetRange: RangeValues(-4, 4), + currentExposureOffset: 0, + exposureOffsetStep: 0.167, + ); + final b = CameraActiveState( + zoomRange: RangeValues(1, 7), + currentZoom: 1, + exposureOffsetRange: RangeValues(-4, 4), + currentExposureOffset: 0, + exposureOffsetStep: 0.167, + ); + final c = CameraActiveState( + zoomRange: RangeValues(1, 4), + currentZoom: 3, + exposureOffsetRange: RangeValues(-2, 2), + currentExposureOffset: 0, + exposureOffsetStep: 0.167, + ); + test('==', () { + expect(a == b && b == a, true); + expect(a != c && c != a, true); + expect(b != c && c != b, true); + }); + test('hashCode', () { + expect(a.hashCode == b.hashCode, true); + expect(a.hashCode != c.hashCode, true); + expect(b.hashCode != c.hashCode, true); + }); + }, + ); + + group( + '`CameraErrorState`', + () { + final a = CameraErrorState(CameraErrorType.noCamerasDetected); + final b = CameraErrorState(CameraErrorType.noCamerasDetected); + final c = CameraErrorState(CameraErrorType.other); + test('==', () { + expect(a == b && b == a, true); + expect(a != c && c != a, true); + expect(b != c && c != b, true); + }); + test('hashCode', () { + expect(a.hashCode == b.hashCode, true); + expect(a.hashCode != c.hashCode, true); + expect(b.hashCode != c.hashCode, true); + }); + }, + ); +}