mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-09-12 05:53:27 +08:00

It more clearly defines what exactly it is. This is important as its less confusing for when we add support for other file types.
188 lines
4.2 KiB
Dart
188 lines
4.2 KiB
Dart
import 'dart:collection';
|
|
|
|
import 'package:gitjournal/core/md_yaml_doc.dart';
|
|
import 'package:gitjournal/core/md_yaml_doc_codec.dart';
|
|
import 'package:gitjournal/utils/datetime.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
DateTime nowWithoutMicro() {
|
|
var dt = DateTime.now();
|
|
return DateTime(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second);
|
|
}
|
|
|
|
void main() {
|
|
group('Serializers', () {
|
|
test('Markdown Serializer', () {
|
|
var created = toIso8601WithTimezone(nowWithoutMicro());
|
|
var note = MdYamlDoc(
|
|
"This is the body", LinkedHashMap.from({"created": created}));
|
|
|
|
var serializer = MarkdownYAMLCodec();
|
|
var str = serializer.encode(note);
|
|
var note2 = serializer.decode(str);
|
|
|
|
expect(note2, note);
|
|
});
|
|
|
|
test('Markdown Serializer with invalid YAML', () {
|
|
var inputNoteStr = """---
|
|
type
|
|
---
|
|
|
|
Alright.""";
|
|
|
|
var serializer = MarkdownYAMLCodec();
|
|
var note = serializer.decode(inputNoteStr);
|
|
var actualStr = "Alright.";
|
|
|
|
expect(actualStr, note.body);
|
|
});
|
|
|
|
test('Markdown Serializer with empty YAML', () {
|
|
var inputNoteStr = """---
|
|
---
|
|
|
|
Alright.""";
|
|
|
|
var serializer = MarkdownYAMLCodec();
|
|
var note = serializer.decode(inputNoteStr);
|
|
var actualStr = "Alright.";
|
|
|
|
expect(actualStr, note.body);
|
|
});
|
|
|
|
test('Markdown Serializer with empty YAML and no \\n after body', () {
|
|
var inputNoteStr = """---
|
|
---
|
|
Alright.""";
|
|
|
|
var serializer = MarkdownYAMLCodec();
|
|
var note = serializer.decode(inputNoteStr);
|
|
var actualStr = "Alright.";
|
|
|
|
expect(actualStr, note.body);
|
|
});
|
|
|
|
test('Markdown Serializer with empty YAML and doesn"t end with \\n', () {
|
|
var inputNoteStr = """---
|
|
---""";
|
|
|
|
var serializer = MarkdownYAMLCodec();
|
|
var note = serializer.decode(inputNoteStr);
|
|
|
|
expect("", note.body);
|
|
expect(0, note.props.length);
|
|
});
|
|
|
|
test('Markdown Serializer YAML Order', () {
|
|
var str = """---
|
|
type: Journal
|
|
created: 2017-02-15T22:41:19+01:00
|
|
foo: bar
|
|
---
|
|
|
|
Alright.""";
|
|
|
|
var serializer = MarkdownYAMLCodec();
|
|
var note = serializer.decode(str);
|
|
var actualStr = serializer.encode(note);
|
|
|
|
expect(actualStr, str);
|
|
});
|
|
|
|
test('Markdown Serializer YAML Lists', () {
|
|
var str = """---
|
|
foo: [bar, gar]
|
|
---
|
|
|
|
Alright.""";
|
|
|
|
var serializer = MarkdownYAMLCodec();
|
|
var note = serializer.decode(str);
|
|
var actualStr = serializer.encode(note);
|
|
|
|
expect(actualStr, str);
|
|
});
|
|
|
|
test('Note Starting with ---', () {
|
|
var str = """---
|
|
|
|
Alright.""";
|
|
|
|
var serializer = MarkdownYAMLCodec();
|
|
var note = serializer.decode(str);
|
|
var actualStr = serializer.encode(note);
|
|
|
|
expect(actualStr, str);
|
|
});
|
|
|
|
test('Plain Markdown', () {
|
|
var str = """Alright.""";
|
|
|
|
var serializer = MarkdownYAMLCodec();
|
|
var note = serializer.decode(str);
|
|
var actualStr = serializer.encode(note);
|
|
|
|
expect(actualStr, str);
|
|
});
|
|
|
|
test('Markdown with --- in body', () {
|
|
var str = """---
|
|
foo: [bar, gar]
|
|
---
|
|
|
|
Alright. ---\n Good boy --- Howdy""";
|
|
|
|
var serializer = MarkdownYAMLCodec();
|
|
var note = serializer.decode(str);
|
|
var actualStr = serializer.encode(note);
|
|
|
|
expect(actualStr, str);
|
|
});
|
|
|
|
test('Markdown without \\n after yaml header', () {
|
|
var str = """---
|
|
foo: [bar, gar]
|
|
---
|
|
Alright.""";
|
|
|
|
var serializer = MarkdownYAMLCodec();
|
|
var note = serializer.decode(str);
|
|
var actualStr = "Alright.";
|
|
|
|
expect(actualStr, note.body);
|
|
});
|
|
|
|
test('Only YAML Header without \\n at end', () {
|
|
var str = """---
|
|
foo: bar
|
|
---""";
|
|
|
|
var serializer = MarkdownYAMLCodec();
|
|
var note = serializer.decode(str);
|
|
|
|
expect("", note.body);
|
|
expect({"foo": "bar"}, note.props);
|
|
|
|
var actualStr = serializer.encode(note);
|
|
expect(actualStr, str + '\n\n');
|
|
});
|
|
|
|
test('Only YAML Header with \\n at end', () {
|
|
var str = """---
|
|
foo: bar
|
|
---
|
|
""";
|
|
|
|
var serializer = MarkdownYAMLCodec();
|
|
var note = serializer.decode(str);
|
|
|
|
expect("", note.body);
|
|
expect({"foo": "bar"}, note.props);
|
|
|
|
var actualStr = serializer.encode(note);
|
|
expect(actualStr, str + '\n');
|
|
});
|
|
});
|
|
}
|