dartlangeditorflutterflutter-appsflutter-examplesflutter-packageflutter-widgetquillquill-deltaquilljsreactquillrich-textrich-text-editorwysiwygwysiwyg-editor
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
5.0 KiB
137 lines
5.0 KiB
import 'package:flutter_quill/flutter_quill.dart'; |
|
import 'package:flutter_quill/quill_delta.dart'; |
|
import 'package:test/test.dart'; |
|
|
|
void main() { |
|
group('collectStyle', () { |
|
/// Lists and alignments have the same block attribute key but can have different values. |
|
/// Changing the format value updates the document but must also update the toolbar button state |
|
/// by ensuring the collectStyles method returns the attribute selected for the newly entered line. |
|
test('Change block value type', () { |
|
void doTest(Map<String, dynamic> start, Attribute attr) { |
|
/// Create a document with 2 lines of block attribute using [start] |
|
/// Change the format of the last line using [attr] and verify [change] |
|
final delta = Delta() |
|
..insert('A') |
|
..insert('\n', start) |
|
..insert('B', {'bold': true}) |
|
..insert('\n', start); |
|
final document = Document.fromDelta(delta) |
|
|
|
/// insert a newline |
|
..insert(3, '\n'); |
|
|
|
/// Verify inserted blank line and block type has not changed |
|
expect( |
|
document.toDelta(), |
|
Delta() |
|
..insert('A') |
|
..insert('\n', start) |
|
..insert('B', {'bold': true}) |
|
..insert('\n\n', start)); |
|
|
|
/// Change format of last (empty) line |
|
document.format(4, 0, attr); |
|
expect( |
|
document.toDelta(), |
|
Delta() |
|
..insert('A') |
|
..insert('\n', start) |
|
..insert('B', {'bold': true}) |
|
..insert('\n', start) |
|
..insert('\n', {attr.key: attr.value}), |
|
reason: 'document updated'); |
|
|
|
/// Verify that the reported style reflects the newly formatted state |
|
expect(document.collectStyle(4, 0), |
|
Style.attr({'bold': Attribute.bold, attr.key: attr}), |
|
reason: 'collectStyle reporting correct attribute'); |
|
} |
|
|
|
doTest({'list': 'ordered'}, const ListAttribute('bullet')); |
|
doTest({'list': 'checked'}, const ListAttribute('bullet')); |
|
doTest({}, const ListAttribute('bullet')); |
|
doTest({'align': 'center'}, const AlignAttribute('right')); |
|
doTest({'align': 'left'}, const AlignAttribute('center')); |
|
doTest({}, const AlignAttribute('center')); |
|
}); |
|
|
|
/// Enter key inserts newline as plain text without inline styles. |
|
/// collectStyle needs to retrieve style of preceding line |
|
test('Simulate double enter key at end', () { |
|
final delta = Delta() |
|
..insert('data\n') |
|
..insert('second\n', <String, dynamic>{'bold': true}) |
|
..insert('\n\nplain\n'); |
|
final document = Document.fromDelta(delta); |
|
// |
|
expect(document.getPlainText(0, document.length), |
|
'data\nsecond\n\n\nplain\n'); |
|
expect(document.length, 20); |
|
// |
|
expect('data\n', document.getPlainText(0, 5)); |
|
for (var index = 0; index < 5; index++) { |
|
expect(const Style(), document.collectStyle(index, 0)); |
|
} |
|
// |
|
expect('second\n', document.getPlainText(5, 7)); |
|
for (var index = 5; index < 12; index++) { |
|
expect(const Style.attr({'bold': Attribute.bold}), |
|
document.collectStyle(index, 0)); |
|
} |
|
// |
|
expect('\n\n', document.getPlainText(12, 2)); |
|
for (var index = 12; index < 14; index++) { |
|
expect(const Style.attr({'bold': Attribute.bold}), |
|
document.collectStyle(index, 0)); |
|
} |
|
// |
|
for (var index = 14; index < document.length; index++) { |
|
expect(const Style(), document.collectStyle(index, 0)); |
|
} |
|
}); |
|
|
|
test('No selection', () { |
|
final delta = Delta() |
|
..insert('plain\n') |
|
..insert('bold\n', <String, dynamic>{'bold': true}) |
|
..insert('italic\n', <String, dynamic>{'italic': true}); |
|
final document = Document.fromDelta(delta); |
|
// |
|
expect( |
|
document.getPlainText(0, document.length), 'plain\nbold\nitalic\n'); |
|
expect(document.length, 18); |
|
// |
|
for (var index = 0; index < 6; index++) { |
|
expect(const Style(), document.collectStyle(index, 0)); |
|
} |
|
// |
|
for (var index = 6; index < 11; index++) { |
|
expect(const Style.attr({'bold': Attribute.bold}), |
|
document.collectStyle(index, 0)); |
|
} |
|
// |
|
for (var index = 11; index < document.length; index++) { |
|
expect(const Style.attr({'italic': Attribute.italic}), |
|
document.collectStyle(index, 0)); |
|
} |
|
}); |
|
|
|
test('Selection', () { |
|
final delta = Delta() |
|
..insert('data\n') |
|
..insert('second\n', <String, dynamic>{'bold': true}); |
|
final document = Document.fromDelta(delta); |
|
// |
|
expect(const Style(), document.collectStyle(0, 4)); |
|
expect(const Style(), document.collectStyle(1, 3)); |
|
// |
|
expect(const Style.attr({'bold': Attribute.bold}), |
|
document.collectStyle(5, 3)); |
|
expect(const Style.attr({'bold': Attribute.bold}), |
|
document.collectStyle(8, 3)); |
|
// |
|
expect(const Style(), document.collectStyle(3, 3)); |
|
}); |
|
}); |
|
}
|
|
|