| // 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()); |
| }); |
| }); |
| } |