# 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
    experiments: alternative-invalidation-strategy
    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;
        }
    expectedLibraryCount: 2
  - entry: main.dart
    experiments: alternative-invalidation-strategy
    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
    expectsRebuildBodiesOnly: true
