// 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:unittest/unittest.dart';
import 'package:unittest/html_config.dart';
import 'package:async_helper/async_helper.dart';

main() async {
  useHtmlConfiguration();

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