#400. The call member tests added
diff --git a/LanguageFeatures/Extension-methods/call_member_t01.dart b/LanguageFeatures/Extension-methods/call_member_t01.dart
new file mode 100644
index 0000000..7033477
--- /dev/null
+++ b/LanguageFeatures/Extension-methods/call_member_t01.dart
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2019, 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.
+ */
+/**
+ * @assertion Any expression of the form e1(args) or e1<types>(args) where e1
+ * does not denote a method, and where the static type of e1 is not a function
+ * type, an interface type declaring a call method, or dynamic, will currently
+ * be a compile-time error. If the static type of e1 is an interface type
+ * declaring a call getter, then this stays a compile-time error. Otherwise we
+ * check for extensions applying to the static type of e1 and declaring a call
+ * member. If one such most specific extension exists, and it declares a call
+ * extension method, then the expression is equivalent to e1.call(args) or
+ * e1.call<typeS>(args). Otherwise it is still a compile-time error.
+ *
+ * @description Check that extension with the 'call' method is applicable, then
+ * it is called
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=extension-methods
+import "../../Utils/expect.dart";
+
+extension Tricky on int {
+  Iterable<int> call(int to) =>
+    Iterable<int>.generate(to - this + 1, (i) => i + this);
+}
+
+main() {
+  Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 1(10));
+  Expect.listEquals([2, 3, 4, 5], 2(5));
+}
diff --git a/LanguageFeatures/Extension-methods/call_member_t02.dart b/LanguageFeatures/Extension-methods/call_member_t02.dart
new file mode 100644
index 0000000..aa491e9
--- /dev/null
+++ b/LanguageFeatures/Extension-methods/call_member_t02.dart
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2019, 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.
+ */
+/**
+ * @assertion Any expression of the form e1(args) or e1<types>(args) where e1
+ * does not denote a method, and where the static type of e1 is not a function
+ * type, an interface type declaring a call method, or dynamic, will currently
+ * be a compile-time error. If the static type of e1 is an interface type
+ * declaring a call getter, then this stays a compile-time error. Otherwise we
+ * check for extensions applying to the static type of e1 and declaring a call
+ * member. If one such most specific extension exists, and it declares a call
+ * extension method, then the expression is equivalent to e1.call(args) or
+ * e1.call<typeS>(args). Otherwise it is still a compile-time error.
+ *
+ * @description Check that the most specific extension with the 'call' method is
+ * taken
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=extension-methods
+import "../../Utils/expect.dart";
+
+extension on int {
+  String call(num v) => "My name is int($v)";
+}
+
+extension on num {
+  String call(num v) => "My name is num($v)";
+}
+
+main() {
+  Expect.equals("My name is int(10)", 1(10));
+  Expect.equals("My name is int(10.0)", 1(10.0));
+  Expect.equals("My name is num(10)", 1.0(10));
+  Expect.equals("My name is num(10.0)", 1.0(10.0));
+}
diff --git a/LanguageFeatures/Extension-methods/call_member_t03.dart b/LanguageFeatures/Extension-methods/call_member_t03.dart
new file mode 100644
index 0000000..9191ff1
--- /dev/null
+++ b/LanguageFeatures/Extension-methods/call_member_t03.dart
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2019, 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.
+ */
+/**
+ * @assertion Any expression of the form e1(args) or e1<types>(args) where e1
+ * does not denote a method, and where the static type of e1 is not a function
+ * type, an interface type declaring a call method, or dynamic, will currently
+ * be a compile-time error. If the static type of e1 is an interface type
+ * declaring a call getter, then this stays a compile-time error. Otherwise we
+ * check for extensions applying to the static type of e1 and declaring a call
+ * member. If one such most specific extension exists, and it declares a call
+ * extension method, then the expression is equivalent to e1.call(args) or
+ * e1.call<typeS>(args). Otherwise it is still a compile-time error.
+ *
+ * @description Check that it is a compile error if there is no most specific
+ * extension with the 'call' method
+ * @compile-error
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=extension-methods
+
+extension on int {
+  String call(num v) => "My name is int($v)";
+}
+
+extension on num {
+  String call(int v) => "My name is num($v)";
+}
+
+main() {
+  1.0(10.0);
+}
diff --git a/LanguageFeatures/Extension-methods/call_member_t04.dart b/LanguageFeatures/Extension-methods/call_member_t04.dart
new file mode 100644
index 0000000..4f76bfb
--- /dev/null
+++ b/LanguageFeatures/Extension-methods/call_member_t04.dart
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2019, 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.
+ */
+/**
+ * @assertion Any expression of the form e1(args) or e1<types>(args) where e1
+ * does not denote a method, and where the static type of e1 is not a function
+ * type, an interface type declaring a call method, or dynamic, will currently
+ * be a compile-time error. If the static type of e1 is an interface type
+ * declaring a call getter, then this stays a compile-time error. Otherwise we
+ * check for extensions applying to the static type of e1 and declaring a call
+ * member. If one such most specific extension exists, and it declares a call
+ * extension method, then the expression is equivalent to e1.call(args) or
+ * e1.call<typeS>(args). Otherwise it is still a compile-time error.
+ *
+ * @description Check that it is a compile error if there is e1 is an interface
+ * with 'call' getter
+ * @compile-error
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=extension-methods
+
+class A {
+  String get call => "My name is A";
+}
+
+extension on int {
+  String get call => "My name is int";
+}
+
+extension on num {
+  String get call => "My name is num";
+}
+
+
+main() {
+  1(10);          //# 01: compile-time error
+  1("10");        //# 02: compile-time error
+  1.0(10);        //# 03: compile-time error
+  1.0("10");      //# 04: compile-time error
+  A(2);           //# 05: compile-time error
+  A(2, "3");      //# 06: compile-time error
+}
diff --git a/LanguageFeatures/Extension-methods/call_member_t05.dart b/LanguageFeatures/Extension-methods/call_member_t05.dart
new file mode 100644
index 0000000..040ec67
--- /dev/null
+++ b/LanguageFeatures/Extension-methods/call_member_t05.dart
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2019, 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.
+ */
+/**
+ * @assertion Any expression of the form e1(args) or e1<types>(args) where e1
+ * does not denote a method, and where the static type of e1 is not a function
+ * type, an interface type declaring a call method, or dynamic, will currently
+ * be a compile-time error. If the static type of e1 is an interface type
+ * declaring a call getter, then this stays a compile-time error. Otherwise we
+ * check for extensions applying to the static type of e1 and declaring a call
+ * member. If one such most specific extension exists, and it declares a call
+ * extension method, then the expression is equivalent to e1.call(args) or
+ * e1.call<typeS>(args). Otherwise it is still a compile-time error.
+ *
+ * @description Check that extension with the 'call' method is applicable, then
+ * it is called. Test type arguments
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=extension-methods
+import "../../Utils/expect.dart";
+
+class C<T extends num> {
+  T value;
+}
+
+extension IntExtWithCall<T extends num> on C<T> {
+  Iterable<T> call(int to) =>
+    Iterable<T>.generate(to - this.value + 1, (i) => i + this.value);
+}
+
+main() {
+  C<int> c = new C<int>();
+  c.value = 1;
+  Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], c(10));
+  c.value = 2;
+  Expect.listEquals([2, 3, 4, 5], c(5));
+}
diff --git a/LanguageFeatures/Extension-methods/call_member_t06.dart b/LanguageFeatures/Extension-methods/call_member_t06.dart
new file mode 100644
index 0000000..fc1dbcd
--- /dev/null
+++ b/LanguageFeatures/Extension-methods/call_member_t06.dart
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2019, 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.
+ */
+/**
+ * @assertion Any expression of the form e1(args) or e1<types>(args) where e1
+ * does not denote a method, and where the static type of e1 is not a function
+ * type, an interface type declaring a call method, or dynamic, will currently
+ * be a compile-time error. If the static type of e1 is an interface type
+ * declaring a call getter, then this stays a compile-time error. Otherwise we
+ * check for extensions applying to the static type of e1 and declaring a call
+ * member. If one such most specific extension exists, and it declares a call
+ * extension method, then the expression is equivalent to e1.call(args) or
+ * e1.call<typeS>(args). Otherwise it is still a compile-time error.
+ *
+ * @description Check that extension with the 'call' method is applicable, then
+ * it is called. Test type arguments
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=extension-methods
+import "../../Utils/expect.dart";
+
+class C<T extends num> {
+}
+
+extension IntExtWithCall<T extends num> on C<T> {
+  String call(int v, String m) => "Result: $m $v";
+}
+
+main() {
+  C<int> c = new C<int>();
+  Expect.equals("Result: XxX 42", c(42, "XxX"));
+}
diff --git a/LanguageFeatures/Extension-methods/call_member_t07.dart b/LanguageFeatures/Extension-methods/call_member_t07.dart
new file mode 100644
index 0000000..1d49b8d
--- /dev/null
+++ b/LanguageFeatures/Extension-methods/call_member_t07.dart
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2019, 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.
+ */
+/**
+ * @assertion We do not allow implicit tear-off of an extension call method in a
+ * function typed context.
+ *
+ * @description Check that implicit tear-off of an extension call method in a
+ * function typed context is a compile-time error
+ * @author sgrekhov@unipro.ru
+ */
+// SharedOptions=--enable-experiment=extension-methods
+
+extension on int {
+  String call(int v) => "Result: $v";
+}
+
+String Function(int) from1 = 1;     //# 01: compile-time error
+
+main() {
+  String Function(int) from2 = 2;   //# 02: compile-time error
+}