blob: 61b7b44e4df00667905d7025e68c6726572016d0 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. 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:test/bootstrap/browser.dart';
import 'package:test/test.dart';
import 'package:ui/src/engine.dart';
import 'package:ui/ui.dart';
// Two RTL strings, 5 characters each, to match the length of "$rtl1" and "$rtl2".
const String rtl1 = 'واحدة';
const String rtl2 = 'ثنتان';
void main() {
internalBootstrapBrowserTest(() => testMain);
}
Future<void> testMain() async {
group('$getDirectionalBlockEnd', () {
test('basic cases', () {
const String text = 'Lorem 12 $rtl1 ipsum34';
const LineBreakResult start = LineBreakResult.sameIndex(0, LineBreakType.prohibited);
const LineBreakResult end = LineBreakResult.sameIndex(text.length, LineBreakType.endOfText);
const LineBreakResult loremMiddle = LineBreakResult.sameIndex(3, LineBreakType.prohibited);
const LineBreakResult loremEnd = LineBreakResult.sameIndex(5, LineBreakType.prohibited);
const LineBreakResult twelveStart = LineBreakResult(6, 6, 5, LineBreakType.opportunity);
const LineBreakResult twelveEnd = LineBreakResult.sameIndex(8, LineBreakType.prohibited);
const LineBreakResult rtl1Start = LineBreakResult(9, 9, 8, LineBreakType.opportunity);
const LineBreakResult rtl1End = LineBreakResult.sameIndex(14, LineBreakType.prohibited);
const LineBreakResult ipsumStart = LineBreakResult(17, 17, 15, LineBreakType.opportunity);
const LineBreakResult ipsumEnd = LineBreakResult.sameIndex(22, LineBreakType.prohibited);
DirectionalPosition blockEnd;
blockEnd = getDirectionalBlockEnd(text, start, end);
expect(blockEnd.isSpaceOnly, isFalse);
expect(blockEnd.textDirection, TextDirection.ltr);
expect(blockEnd.lineBreak, loremEnd);
blockEnd = getDirectionalBlockEnd(text, start, loremMiddle);
expect(blockEnd.isSpaceOnly, isFalse);
expect(blockEnd.textDirection, TextDirection.ltr);
expect(blockEnd.lineBreak, loremMiddle);
blockEnd = getDirectionalBlockEnd(text, loremMiddle, loremEnd);
expect(blockEnd.isSpaceOnly, isFalse);
expect(blockEnd.textDirection, TextDirection.ltr);
expect(blockEnd.lineBreak, loremEnd);
blockEnd = getDirectionalBlockEnd(text, loremEnd, twelveStart);
expect(blockEnd.isSpaceOnly, isTrue);
expect(blockEnd.textDirection, isNull);
expect(blockEnd.lineBreak, twelveStart);
blockEnd = getDirectionalBlockEnd(text, twelveStart, rtl1Start);
expect(blockEnd.isSpaceOnly, isFalse);
expect(blockEnd.textDirection, isNull);
expect(blockEnd.lineBreak, twelveEnd);
blockEnd = getDirectionalBlockEnd(text, rtl1Start, end);
expect(blockEnd.isSpaceOnly, isFalse);
expect(blockEnd.textDirection, TextDirection.rtl);
expect(blockEnd.lineBreak, rtl1End);
blockEnd = getDirectionalBlockEnd(text, ipsumStart, end);
expect(blockEnd.isSpaceOnly, isFalse);
expect(blockEnd.textDirection, TextDirection.ltr);
expect(blockEnd.lineBreak, ipsumEnd);
blockEnd = getDirectionalBlockEnd(text, ipsumEnd, end);
expect(blockEnd.isSpaceOnly, isFalse);
expect(blockEnd.textDirection, isNull);
expect(blockEnd.lineBreak, end);
});
test('handles new lines', () {
const String text = 'Lorem\n12\nipsum \n';
const LineBreakResult start = LineBreakResult.sameIndex(0, LineBreakType.prohibited);
const LineBreakResult end = LineBreakResult(
text.length,
text.length - 1,
text.length - 3,
LineBreakType.mandatory,
);
const LineBreakResult loremEnd = LineBreakResult.sameIndex(5, LineBreakType.prohibited);
const LineBreakResult twelveStart = LineBreakResult(6, 5, 5, LineBreakType.mandatory);
const LineBreakResult twelveEnd = LineBreakResult.sameIndex(8, LineBreakType.prohibited);
const LineBreakResult ipsumStart = LineBreakResult(9, 8, 8, LineBreakType.mandatory);
const LineBreakResult ipsumEnd = LineBreakResult.sameIndex(14, LineBreakType.prohibited);
DirectionalPosition blockEnd;
blockEnd = getDirectionalBlockEnd(text, start, twelveStart);
expect(blockEnd.isSpaceOnly, isFalse);
expect(blockEnd.textDirection, TextDirection.ltr);
expect(blockEnd.lineBreak, twelveStart);
blockEnd = getDirectionalBlockEnd(text, loremEnd, twelveStart);
expect(blockEnd.isSpaceOnly, isTrue);
expect(blockEnd.textDirection, isNull);
expect(blockEnd.lineBreak, twelveStart);
blockEnd = getDirectionalBlockEnd(text, twelveStart, ipsumStart);
expect(blockEnd.isSpaceOnly, isFalse);
expect(blockEnd.textDirection, isNull);
expect(blockEnd.lineBreak, ipsumStart);
blockEnd = getDirectionalBlockEnd(text, twelveEnd, ipsumStart);
expect(blockEnd.isSpaceOnly, isTrue);
expect(blockEnd.textDirection, isNull);
expect(blockEnd.lineBreak, ipsumStart);
blockEnd = getDirectionalBlockEnd(text, ipsumStart, end);
expect(blockEnd.isSpaceOnly, isFalse);
expect(blockEnd.textDirection, TextDirection.ltr);
expect(blockEnd.lineBreak, ipsumEnd);
blockEnd = getDirectionalBlockEnd(text, ipsumEnd, end);
expect(blockEnd.isSpaceOnly, isTrue);
expect(blockEnd.textDirection, isNull);
expect(blockEnd.lineBreak, end);
});
});
}