diff --git a/packages/device_info_plus/device_info_plus_platform_interface/lib/model/android_device_info.dart b/packages/device_info_plus/device_info_plus_platform_interface/lib/model/android_device_info.dart index 974c444ec6..1b0fffa421 100644 --- a/packages/device_info_plus/device_info_plus_platform_interface/lib/model/android_device_info.dart +++ b/packages/device_info_plus/device_info_plus_platform_interface/lib/model/android_device_info.dart @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:convert'; + import 'base_device_info.dart'; /// Information derived from `android.os.Build`. @@ -135,6 +137,10 @@ class AndroidDeviceInfo implements BaseDeviceInfo { }; } + /// `toJson()` returns a JSON string representation of [AndroidDeviceInfo] Model. + @override + String toJson() => jsonEncode(toMap()); + /// Deserializes from the message received from [_kChannel]. static AndroidDeviceInfo fromMap(Map map) { return AndroidDeviceInfo( @@ -220,6 +226,9 @@ class AndroidBuildVersion { }; } + /// `toJson()` returns a JSON string representation of [AndroidBuildVersion] Model. + String toJson() => jsonEncode(toMap()); + /// Deserializes from the map message received from [_kChannel]. static AndroidBuildVersion _fromMap(Map map) { return AndroidBuildVersion._( diff --git a/packages/device_info_plus/device_info_plus_platform_interface/lib/model/base_device_info.dart b/packages/device_info_plus/device_info_plus_platform_interface/lib/model/base_device_info.dart index 7de045e28f..8b91258916 100644 --- a/packages/device_info_plus/device_info_plus_platform_interface/lib/model/base_device_info.dart +++ b/packages/device_info_plus/device_info_plus_platform_interface/lib/model/base_device_info.dart @@ -1,5 +1,10 @@ +import 'dart:convert'; + /// The base class for platform's device info. abstract class BaseDeviceInfo { /// Serializes device info properties to a map. Map toMap(); + + /// `toJson()` returns a JSON string representation of [BaseDeviceInfo] Model. + String toJson() => jsonEncode(toMap()); } diff --git a/packages/device_info_plus/device_info_plus_platform_interface/lib/model/ios_device_info.dart b/packages/device_info_plus/device_info_plus_platform_interface/lib/model/ios_device_info.dart index cbd29ecdd2..7c524d71c2 100644 --- a/packages/device_info_plus/device_info_plus_platform_interface/lib/model/ios_device_info.dart +++ b/packages/device_info_plus/device_info_plus_platform_interface/lib/model/ios_device_info.dart @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:convert'; + import 'base_device_info.dart'; /// Information derived from `UIDevice`. @@ -73,6 +75,10 @@ class IosDeviceInfo implements BaseDeviceInfo { 'isPhysicalDevice': isPhysicalDevice.toString(), }; } + + /// `toJson()` returns a JSON string representation of [IosDeviceInfo] Model. + @override + String toJson() => jsonEncode(toMap()); } /// Information derived from `utsname`. diff --git a/packages/device_info_plus/device_info_plus_platform_interface/lib/model/linux_device_info.dart b/packages/device_info_plus/device_info_plus_platform_interface/lib/model/linux_device_info.dart index 778f76607a..32e8aa7868 100644 --- a/packages/device_info_plus/device_info_plus_platform_interface/lib/model/linux_device_info.dart +++ b/packages/device_info_plus/device_info_plus_platform_interface/lib/model/linux_device_info.dart @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:convert'; + import 'base_device_info.dart'; /// Device information for a Linux system. @@ -156,4 +158,8 @@ class LinuxDeviceInfo implements BaseDeviceInfo { 'machineId': machineId, }; } + + /// `toJson()` returns a JSON string representation of [LinuxDeviceInfo] Model. + @override + String toJson() => jsonEncode(toMap()); } diff --git a/packages/device_info_plus/device_info_plus_platform_interface/lib/model/macos_device_info.dart b/packages/device_info_plus/device_info_plus_platform_interface/lib/model/macos_device_info.dart index 5f9a154ccc..ff04b62fbd 100644 --- a/packages/device_info_plus/device_info_plus_platform_interface/lib/model/macos_device_info.dart +++ b/packages/device_info_plus/device_info_plus_platform_interface/lib/model/macos_device_info.dart @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:convert'; + import 'base_device_info.dart'; /// Object encapsulating MACOS device information. @@ -86,4 +88,8 @@ class MacOsDeviceInfo implements BaseDeviceInfo { systemGUID: map['systemGUID'], ); } + + /// `toJson()` returns a JSON string representation of [MacOsDeviceInfo] Model. + @override + String toJson() => jsonEncode(toMap()); } diff --git a/packages/device_info_plus/device_info_plus_platform_interface/lib/model/web_browser_info.dart b/packages/device_info_plus/device_info_plus_platform_interface/lib/model/web_browser_info.dart index 59eaea9079..80230978cd 100644 --- a/packages/device_info_plus/device_info_plus_platform_interface/lib/model/web_browser_info.dart +++ b/packages/device_info_plus/device_info_plus_platform_interface/lib/model/web_browser_info.dart @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:convert'; + import 'base_device_info.dart'; /// List of supported browsers @@ -132,7 +134,6 @@ class WebBrowserInfo implements BaseDeviceInfo { @override Map toMap() { return { - 'browserName': browserName, 'appCodeName': appCodeName, 'appName': appName, 'appVersion': appVersion, @@ -150,6 +151,10 @@ class WebBrowserInfo implements BaseDeviceInfo { }; } + /// `toJson()` returns a JSON string representation of [WebBrowserInfo] Model. + @override + String toJson() => jsonEncode(toMap()); + BrowserName _parseUserAgentToBrowserName() { final _userAgent = userAgent; if (_userAgent == null) { diff --git a/packages/device_info_plus/device_info_plus_platform_interface/lib/model/windows_device_info.dart b/packages/device_info_plus/device_info_plus_platform_interface/lib/model/windows_device_info.dart index c7bdbc5788..daced05f2b 100644 --- a/packages/device_info_plus/device_info_plus_platform_interface/lib/model/windows_device_info.dart +++ b/packages/device_info_plus/device_info_plus_platform_interface/lib/model/windows_device_info.dart @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:convert'; + import 'base_device_info.dart'; /// Object encapsulating WINDOWS device information. @@ -32,4 +34,8 @@ class WindowsDeviceInfo implements BaseDeviceInfo { 'systemMemoryInMegabytes': systemMemoryInMegabytes, }; } + + /// `toJson()` returns a JSON string representation of [WindowsDeviceInfo] Model. + @override + String toJson() => jsonEncode(toMap()); } diff --git a/packages/device_info_plus/device_info_plus_platform_interface/test/model/android_device_info_test.dart b/packages/device_info_plus/device_info_plus_platform_interface/test/model/android_device_info_test.dart index af14cd0e71..facbf1c18f 100644 --- a/packages/device_info_plus/device_info_plus_platform_interface/test/model/android_device_info_test.dart +++ b/packages/device_info_plus/device_info_plus_platform_interface/test/model/android_device_info_test.dart @@ -1,3 +1,5 @@ +import 'dart:convert'; + import 'package:device_info_plus_platform_interface/model/android_device_info.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -78,6 +80,16 @@ void main() { expect(androidDeviceInfo.toMap(), androidDeviceInfoMap); }); + test('toJson should return correct json string', () { + final androidDeviceInfo = + AndroidDeviceInfo.fromMap(androidDeviceInfoMap); + final androidDeviceInfoJson = jsonEncode(androidDeviceInfo.toMap()); + expect( + androidDeviceInfo.toJson(), + androidDeviceInfoJson, + reason: 'toJson should return correct json string', + ); + }); }); }); } diff --git a/packages/device_info_plus/device_info_plus_platform_interface/test/model/ios_device_info_test.dart b/packages/device_info_plus/device_info_plus_platform_interface/test/model/ios_device_info_test.dart index 6d57671f03..717b85042a 100644 --- a/packages/device_info_plus/device_info_plus_platform_interface/test/model/ios_device_info_test.dart +++ b/packages/device_info_plus/device_info_plus_platform_interface/test/model/ios_device_info_test.dart @@ -1,3 +1,5 @@ +import 'dart:convert'; + import 'package:device_info_plus_platform_interface/model/ios_device_info.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -43,6 +45,15 @@ void main() { expect(iosDeviceInfo.toMap(), iosDeviceInfoMap); }); + test('toJson should return correct json string', () { + final iosDeviceInfo = IosDeviceInfo.fromMap(iosDeviceInfoMap); + final iosDeviceInfoJson = jsonEncode(iosDeviceInfo.toMap()); + expect( + iosDeviceInfo.toJson(), + iosDeviceInfoJson, + reason: 'toJson should return correct json string', + ); + }); }); }); } diff --git a/packages/device_info_plus/device_info_plus_platform_interface/test/model/linux_device_info_test.dart b/packages/device_info_plus/device_info_plus_platform_interface/test/model/linux_device_info_test.dart index 096fe532a9..080aef2a99 100644 --- a/packages/device_info_plus/device_info_plus_platform_interface/test/model/linux_device_info_test.dart +++ b/packages/device_info_plus/device_info_plus_platform_interface/test/model/linux_device_info_test.dart @@ -1,23 +1,24 @@ +import 'dart:convert'; + import 'package:device_info_plus_platform_interface/model/linux_device_info.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { group('$LinuxDeviceInfo', () { + final linuxDeviceInfo = LinuxDeviceInfo( + name: 'name', + version: 'version', + id: 'id', + idLike: ['idLike'], + versionCodename: 'versionCodename', + versionId: 'versionId', + prettyName: 'prettyName', + buildId: 'buildId', + variant: 'variant', + variantId: 'variantId', + machineId: 'machineId', + ); test('toMap should return map with correct key and map', () { - final linuxDeviceInfo = LinuxDeviceInfo( - name: 'name', - version: 'version', - id: 'id', - idLike: ['idLike'], - versionCodename: 'versionCodename', - versionId: 'versionId', - prettyName: 'prettyName', - buildId: 'buildId', - variant: 'variant', - variantId: 'variantId', - machineId: 'machineId', - ); - expect(linuxDeviceInfo.toMap(), { 'name': 'name', 'version': 'version', @@ -32,5 +33,13 @@ void main() { 'machineId': 'machineId', }); }); + test('toJson should return correct json string', () { + final linuxDeviceInfoJson = jsonEncode(linuxDeviceInfo.toMap()); + expect( + linuxDeviceInfo.toJson(), + linuxDeviceInfoJson, + reason: 'toJson should return correct json string', + ); + }); }); } diff --git a/packages/device_info_plus/device_info_plus_platform_interface/test/model/macos_device_info_test.dart b/packages/device_info_plus/device_info_plus_platform_interface/test/model/macos_device_info_test.dart index 2ce927d409..27faeccc70 100644 --- a/packages/device_info_plus/device_info_plus_platform_interface/test/model/macos_device_info_test.dart +++ b/packages/device_info_plus/device_info_plus_platform_interface/test/model/macos_device_info_test.dart @@ -1,3 +1,5 @@ +import 'dart:convert'; + import 'package:device_info_plus_platform_interface/model/macos_device_info.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -69,6 +71,15 @@ void main() { expect(macosDeviceInfo.toMap(), macosDeviceInfoMap); }); + test('toJson should return correct json string', () { + final macosDeviceInfo = MacOsDeviceInfo.fromMap(macosDeviceInfoMap); + final macosDeviceInfoJson = jsonEncode(macosDeviceInfo.toMap()); + expect( + macosDeviceInfo.toJson(), + macosDeviceInfoJson, + reason: 'toJson should return correct json string', + ); + }); }); }); } diff --git a/packages/device_info_plus/device_info_plus_platform_interface/test/model/web_browser_info_test.dart b/packages/device_info_plus/device_info_plus_platform_interface/test/model/web_browser_info_test.dart index 8529d4b8a8..4254bf61c8 100644 --- a/packages/device_info_plus/device_info_plus_platform_interface/test/model/web_browser_info_test.dart +++ b/packages/device_info_plus/device_info_plus_platform_interface/test/model/web_browser_info_test.dart @@ -1,3 +1,5 @@ +import 'dart:convert'; + import 'package:device_info_plus_platform_interface/model/web_browser_info.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -5,7 +7,6 @@ void main() { group('$WebBrowserInfo', () { group('fromMap | toMap', () { const webBrowserInfoMap = { - 'browserName': BrowserName.safari, 'appCodeName': 'appCodeName', 'appName': 'appName', 'appVersion': 'appVersion', @@ -46,6 +47,15 @@ void main() { final webBrowserInfo = WebBrowserInfo.fromMap(webBrowserInfoMap); expect(webBrowserInfo.toMap(), webBrowserInfoMap); }); + test('toJson should return correct json string', () { + final webBrowserInfo = WebBrowserInfo.fromMap(webBrowserInfoMap); + final webBrowserInfoJson = jsonEncode(webBrowserInfo.toMap()); + expect( + webBrowserInfo.toJson(), + webBrowserInfoJson, + reason: 'toJson should return correct json string', + ); + }); }); }); } diff --git a/packages/device_info_plus/device_info_plus_platform_interface/test/model/windows_device_info_test.dart b/packages/device_info_plus/device_info_plus_platform_interface/test/model/windows_device_info_test.dart index 4bf89b7f0a..cfb1ebc0f7 100644 --- a/packages/device_info_plus/device_info_plus_platform_interface/test/model/windows_device_info_test.dart +++ b/packages/device_info_plus/device_info_plus_platform_interface/test/model/windows_device_info_test.dart @@ -1,3 +1,5 @@ +import 'dart:convert'; + import 'package:device_info_plus_platform_interface/model/windows_device_info.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -16,5 +18,18 @@ void main() { 'systemMemoryInMegabytes': 16, }); }); + test('toJson should return correct json string', () { + final windowsDeviceInfo = WindowsDeviceInfo( + computerName: 'computerName', + numberOfCores: 4, + systemMemoryInMegabytes: 16, + ); + final windowsDeviceInfoJson = jsonEncode(windowsDeviceInfo.toMap()); + expect( + windowsDeviceInfo.toJson(), + windowsDeviceInfoJson, + reason: 'toJson should return correct json string', + ); + }); }); }