94 lines
2.5 KiB
Dart
94 lines
2.5 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:jadb/models/kanji_search/kanji_search_radical.dart';
|
|
import 'package:jadb/models/kanji_search/kanji_search_result.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
Object? _roundTripJson(Object? value) => jsonDecode(jsonEncode(value));
|
|
|
|
Map<String, dynamic> _roundTripMap(Object? json) =>
|
|
Map<String, dynamic>.from(_roundTripJson(json) as Map);
|
|
|
|
void main() {
|
|
test('KanjiSearchRadical JSON serialization roundtrip', () {
|
|
const radical = KanjiSearchRadical(
|
|
symbol: '人',
|
|
names: ['ひと', 'にんべん'],
|
|
forms: ['亻'],
|
|
meanings: ['person', 'human'],
|
|
);
|
|
|
|
final restored = KanjiSearchRadical.fromJson(
|
|
_roundTripMap(radical.toJson()),
|
|
);
|
|
|
|
expect(restored, equals(radical));
|
|
});
|
|
|
|
test('KanjiSearchResult JSON serialization roundtrip', () {
|
|
const result = KanjiSearchResult(
|
|
kanji: '休',
|
|
taughtIn: 1,
|
|
jlptLevel: 'N5',
|
|
newspaperFrequencyRank: 1234,
|
|
strokeCount: 6,
|
|
meanings: ['rest', 'day off'],
|
|
kunyomi: ['やす.む', 'やす.まる'],
|
|
onyomi: ['キュウ'],
|
|
radical: KanjiSearchRadical(
|
|
symbol: '人',
|
|
names: ['ひと', 'にんべん'],
|
|
forms: ['亻'],
|
|
meanings: ['person', 'human'],
|
|
),
|
|
parts: ['亻', '木'],
|
|
codepoints: {'ucs': '4F11', 'jis208': '1-22-57'},
|
|
nanori: ['やす'],
|
|
alternativeLanguageReadings: {
|
|
'korean': ['휴'],
|
|
'pinyin': ['xiū'],
|
|
},
|
|
strokeMiscounts: [5, 7],
|
|
queryCodes: {
|
|
'skip': ['1-2-4'],
|
|
'fourCorner': ['2429.0'],
|
|
},
|
|
dictionaryReferences: {'nelson_c': '122', 'heisig': '457'},
|
|
);
|
|
|
|
final restored = KanjiSearchResult.fromJson(_roundTripMap(result.toJson()));
|
|
|
|
expect(restored, equals(result));
|
|
});
|
|
|
|
test(
|
|
'KanjiSearchResult JSON serialization roundtrip - nullable and empty fields',
|
|
() {
|
|
const result = KanjiSearchResult(
|
|
kanji: '々',
|
|
taughtIn: null,
|
|
jlptLevel: null,
|
|
newspaperFrequencyRank: null,
|
|
strokeCount: 3,
|
|
meanings: ['iteration mark'],
|
|
kunyomi: [],
|
|
onyomi: [],
|
|
radical: null,
|
|
parts: [],
|
|
codepoints: {'ucs': '3005'},
|
|
nanori: [],
|
|
alternativeLanguageReadings: {},
|
|
strokeMiscounts: [],
|
|
queryCodes: {},
|
|
dictionaryReferences: {},
|
|
);
|
|
|
|
final restored = KanjiSearchResult.fromJson(
|
|
_roundTripMap(result.toJson()),
|
|
);
|
|
|
|
expect(restored, equals(result));
|
|
},
|
|
);
|
|
}
|