mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-09-13 14:48:20 +08:00
MdYamlCodec: Load maps properly
Our MdYamlCodec runs inside an isolate, and send the result back. The YamlMap data structure doesn't seem to be serializable over an isolate and gives us an error. Therefore, we should make sure it is a normal map.
This commit is contained in:
@ -91,9 +91,7 @@ class MarkdownYAMLCodec {
|
||||
if (yamlMap is! Map) {
|
||||
return map;
|
||||
}
|
||||
yamlMap.forEach((key, value) {
|
||||
map[key] = value;
|
||||
});
|
||||
map = _convertMap(yamlMap);
|
||||
} catch (err) {
|
||||
Log.d('MarkdownYAMLSerializer::decode("$yamlText") -> ${err.toString()}');
|
||||
}
|
||||
@ -125,3 +123,16 @@ class MarkdownYAMLCodec {
|
||||
return "---\n" + yaml + "---\n";
|
||||
}
|
||||
}
|
||||
|
||||
LinkedHashMap<String, dynamic> _convertMap(YamlMap yamlMap) {
|
||||
LinkedHashMap<String, dynamic> map = LinkedHashMap<String, dynamic>();
|
||||
|
||||
yamlMap.forEach((key, value) {
|
||||
if (value is YamlMap) {
|
||||
value = _convertMap(value);
|
||||
}
|
||||
map[key] = value;
|
||||
});
|
||||
|
||||
return map;
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
import 'dart:collection';
|
||||
|
||||
import 'package:test/test.dart';
|
||||
import 'package:yaml/yaml.dart';
|
||||
|
||||
import 'package:gitjournal/core/md_yaml_doc.dart';
|
||||
import 'package:gitjournal/core/md_yaml_doc_codec.dart';
|
||||
@ -208,5 +209,24 @@ foo: bar
|
||||
// FIXME: Add another test for yaml header at the bottom without a newline
|
||||
// FIXME: Add another test for yaml header at the bottom with lots of new lines after
|
||||
// FIXME: Add another test for yaml header at the bottom with lots of new lines with spaces after
|
||||
|
||||
test('Should not have any YamlMaps', () {
|
||||
// YamlMaps cannot be sent over an isolate
|
||||
|
||||
var str = """---
|
||||
thumbnail: {
|
||||
name: "adrian_sommeling.jpg",
|
||||
alt: "Padre e hijo se cubren con un paraguas de una tormenta que hace volar al niño",
|
||||
style: top
|
||||
}
|
||||
tags: ["opinión", "autores"]
|
||||
---
|
||||
""";
|
||||
|
||||
var serializer = MarkdownYAMLCodec();
|
||||
var doc = serializer.decode(str);
|
||||
|
||||
expect(doc.props['thumbnail'].runtimeType, isNot(YamlMap));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
Reference in New Issue
Block a user