Commit 893b4cc

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2023-10-03 15:34:29
add tests for parsing functions
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent f6a08a9
Changed files (2)
lib
model
test
lib/model/storage/convert_util.dart
@@ -14,8 +14,14 @@ class ConvertUtil {
   }
 
   static int? parseInt(dynamic value) {
-    if (value is int || value is int?) return value;
-    if (value is String) return int.tryParse(value);
+    if (value is int) return value;
+    if (value is double) return _isInt(value);
+    if (value is String) return int.tryParse(value) ?? _isInt(double.tryParse(value));
+    return null;
+  }
+
+  static int? _isInt(double? value) {
+    if (value?.toInt() == value) return value?.toInt();
     return null;
   }
 
@@ -39,7 +45,8 @@ class ConvertUtil {
   }
 
   static Locale? parseLocale(dynamic value) {
-    if (value == 'NULL') return null;
+    if (value is Locale) return value;
+    if (value is String && value.toLowerCase() == 'null') return null;
     if (value is String) return Locale(value);
     return null;
   }
@@ -77,7 +84,7 @@ class ConvertUtil {
         1,
       );
     }
-    return MaterialColor(value, swatch);
+    return MaterialColor(color.value, swatch);
   }
 
   static DateTimeRange? parseRange(dynamic start, dynamic end) {
test/model/convert_util_test.dart
@@ -0,0 +1,104 @@
+import 'package:blood_pressure_app/model/storage/convert_util.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+void main() {
+  group('ConvertUtil', () {
+    test('parseBool should parse valid boolean correctly', () {
+      expect(ConvertUtil.parseBool(true), true);
+      expect(ConvertUtil.parseBool(false), false);
+      expect(ConvertUtil.parseBool(1), true);
+      expect(ConvertUtil.parseBool(1.0), true);
+      expect(ConvertUtil.parseBool(0), false);
+      expect(ConvertUtil.parseBool(0.0), false);
+      expect(ConvertUtil.parseBool('true'), true);
+      expect(ConvertUtil.parseBool('false'), false);
+    });
+    test('parseBool should parse invalid values as null', () {
+      expect(ConvertUtil.parseBool('test'), null);
+      expect(ConvertUtil.parseBool(132), null);
+      expect(ConvertUtil.parseBool(-1), null);
+      expect(ConvertUtil.parseBool({'test': 5}), null);
+      expect(ConvertUtil.parseBool(null), null);
+      expect(ConvertUtil.parseBool(1.1), null);
+    });
+
+    test('parseInt should parse valid values correctly', () {
+      expect(ConvertUtil.parseInt(123), 123);
+      expect(ConvertUtil.parseInt(534), 534);
+      expect(ConvertUtil.parseInt(-1123), -1123);
+      expect(ConvertUtil.parseInt(1.0), 1);
+      expect(ConvertUtil.parseInt(0), 0);
+      expect(ConvertUtil.parseInt('0'), 0);
+      expect(ConvertUtil.parseInt('1321.0'), 1321);
+      expect(ConvertUtil.parseInt('-1234'), -1234);
+    });
+    test('parseInt should parse invalid values as null', () {
+      expect(ConvertUtil.parseInt('test'), null);
+      expect(ConvertUtil.parseInt(true), null);
+      expect(ConvertUtil.parseInt(1.2), null);
+      expect(ConvertUtil.parseInt({'test': 5}), null);
+      expect(ConvertUtil.parseInt(null), null);
+      expect(ConvertUtil.parseInt('123test'), null);
+    });
+
+    test('parseDouble should parse valid values correctly', () {
+      expect(ConvertUtil.parseDouble(123.123), 123.123);
+      expect(ConvertUtil.parseDouble(534), 534.0);
+      expect(ConvertUtil.parseDouble(-1123.543), -1123.543);
+      expect(ConvertUtil.parseDouble(1.0), 1.0);
+      expect(ConvertUtil.parseDouble(0.0), 0.0);
+      expect(ConvertUtil.parseDouble('0'), 0.0);
+      expect(ConvertUtil.parseDouble('1321.1234'), 1321.1234);
+      expect(ConvertUtil.parseDouble('-1234.654'), -1234.654);
+    });
+    test('parseDouble should parse invalid values as null', () {
+      expect(ConvertUtil.parseDouble('test'), null);
+      expect(ConvertUtil.parseDouble(true), null);
+      expect(ConvertUtil.parseDouble({'test': 5}), null);
+      expect(ConvertUtil.parseDouble(null), null);
+      expect(ConvertUtil.parseDouble('123test'), null);
+      expect(ConvertUtil.parseDouble('1234.1234.1234'), null);
+    });
+
+    test('parseString should parse valid values correctly', () {
+      expect(ConvertUtil.parseString('123.123'), '123.123');
+      expect(ConvertUtil.parseString('dasdhjsadjka'), 'dasdhjsadjka');
+      expect(ConvertUtil.parseString(123), '123');
+      expect(ConvertUtil.parseString(true), 'true');
+      expect(ConvertUtil.parseString(0.123), '0.123');
+      expect(ConvertUtil.parseString('null'), 'null');
+    });
+    test('parseString should parse invalid values as null', () {
+      expect(ConvertUtil.parseString(const Locale('test')), null);
+      expect(ConvertUtil.parseString({'test': 5}), null);
+    });
+
+    test('parseMaterialColor should parse valid values correctly', () {
+      expect(ConvertUtil.parseMaterialColor(Colors.deepOrange), Colors.deepOrange);
+      expect(ConvertUtil.parseMaterialColor(Colors.grey)?.value, Colors.grey.value);
+      expect(ConvertUtil.parseMaterialColor(Colors.grey.value)?.value, Colors.grey.value);
+      expect(ConvertUtil.parseMaterialColor(Colors.deepOrange.value)?.value, Colors.deepOrange.value);
+      expect(ConvertUtil.parseMaterialColor(0xff000000)?.value, 0xff000000);
+      expect(ConvertUtil.parseMaterialColor('0x00ff0000')?.value, 0x00ff0000);
+      expect(ConvertUtil.parseMaterialColor(const Color(0x00ff0000))?.value, 0x00ff0000);
+    });
+    test('parseMaterialColor should parse invalid values as null', () {
+      expect(ConvertUtil.parseMaterialColor('test'), null);
+      expect(ConvertUtil.parseString({'test': 5}), null);
+    });
+
+    test('parseLocale should not crash', () {
+      expect(ConvertUtil.parseLocale(const Locale('test')), const Locale('test'));
+      expect(ConvertUtil.parseLocale('DE'), const Locale('DE'));
+      expect(ConvertUtil.parseLocale(15), null);
+      expect(ConvertUtil.parseLocale(false), null);
+      expect(ConvertUtil.parseLocale('123'), const Locale('123'));
+    });
+    test('parseLocale should return null for string "NULL"', () {
+      expect(ConvertUtil.parseLocale('NULL'), null);
+      expect(ConvertUtil.parseLocale('null'), null);
+      expect(ConvertUtil.parseLocale('NuLl'), null);
+    });
+  });
+}
\ No newline at end of file