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

# Test FFI compilation.

type: newworld
worlds:
  - entry: main.dart
    sources:
      main.dart: |
        import 'lib.dart';

        main() {
          Coordinate coordinate = new Coordinate.allocate(42.0, 42.0, null);
          print(coordinate.x);
          print(coordinate.y);
          print(coordinate.next);
        }
      lib.dart: |
        import 'dart:ffi';

        class Coordinate extends Struct {
          @Double()
          double x;

          @Double()
          double y;

          Pointer<Coordinate> next;

          factory Coordinate.allocate(double x, double y, Pointer<Coordinate> next) {
            return null;
          }
        }
    expectedLibraryCount: 2
  - entry: main.dart
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - main.dart
    sources:
      main.dart: |
        import 'lib.dart';

        main() {
          Coordinate coordinate = new Coordinate.allocate(42.0, 42.0, null);
          print(coordinate.x);
          print(coordinate.y);
          print(coordinate.next);
          done();
        }

        done() {
          print("Done!");
        }
    expectedLibraryCount: 2
