Reland "[infra] Add failing test to test CI systems and approvals workflow"

This reverts commit 25def20f5d.

Reason for revert: Retrying, now that we are copying CQ approvals for all commits in the blamelist of a builder.

Original change's description:
> Revert "[infra] Add failing test to test CI systems and approvals workflow"
> 
> This reverts commit e578eeb235.
> 
> Reason for revert: The reverted commit is a test of the new approvals UI for tryjobs and the CI. It includes an intentionally failing test, that we now remove again.
> 
> Original change's description:
> > [infra] Add failing test to test CI systems and approvals workflow
> > 
> > The failing test lib_2/collection/failing_list_test.dart is added,
> > which imports dart:io.  So it will be a compile-time failure on
> > some dart2js platforms, and a run-time failure on dart:io.
> > 
> > This commit is just to test the UI and backend for test failure
> > approvals on tryjobs and on CI results. It will be reverted after
> > the CI builders have run on it.
> > 
> > Change-Id: Icc3d11e72511cb0dbd9a62cb4fa80e754c203c8c
> > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127883
> > Reviewed-by: Jonas Termansen <sortie@google.com>
> 
> TBR=whesse@google.com,sortie@google.com
> 
> Change-Id: I32b900e25dc562ac88f5cb496cdbca726fc70445
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127885
> Reviewed-by: William Hesse <whesse@google.com>

TBR=whesse@google.com,sortie@google.com

Change-Id: I64e528131c779c8d20c007ff715b57b599cd3f07
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127886
Reviewed-by: William Hesse <whesse@google.com>
Reviewed-by: Jonas Termansen <sortie@google.com>
This commit is contained in:
William Hesse 2019-12-11 08:43:52 +00:00
parent d9fa37e85d
commit c716068538
2 changed files with 160 additions and 0 deletions

View file

@ -0,0 +1,157 @@
// Copyright (c) 2013, 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:collection';
import 'dart:io';
import "package:expect/expect.dart";
class MyList<E> extends ListBase<E> {
List<E> _list;
MyList(List<E> this._list);
int get length => _list.length;
void set length(int x) {
_list.length = x;
}
E operator [](int idx) => _list[idx];
void operator []=(int idx, E value) {
_list[idx] = value;
}
}
class MyNoSuchMethodList<E> extends Object
with ListMixin<E>
implements List<E> {
List<E> _list;
MyNoSuchMethodList(List<E> this._list);
noSuchMethod(Invocation invocation) {
if (invocation.memberName == #length && invocation.isGetter) {
return _list.length;
}
if (invocation.memberName == const Symbol("length=") &&
invocation.isSetter) {
_list.length = invocation.positionalArguments.first;
return null;
}
if (invocation.memberName == const Symbol("[]") &&
invocation.positionalArguments.length == 1) {
return _list[invocation.positionalArguments.first];
}
if (invocation.memberName == const Symbol("[]=") &&
invocation.positionalArguments.length == 2) {
_list[invocation.positionalArguments.first] =
invocation.positionalArguments[1];
return null;
}
return super.noSuchMethod(invocation);
}
}
// Class that behaves like a list but does not implement List.
class MyIndexableNoSuchMethod<E> {
List<E> _list;
MyIndexableNoSuchMethod(List<E> this._list);
noSuchMethod(Invocation invocation) {
if (invocation.memberName == #length && invocation.isGetter) {
return _list.length;
}
if (invocation.memberName == const Symbol("length=") &&
invocation.isSetter) {
_list.length = invocation.positionalArguments.first;
return null;
}
if (invocation.memberName == const Symbol("prototype")) {
return 42;
}
if (invocation.memberName == const Symbol("[]") &&
invocation.positionalArguments.length == 1) {
return _list[invocation.positionalArguments.first];
}
if (invocation.memberName == const Symbol("[]=") &&
invocation.positionalArguments.length == 2) {
_list[invocation.positionalArguments.first] =
invocation.positionalArguments[1];
return null;
}
return super.noSuchMethod(invocation);
}
}
void testRetainWhere() {
List<int> list = <int>[1, 2, 3];
list.retainWhere((x) => x % 2 == 0);
Expect.equals(true, false);
Expect.equals(1, list.length);
Expect.equals(2, list.first);
Expect.equals(2, list[0]);
list = new MyList<int>([1, 2, 3]);
list.retainWhere((x) => x % 2 == 0);
Expect.equals(1, list.length);
Expect.equals(2, list.first);
Expect.equals(2, list[0]);
list = new MyNoSuchMethodList<int>([1, 2, 3]);
list.retainWhere((x) => x % 2 == 0);
Expect.equals(1, list.length);
Expect.equals(2, list.first);
Expect.equals(2, list[0]);
// Equivalent tests where the type of the List is known statically.
{
var l = new MyList<int>([1, 2, 3]);
l.retainWhere((x) => x % 2 == 0);
Expect.equals(1, l.length);
Expect.equals(2, l.first);
Expect.equals(2, l[0]);
}
{
var l = new MyNoSuchMethodList<int>([1, 2, 3]);
l.retainWhere((x) => x % 2 == 0);
Expect.equals(1, l.length);
Expect.equals(2, l.first);
Expect.equals(2, l[0]);
}
// Equivalent tests where the type of the List is not known.
{
dynamic l = new MyList<int>([1, 2, 3]);
l.retainWhere((x) => x % 2 == 0);
Expect.equals(1, l.length);
Expect.equals(2, l.first);
Expect.equals(2, l[0]);
}
{
dynamic l = new MyNoSuchMethodList<int>([1, 2, 3]);
l.retainWhere((x) => x % 2 == 0);
Expect.equals(1, l.length);
Expect.equals(2, l.first);
Expect.equals(2, l[0]);
}
{
dynamic indexable = new MyIndexableNoSuchMethod<int>([1, 2, 3]);
Expect.equals(3, indexable.length);
Expect.equals(1, indexable[0]);
Expect.equals(3, indexable[2]);
indexable.length = 2;
Expect.equals(2, indexable.length);
Expect.equals(42, indexable.prototype);
}
}
void main() {
testRetainWhere();
}

View file

@ -30,6 +30,9 @@ html/xhr_test/xhr: Skip # Times out. Issue 21527
[ $csp ]
isolate/deferred_in_isolate2_test: Skip # Issue 16898. Deferred loading does not work from an isolate in CSP-mode
[ $compiler != dart2analyzer && !$csp ]
collection/failing_list_test: Skip # This test is only testing the approval UI. It will be reverted quickly.
[ $runtime == chrome && $system == linux ]
mirrors/native_class_test: Slow