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

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);
  });
}
