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

import 'utils.dart';

// ignore_for_file: DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE

/// Test that library flags (external, synthetic)
/// are serialized and read correctly.
main() {
  Library lib = new Library(Uri.parse("foo://bar.dart"));
  lib.isExternal = false;
  lib.isSynthetic = false;
  Library lib2 = libRoundTrip(lib);
  if (lib2.isExternal != false)
    throw "Serialized and re-read library had change in external flag.";
  if (lib2.isSynthetic != false)
    throw "Serialized and re-read library had change in synthetic flag.";

  lib = new Library(Uri.parse("foo://bar.dart"));
  lib.isExternal = true;
  lib.isSynthetic = false;
  lib2 = libRoundTrip(lib);
  if (lib2.isExternal != true)
    throw "Serialized and re-read library had change in external flag.";
  if (lib2.isSynthetic != false)
    throw "Serialized and re-read library had change in synthetic flag.";

  lib = new Library(Uri.parse("foo://bar.dart"));
  lib.isExternal = false;
  lib.isSynthetic = true;
  lib2 = libRoundTrip(lib);
  if (lib2.isExternal != false)
    throw "Serialized and re-read library had change in external flag.";
  if (lib2.isSynthetic != true)
    throw "Serialized and re-read library had change in synthetic flag.";

  lib = new Library(Uri.parse("foo://bar.dart"));
  lib.isExternal = true;
  lib.isSynthetic = true;
  lib2 = libRoundTrip(lib);
  if (lib2.isExternal != true)
    throw "Serialized and re-read library had change in external flag.";
  if (lib2.isSynthetic != true)
    throw "Serialized and re-read library had change in synthetic flag.";
}
