[Ermine] Improved unit tests for memory quickui service
Test: run 'fx run-host-tests ermine_settings_unittests'
Progress: fxb/39966
Change-Id: I142da2900b44d6d29ea1edffd74172f8e25875d3
diff --git a/session_shells/ermine/settings/test/memory_test.dart b/session_shells/ermine/settings/test/memory_test.dart
index 750869e..1ec38c1 100644
--- a/session_shells/ermine/settings/test/memory_test.dart
+++ b/session_shells/ermine/settings/test/memory_test.dart
@@ -16,11 +16,16 @@
mem.WatcherBinding binding = MockBinding();
Memory memory = Memory(monitor: monitorProxy, binding: binding);
- memory.model.updateMem(_buildStats(0.5));
+ final mem.Watcher watcher =
+ verify(binding.wrap(captureAny)).captured.single;
+ await watcher.onChange(_buildStats(0.5));
+
+ // Should receive memory spec
Spec spec = await memory.getSpec();
expect(spec.groups.first.title, isNotNull);
expect(spec.groups.first.values.isEmpty, false);
+ // Confirm progress value is correct
ProgressValue progress = spec.groups.first.values
.where((v) => v.$tag == ValueTag.progress)
.first
@@ -30,13 +35,55 @@
expect(progress?.value, lessThan(1));
expect(progress.value, 0.5);
+ // Confirm text value is correct
+ TextValue text = spec.groups.first.values
+ .where((v) => v.$tag == ValueTag.text)
+ .first
+ ?.text;
+ expect(text?.text, '0.500GB / 1.00GB');
+
+ memory.dispose();
+ });
+
+ test('Change Memory', () async {
+ mem.MonitorProxy monitorProxy = MockMonitorProxy();
+ mem.WatcherBinding binding = MockBinding();
+ Memory memory = Memory(monitor: monitorProxy, binding: binding);
+
+ final mem.Watcher watcher =
+ verify(binding.wrap(captureAny)).captured.single;
+ await watcher.onChange(_buildStats(0.5));
+
+ // Should receive memory spec
+ Spec spec = await memory.getSpec();
+ expect(spec.groups.first.title, isNotNull);
+ expect(spec.groups.first.values.isEmpty, false);
+
+ // Confirm progress value is correct
+ ProgressValue progress = spec.groups.first.values
+ .where((v) => v.$tag == ValueTag.progress)
+ .first
+ ?.progress;
+ expect(progress, isNotNull);
+ expect(progress?.value, greaterThan(0));
+ expect(progress?.value, lessThan(1));
+ expect(progress.value, 0.5);
+
+ // Confirm text value is correct
+ TextValue text = spec.groups.first.values
+ .where((v) => v.$tag == ValueTag.text)
+ .first
+ ?.text;
+ expect(text?.text, '0.500GB / 1.00GB');
+
// Update memory usage.
- memory.model.updateMem(_buildStats(0.7));
+ await watcher.onChange(_buildStats(0.7));
spec = await memory.getSpec();
expect(spec.groups.first.title, isNotNull);
expect(spec.groups.first.values.isEmpty, false);
+ // Confirm progress value is correct
progress = spec.groups.first.values
.where((v) => v.$tag == ValueTag.progress)
.first
@@ -46,17 +93,90 @@
expect(progress?.value, lessThan(1));
expect(progress.value, moreOrLessEquals(0.3, epsilon: 1e-5));
+ // Confirm text value is correct
+ text = spec.groups.first.values
+ .where((v) => v.$tag == ValueTag.text)
+ .first
+ ?.text;
+ expect(text?.text, '0.300GB / 1.00GB');
+
+ memory.dispose();
+ });
+
+ test('Min Memory', () async {
+ mem.MonitorProxy monitorProxy = MockMonitorProxy();
+ mem.WatcherBinding binding = MockBinding();
+ Memory memory = Memory(monitor: monitorProxy, binding: binding);
+
+ final mem.Watcher watcher =
+ verify(binding.wrap(captureAny)).captured.single;
+ await watcher.onChange(_buildStats(1));
+
+ // Should receive memory spec
+ Spec spec = await memory.getSpec();
+ expect(spec.groups.first.title, isNotNull);
+ expect(spec.groups.first.values.isEmpty, false);
+
+ // Confirm progress value is correct
+ ProgressValue progress = spec.groups.first.values
+ .where((v) => v.$tag == ValueTag.progress)
+ .first
+ ?.progress;
+ expect(progress, isNotNull);
+ expect(progress?.value, lessThan(1));
+ expect(progress.value, 0);
+
+ // Confirm text value is correct
+ TextValue text = spec.groups.first.values
+ .where((v) => v.$tag == ValueTag.text)
+ .first
+ ?.text;
+ expect(text?.text, '0.00GB / 1.00GB');
+
+ memory.dispose();
+ });
+
+ test('Max Memory', () async {
+ mem.MonitorProxy monitorProxy = MockMonitorProxy();
+ mem.WatcherBinding binding = MockBinding();
+ Memory memory = Memory(monitor: monitorProxy, binding: binding);
+
+ final mem.Watcher watcher =
+ verify(binding.wrap(captureAny)).captured.single;
+ await watcher.onChange(_buildStats(0));
+
+ // Should receive memory spec
+ Spec spec = await memory.getSpec();
+ expect(spec.groups.first.title, isNotNull);
+ expect(spec.groups.first.values.isEmpty, false);
+
+ // Confirm progress value is correct
+ ProgressValue progress = spec.groups.first.values
+ .where((v) => v.$tag == ValueTag.progress)
+ .first
+ ?.progress;
+ expect(progress, isNotNull);
+ expect(progress?.value, greaterThan(0));
+ expect(progress.value, 1);
+
+ // Confirm text value is correct
+ TextValue text = spec.groups.first.values
+ .where((v) => v.$tag == ValueTag.text)
+ .first
+ ?.text;
+ expect(text?.text, '1.00GB / 1.00GB');
+
memory.dispose();
});
}
int get gB => pow(1024, 3);
-mem.Stats _buildStats(double used) {
+mem.Stats _buildStats(double bytes) {
// ignore: missing_required_param, missing_required_param_with_details
return mem.Stats(
totalBytes: 1 * gB,
- freeBytes: (used * gB).toInt(),
+ freeBytes: (bytes * gB).toInt(),
);
}