Commit 893b4cc
Changed files (2)
lib
model
storage
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