Skip to content

Commit f78f32c

Browse files
authored
feat(device_info_plus): allow to mock device info (#3525)
1 parent dfb68f5 commit f78f32c

File tree

4 files changed

+252
-0
lines changed

4 files changed

+252
-0
lines changed

packages/device_info_plus/device_info_plus/lib/device_info_plus.dart

+20
Original file line numberDiff line numberDiff line change
@@ -112,4 +112,24 @@ class DeviceInfoPlugin {
112112
// allow for extension of the plugin
113113
return _platform.deviceInfo();
114114
}
115+
116+
/// Initializes the application metadata with mock values for testing.
117+
@visibleForTesting
118+
static DeviceInfoPlugin setMockInitialValues({
119+
AndroidDeviceInfo? androidDeviceInfo,
120+
IosDeviceInfo? iosDeviceInfo,
121+
LinuxDeviceInfo? linuxDeviceInfo,
122+
WebBrowserInfo? webBrowserInfo,
123+
MacOsDeviceInfo? macOsDeviceInfo,
124+
WindowsDeviceInfo? windowsDeviceInfo,
125+
}) {
126+
final DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();
127+
deviceInfoPlugin._cachedAndroidDeviceInfo = androidDeviceInfo;
128+
deviceInfoPlugin._cachedIosDeviceInfo = iosDeviceInfo;
129+
deviceInfoPlugin._cachedLinuxDeviceInfo = linuxDeviceInfo;
130+
deviceInfoPlugin._cachedWebBrowserInfo = webBrowserInfo;
131+
deviceInfoPlugin._cachedMacosDeviceInfo = macOsDeviceInfo;
132+
deviceInfoPlugin._cachedWindowsDeviceInfo = windowsDeviceInfo;
133+
return deviceInfoPlugin;
134+
}
115135
}

packages/device_info_plus/device_info_plus/lib/src/model/android_device_info.dart

+112
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// found in the LICENSE file.
44

55
import 'package:device_info_plus_platform_interface/model/base_device_info.dart';
6+
import 'package:meta/meta.dart';
67

78
/// Information derived from `android.os.Build`.
89
///
@@ -176,6 +177,95 @@ class AndroidDeviceInfo extends BaseDeviceInfo {
176177
);
177178
}
178179

180+
/// Initializes the application metadata with mock values for testing.
181+
@visibleForTesting
182+
static AndroidDeviceInfo setMockInitialValues({
183+
required AndroidBuildVersion version,
184+
required String board,
185+
required String bootloader,
186+
required String brand,
187+
required String device,
188+
required String display,
189+
required String fingerprint,
190+
required String hardware,
191+
required String host,
192+
required String id,
193+
required String manufacturer,
194+
required String model,
195+
required String product,
196+
required String name,
197+
required List<String> supported32BitAbis,
198+
required List<String> supported64BitAbis,
199+
required List<String> supportedAbis,
200+
required String tags,
201+
required String type,
202+
required bool isPhysicalDevice,
203+
required List<String> systemFeatures,
204+
required String serialNumber,
205+
required bool isLowRamDevice,
206+
}) {
207+
final Map<String, dynamic> data = {
208+
'version': {
209+
'baseOS': version.baseOS,
210+
'sdkInt': version.sdkInt,
211+
'release': version.release,
212+
'codename': version.codename,
213+
'incremental': version.incremental,
214+
'previewSdkInt': version.previewSdkInt,
215+
'securityPatch': version.securityPatch,
216+
},
217+
'board': board,
218+
'bootloader': bootloader,
219+
'brand': brand,
220+
'device': device,
221+
'display': display,
222+
'fingerprint': fingerprint,
223+
'hardware': hardware,
224+
'host': host,
225+
'id': id,
226+
'manufacturer': manufacturer,
227+
'model': model,
228+
'product': product,
229+
'name': name,
230+
'supported32BitAbis': supported32BitAbis,
231+
'supported64BitAbis': supported64BitAbis,
232+
'supportedAbis': supportedAbis,
233+
'tags': tags,
234+
'type': type,
235+
'isPhysicalDevice': isPhysicalDevice,
236+
'systemFeatures': systemFeatures,
237+
'serialNumber': serialNumber,
238+
'isLowRamDevice': isLowRamDevice,
239+
};
240+
241+
return AndroidDeviceInfo._(
242+
data: data,
243+
version: version,
244+
board: board,
245+
bootloader: bootloader,
246+
brand: brand,
247+
device: device,
248+
display: display,
249+
fingerprint: fingerprint,
250+
hardware: hardware,
251+
host: host,
252+
id: id,
253+
manufacturer: manufacturer,
254+
model: model,
255+
product: product,
256+
name: name,
257+
supported32BitAbis: _fromList(supported32BitAbis),
258+
supported64BitAbis: _fromList(supported64BitAbis),
259+
supportedAbis: _fromList(supportedAbis),
260+
tags: tags,
261+
type: type,
262+
isPhysicalDevice: isPhysicalDevice,
263+
systemFeatures: _fromList(systemFeatures),
264+
serialNumber: serialNumber,
265+
isLowRamDevice: isLowRamDevice,
266+
);
267+
}
268+
179269
/// Deserializes message as `List<String>`
180270
static List<String> _fromList(List<dynamic> message) {
181271
final list = message.takeWhile((item) => item != null).toList();
@@ -250,4 +340,26 @@ class AndroidBuildVersion {
250340
securityPatch: map['securityPatch'],
251341
);
252342
}
343+
344+
/// Initializes the application metadata with mock values for testing.
345+
@visibleForTesting
346+
static AndroidBuildVersion setMockInitialValues({
347+
String? baseOS,
348+
required String codename,
349+
required String incremental,
350+
required int previewSdkInt,
351+
required String release,
352+
required int sdkInt,
353+
String? securityPatch,
354+
}) {
355+
return AndroidBuildVersion._(
356+
baseOS: baseOS,
357+
codename: codename,
358+
incremental: incremental,
359+
previewSdkInt: previewSdkInt,
360+
release: release,
361+
sdkInt: sdkInt,
362+
securityPatch: securityPatch,
363+
);
364+
}
253365
}

packages/device_info_plus/device_info_plus/lib/src/model/ios_device_info.dart

+66
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// found in the LICENSE file.
44

55
import 'package:device_info_plus_platform_interface/model/base_device_info.dart';
6+
import 'package:meta/meta.dart';
67

78
/// Information derived from `UIDevice`.
89
///
@@ -82,6 +83,53 @@ class IosDeviceInfo extends BaseDeviceInfo {
8283
IosUtsname._fromMap(map['utsname']?.cast<String, dynamic>() ?? {}),
8384
);
8485
}
86+
87+
/// Initializes the application metadata with mock values for testing.
88+
@visibleForTesting
89+
static IosDeviceInfo setMockInitialValues({
90+
required String name,
91+
required String systemName,
92+
required String systemVersion,
93+
required String model,
94+
required String modelName,
95+
required String localizedModel,
96+
String? identifierForVendor,
97+
required bool isPhysicalDevice,
98+
required bool isiOSAppOnMac,
99+
required IosUtsname utsname,
100+
}) {
101+
final Map<String, dynamic> data = {
102+
'name': name,
103+
'systemName': systemName,
104+
'systemVersion': systemVersion,
105+
'model': model,
106+
'modelName': modelName,
107+
'localizedModel': localizedModel,
108+
'identifierForVendor': identifierForVendor,
109+
'isPhysicalDevice': isPhysicalDevice,
110+
'isiOSAppOnMac': isiOSAppOnMac,
111+
'utsname': {
112+
'sysname': utsname.sysname,
113+
'nodename': utsname.nodename,
114+
'release': utsname.release,
115+
'version': utsname.version,
116+
'machine': utsname.machine,
117+
},
118+
};
119+
return IosDeviceInfo._(
120+
data: data,
121+
name: name,
122+
systemName: systemName,
123+
systemVersion: systemVersion,
124+
model: model,
125+
modelName: modelName,
126+
localizedModel: localizedModel,
127+
identifierForVendor: identifierForVendor,
128+
isPhysicalDevice: isPhysicalDevice,
129+
isiOSAppOnMac: isiOSAppOnMac,
130+
utsname: utsname,
131+
);
132+
}
85133
}
86134

87135
/// Information derived from `utsname`.
@@ -120,4 +168,22 @@ class IosUtsname {
120168
machine: map['machine'],
121169
);
122170
}
171+
172+
/// Initializes the application metadata with mock values for testing.
173+
@visibleForTesting
174+
static IosUtsname setMockInitialValues({
175+
required String sysname,
176+
required String nodename,
177+
required String release,
178+
required String version,
179+
required String machine,
180+
}) {
181+
return IosUtsname._(
182+
sysname: sysname,
183+
nodename: nodename,
184+
release: release,
185+
version: version,
186+
machine: machine,
187+
);
188+
}
123189
}

packages/device_info_plus/device_info_plus/lib/src/model/macos_device_info.dart

+54
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// found in the LICENSE file.
44

55
import 'package:device_info_plus_platform_interface/model/base_device_info.dart';
6+
import 'package:meta/meta.dart';
67

78
/// Object encapsulating MACOS device information.
89
class MacOsDeviceInfo extends BaseDeviceInfo {
@@ -94,4 +95,57 @@ class MacOsDeviceInfo extends BaseDeviceInfo {
9495
systemGUID: map['systemGUID'],
9596
);
9697
}
98+
99+
/// Initializes the application metadata with mock values for testing.
100+
@visibleForTesting
101+
static MacOsDeviceInfo setMockInitialValues({
102+
required String computerName,
103+
required String hostName,
104+
required String arch,
105+
required String model,
106+
required String modelName,
107+
required String kernelVersion,
108+
required String osRelease,
109+
required int majorVersion,
110+
required int minorVersion,
111+
required int patchVersion,
112+
required int activeCPUs,
113+
required int memorySize,
114+
required int cpuFrequency,
115+
required String systemGUID,
116+
}) {
117+
final Map<String, dynamic> data = {
118+
'computerName': computerName,
119+
'hostName': hostName,
120+
'arch': arch,
121+
'model': model,
122+
'modelName': modelName,
123+
'kernelVersion': kernelVersion,
124+
'osRelease': osRelease,
125+
'majorVersion': majorVersion,
126+
'minorVersion': minorVersion,
127+
'patchVersion': patchVersion,
128+
'activeCPUs': activeCPUs,
129+
'memorySize': memorySize,
130+
'cpuFrequency': cpuFrequency,
131+
'systemGUID': systemGUID,
132+
};
133+
return MacOsDeviceInfo._(
134+
data: data,
135+
computerName: computerName,
136+
hostName: hostName,
137+
arch: arch,
138+
model: model,
139+
modelName: modelName,
140+
kernelVersion: kernelVersion,
141+
osRelease: osRelease,
142+
majorVersion: majorVersion,
143+
minorVersion: minorVersion,
144+
patchVersion: patchVersion,
145+
activeCPUs: activeCPUs,
146+
memorySize: memorySize,
147+
cpuFrequency: cpuFrequency,
148+
systemGUID: systemGUID,
149+
);
150+
}
97151
}

0 commit comments

Comments
 (0)