// Copyright (c) 2013, 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.

// @dart = 2.9

library interactive_test;

import 'dart:async';
import 'dart:html';

import 'package:async_helper/async_minitest.dart';
import 'package:async_helper/async_helper.dart';

main() async {
  bool thenEstimateBefore, thenEstimateAfter, thenEstimateDone = false;
  Map thenEstimate;
  test('Basic Promise Test', () async {
    try {
      thenEstimateBefore = true;
      window.navigator.storage.estimate().then((value) {
        thenEstimate = value;
        thenEstimateDone = true;
      });
      thenEstimateAfter = true;
    } catch (msg) {
      fail("StorageManger failed: $msg");
    }

    Map estimate = await window.navigator.storage.estimate();

    expect(thenEstimate['usage'] >= 0, true);
    expect(thenEstimate['quota'] > 1, true);
    expect(thenEstimate['usage'], estimate['usage']);
    expect(thenEstimate['quota'], estimate['quota']);

    expect(thenEstimateBefore, true);
    expect(thenEstimateAfter, true);
    expect(thenEstimateDone, true);
  });
}
