// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

var test = require('prova');
var Promise = require('../../src/lib/promise');
var asyncHelper = require('../../src/lib/async-helper');

test('promiseFor with n === 0', function(t) {
  var numCalls = 0;
  asyncHelper.promiseFor(0, function() {
    numCalls++;
    return Promise.resolve();
  }).then(function() {
    t.equal(numCalls, 0, 'made wrong number of calls');
    t.end();
  }).catch(t.end);
});

test('promiseFor with n > 0', function(t) {
  var numCalls = 0;
  asyncHelper.promiseFor(5, function() {
    numCalls++;
    return Promise.resolve();
  }).then(function() {
    t.equal(numCalls, 5, 'made wrong number of calls');
    t.end();
  }).catch(t.end);
});

test('promiseWhile with condition always false', function(t) {
  asyncHelper.promiseWhile(function() {
    return Promise.resolve(false);
  }, function neverCall() {
    t.fail('should never have been called');
  }).then(function() {
    t.pass('success!');
    t.end();
  }).catch(t.end);
});


test('promiseWhile with simple condition', function(t) {
  var numCalls = 0;
  asyncHelper.promiseWhile(function() {
    if (numCalls < 4) {
      return Promise.resolve(true);
    }
    return Promise.resolve(false);
  }, function() {
    numCalls++;
    return Promise.resolve();
  }).then(function() {
    t.equal(numCalls, 4, 'made correct number of calls');
    t.end();
  }).catch(t.end);
});
