blob: a67360281fb57b6affbc4d6615a29718dc873c73 [file] [edit]
// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:dart_model/src/json_buffer.dart';
import 'package:test/test.dart';
void main() {
group(JsonBuffer, () {
test('map with integer values', () {
final buffer =
JsonBuffer(LazyMap(['a', 'aa', 'bbb'], (key) => key.length));
expect(buffer.asMap.keys, ['a', 'aa', 'bbb']);
expect(buffer.asMap, {'a': 1, 'aa': 2, 'bbb': 3});
});
test('map with string values', () {
final buffer = JsonBuffer(
LazyMap(['a', 'aa', 'bbb'], (key) => key.length.toString()));
expect(buffer.asMap.keys, ['a', 'aa', 'bbb']);
expect(buffer.asMap, {'a': '1', 'aa': '2', 'bbb': '3'});
});
test('map with bool values', () {
final buffer =
JsonBuffer(LazyMap(['a', 'aa', 'bbb'], (key) => key == 'aa'));
expect(buffer.asMap.keys, ['a', 'aa', 'bbb']);
expect(buffer.asMap, {'a': false, 'aa': true, 'bbb': false});
});
test('map with map values', () {
final buffer = JsonBuffer(LazyMap(
['a', 'aa', 'bbb'],
(key) => LazyMap(
['${key}1', '${key}2'], (key) => key.substring(key.length - 1))));
expect(buffer.asMap.keys, ['a', 'aa', 'bbb']);
expect(buffer.asMap, {
'a': {'a1': '1', 'a2': '2'},
'aa': {'aa1': '1', 'aa2': '2'},
'bbb': {'bbb1': '1', 'bbb2': '2'},
});
});
test('serialization round trip', () {
final buffer = JsonBuffer(LazyMap(
['a', 'aa', 'bbb'],
(key) => LazyMap(
['${key}1', '${key}2'], (key) => key.substring(key.length - 1))));
final roundTripBuffer = JsonBuffer.deserialize(buffer.serialize());
expect(roundTripBuffer.asMap, buffer.asMap);
});
test('serialization round trip large map', () {
final buffer = JsonBuffer(LazyMap(
List.generate(1000000, (i) => i.toString()),
(key) => key.toString()));
final roundTripBuffer = JsonBuffer.deserialize(buffer.serialize());
expect(roundTripBuffer.asMap.keys.length, 1000000);
// Don't use `expect` to compare for equality as it's quadratic in `Map`
// size.
expect(roundTripBuffer.asMap.keys.toList(), buffer.asMap.keys.toList());
expect(
roundTripBuffer.asMap.values.toList(), buffer.asMap.values.toList());
});
});
}