# 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.md file.

# Compile an application, change a file, but don't change the outline.
# Force the creating of a no such method forwarding stub.

type: newworld
worlds:
  - entry: main.dart
    sources:
      main.dart: |
        import "lib1.dart";
        class Foo1 extends Bar {
          noSuchMethod(Invocation msg) {
            print("noSouchMethod!");
          }
        }
        class Foo2 implements Bar {
          noSuchMethod(Invocation msg) {
            print("noSouchMethod!");
          }
        }
      lib1.dart: |
        abstract class Bar {
          void method();
          bool get getter;
          void set setter(bool b);
          bool field = true;
        }
    expectedLibraryCount: 2
  - entry: main.dart
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - main.dart
    sources:
      main.dart: |
        import "lib1.dart";
        class Foo1 extends Bar {
          noSuchMethod(Invocation msg) {
            print("noSouchMethod!!");
          }
        }
        class Foo2 implements Bar {
          noSuchMethod(Invocation msg) {
            print("noSouchMethod!!");
          }
        }
    expectedLibraryCount: 2
    advancedInvalidation: bodiesOnly
