b464fc9037
This reverts commitcd2c566bcf. Reason for revert: Updating to not remove field used by Flutter engine. Original change's description: > Revert "Tweak `expect.dart` library." > > This reverts commitff5f391c0a. > > Reason for revert: The expect library is used by Flutter engine, and some of its tests use assertStatementsEnabled. There should be a migration path that doesn't require an atomic change, like adding the replacement api before removing the old one. > > Original change's description: > > Tweak `expect.dart` library. > > > > Make API more consistent for a few methods. > > Reduce the number of language features used in tests: > > * Never iterating an iterable, always converting it > > using `.toList()` first and iterating using indices > > (fx `setEquals`). > > Also require a `List` in places where an `Iterable` > > wasn't necessary. > > * Avoid doing complicated computations that are also > > used for the error message. Do simple check first, > > then recompute to get better error messages > > (fx `allDistinct`). > > > > Renamed some rarely used members for consistency > > (`stringContainsInOrder`->`containsInOrder`, > > where other string-contains functions just start > > with `contains`, and `containsOneOf` -> `containsAny` > > to match `Iterable.any` phrasing, and also it accepts > > if containing at least one, not precisely one.) > > > > Removed a function that wasn't used anywhere. > > > > Moved `assertStatementsEnabled` to `variations.dart` as `asserts`. > > Removed `typeAssertionsEnabled` and `checkedModeEnabled`. The former used in one place, where it was replaced with `checkedImplicitDowncasts` from `variations.dart`, the latter wasn't used anywhere. > > > > Deprecates `package:expect/minitest.dart`. It was never intended > > to be used for new tests, only as a help to convert existing tests > > written against `package:unit_test`. > > All existing imports marked as `// ignore: deprecated_member_use`. > > > > Change-Id: I07e21d4c0f3ccf11b82ee34af2668fdbb22264d2 > > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/352360 > > Reviewed-by: Slava Egorov <vegorov@google.com> > > Reviewed-by: Ömer Ağacan <omersa@google.com> > > Reviewed-by: Nate Bosch <nbosch@google.com> > > Reviewed-by: Stephen Adams <sra@google.com> > > Commit-Queue: Lasse Nielsen <lrn@google.com> > > Change-Id: I360b4347470a0bb2b63c3108e2b83ee2a771bf3f > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/362020 > Reviewed-by: Nate Bosch <nbosch@google.com> > Reviewed-by: Ömer Ağacan <omersa@google.com> > Reviewed-by: Stephen Adams <sra@google.com> > Reviewed-by: Leaf Petersen <leafp@google.com> > Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> > Commit-Queue: William Hesse <whesse@google.com> CoreLibraryReviewExempt: Reland Change-Id: I53db40edc0733842a008839c3913d51c885e39ab Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/362502 Reviewed-by: Alexander Thomas <athom@google.com> Reviewed-by: Nate Bosch <nbosch@google.com> Reviewed-by: Ömer Ağacan <omersa@google.com> Reviewed-by: Slava Egorov <vegorov@google.com> Reviewed-by: William Hesse <whesse@google.com> Commit-Queue: Lasse Nielsen <lrn@google.com>
268 lines
8.0 KiB
Dart
268 lines
8.0 KiB
Dart
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file
|
|
|
|
import 'dart:html';
|
|
|
|
import 'package:expect/minitest.dart'; // ignore: deprecated_member_use_from_same_package
|
|
|
|
import 'utils.dart';
|
|
|
|
main() {
|
|
var isSpanElement = predicate((x) => x is SpanElement, 'is a SpanElement');
|
|
var isDivElement = predicate((x) => x is DivElement, 'is a DivElement');
|
|
var isText = predicate((x) => x is Text, 'is a Text');
|
|
|
|
void expectNoSuchMethod(void fn()) => expect(fn, throwsNoSuchMethodError);
|
|
|
|
group('append', () {
|
|
test('htmlelement', () {
|
|
var el = new DivElement();
|
|
el.append(new SpanElement());
|
|
expect(el.children.length, equals(1));
|
|
var span = el.children[0];
|
|
expect(span, isSpanElement);
|
|
|
|
el.append(new DivElement());
|
|
expect(el.children.length, equals(2));
|
|
// Validate that the first item is still first.
|
|
expect(el.children[0], equals(span));
|
|
expect(el.children[1], isDivElement);
|
|
});
|
|
|
|
test('documentFragment', () {
|
|
var fragment = new DocumentFragment();
|
|
fragment.append(new SpanElement());
|
|
expect(fragment.children.length, equals(1));
|
|
expect(fragment.children[0], isSpanElement);
|
|
});
|
|
});
|
|
|
|
group('appendHtml', () {
|
|
test('htmlelement', () {
|
|
var el = new DivElement();
|
|
el.appendHtml('<span></span>');
|
|
expect(el.children.length, equals(1));
|
|
var span = el.children[0];
|
|
expect(span, isSpanElement);
|
|
|
|
el.appendHtml('<div></div>');
|
|
expect(el.children.length, equals(2));
|
|
// Validate that the first item is still first.
|
|
expect(el.children[0], equals(span));
|
|
expect(el.children[1], isDivElement);
|
|
});
|
|
|
|
test('documentFragment', () {
|
|
var fragment = new DocumentFragment();
|
|
fragment.appendHtml('<span>something</span>');
|
|
expect(fragment.children.length, equals(1));
|
|
expect(fragment.children[0], isSpanElement);
|
|
});
|
|
|
|
test('html interpreted in correct context', () {
|
|
// appendHtml, in order to sanitize, needs to create a document fragment,
|
|
// but it needs to be created in the right context. If we try to append
|
|
// table components then the document fragment needs the table context
|
|
// or it will fail to create them.
|
|
var el = new TableElement();
|
|
el.appendHtml('<tr><td>foo</td></tr>');
|
|
expect(el.children.length, 1);
|
|
var section = el.children.first;
|
|
expect(section is TableSectionElement, isTrue);
|
|
var row = section.children.first;
|
|
expect(row is TableRowElement, isTrue);
|
|
var item = row.children.first;
|
|
expect(item is TableCellElement, isTrue);
|
|
expect(item.innerHtml, 'foo');
|
|
});
|
|
|
|
test("use body context for elements that are don't support it", () {
|
|
// Some elements can't be used as context for createContextualFragment,
|
|
// often because it doesn't make any sense. So adding children to a
|
|
// <br> has no real effect on the page, but we can do it. But the
|
|
// document fragment will have to be created in the body context. Verify
|
|
// that this doesn't throw and that the children show up.
|
|
var el = new BRElement();
|
|
el.appendHtml("<p>Stuff</p>");
|
|
expect(el.children.length, 1);
|
|
expect(el.children[0].outerHtml, "<p>Stuff</p>");
|
|
});
|
|
});
|
|
|
|
group('appendText', () {
|
|
test('htmlelement', () {
|
|
var el = new DivElement();
|
|
el.appendText('foo');
|
|
// No children were created.
|
|
expect(el.children.length, equals(0));
|
|
// One text node was added.
|
|
expect(el.nodes.length, equals(1));
|
|
});
|
|
|
|
test('htmlelement', () {
|
|
var el = new DivElement();
|
|
var twoNewLines = "\n\n";
|
|
el.appendText(twoNewLines);
|
|
// No children were created.
|
|
expect(el.children.length, equals(0));
|
|
// One text node was added.
|
|
expect(el.nodes.length, equals(1));
|
|
expect(el.nodes[0], isText);
|
|
expect(el.nodes[0].text, equals(twoNewLines));
|
|
expect(el.text, equals(twoNewLines));
|
|
});
|
|
|
|
test('documentFragment', () {
|
|
var fragment = new DocumentFragment();
|
|
fragment.appendText('foo');
|
|
// No children were created.
|
|
expect(fragment.children.length, equals(0));
|
|
// One text node was added.
|
|
expect(fragment.nodes.length, equals(1));
|
|
});
|
|
});
|
|
|
|
group('insertAdjacentElement', () {
|
|
test('beforebegin', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
var newChild = new SpanElement();
|
|
parent.children.add(child);
|
|
|
|
child.insertAdjacentElement('beforebegin', newChild);
|
|
|
|
expect(parent.children.length, 2);
|
|
expect(parent.children[0], isSpanElement);
|
|
});
|
|
|
|
test('afterend', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
var newChild = new SpanElement();
|
|
parent.children.add(child);
|
|
|
|
child.insertAdjacentElement('afterend', newChild);
|
|
|
|
expect(parent.children.length, 2);
|
|
expect(parent.children[1], isSpanElement);
|
|
});
|
|
|
|
test('afterbegin', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
var newChild = new SpanElement();
|
|
parent.children.add(child);
|
|
|
|
parent.insertAdjacentElement('afterbegin', newChild);
|
|
|
|
expect(parent.children.length, 2);
|
|
expect(parent.children[0], isSpanElement);
|
|
});
|
|
|
|
test('beforeend', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
var newChild = new SpanElement();
|
|
parent.children.add(child);
|
|
|
|
parent.insertAdjacentElement('beforeend', newChild);
|
|
|
|
expect(parent.children.length, 2);
|
|
expect(parent.children[1], isSpanElement);
|
|
});
|
|
});
|
|
|
|
group('insertAdjacentHtml', () {
|
|
test('beforebegin', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
parent.children.add(child);
|
|
|
|
child.insertAdjacentHtml('beforebegin', '<span></span>');
|
|
|
|
expect(parent.children.length, 2);
|
|
expect(parent.children[0], isSpanElement);
|
|
});
|
|
|
|
test('afterend', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
parent.children.add(child);
|
|
|
|
child.insertAdjacentHtml('afterend', '<span></span>');
|
|
|
|
expect(parent.children.length, 2);
|
|
expect(parent.children[1], isSpanElement);
|
|
});
|
|
|
|
test('afterbegin', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
parent.children.add(child);
|
|
|
|
parent.insertAdjacentHtml('afterbegin', '<span></span>');
|
|
|
|
expect(parent.children.length, 2);
|
|
expect(parent.children[0], isSpanElement);
|
|
});
|
|
|
|
test('beforeend', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
parent.children.add(child);
|
|
|
|
parent.insertAdjacentHtml('beforeend', '<span></span>');
|
|
|
|
expect(parent.children.length, 2);
|
|
expect(parent.children[1], isSpanElement);
|
|
});
|
|
});
|
|
|
|
group('insertAdjacentText', () {
|
|
test('beforebegin', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
parent.children.add(child);
|
|
|
|
child.insertAdjacentText('beforebegin', 'test');
|
|
|
|
expect(parent.nodes.length, 2);
|
|
expect(parent.nodes[0], isText);
|
|
});
|
|
|
|
test('afterend', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
parent.children.add(child);
|
|
|
|
child.insertAdjacentText('afterend', 'test');
|
|
|
|
expect(parent.nodes.length, 2);
|
|
expect(parent.nodes[1], isText);
|
|
});
|
|
|
|
test('afterbegin', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
parent.children.add(child);
|
|
|
|
parent.insertAdjacentText('afterbegin', 'test');
|
|
|
|
expect(parent.nodes.length, 2);
|
|
expect(parent.nodes[0], isText);
|
|
});
|
|
|
|
test('beforeend', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
parent.children.add(child);
|
|
|
|
parent.insertAdjacentText('beforeend', 'test');
|
|
|
|
expect(parent.nodes.length, 2);
|
|
expect(parent.nodes[1], isText);
|
|
});
|
|
});
|
|
}
|