| 
<?php
 /*
 * Copyright (c) 2014, Yahoo! Inc. All rights reserved.
 * Copyrights licensed under the New BSD License.
 * See the accompanying LICENSE file for terms.
 */
 
 use ohmy\Auth\Promise;
 
 class PromiseTest extends PHPUnit_Framework_TestCase {
 
 public function setUp(){}
 public function tearDown(){}
 
 public function testStaticResolve() {
 $phpunit = $this;
 $promise = Promise::resolve(0);
 $promise->then(function($data) use($phpunit) {
 $phpunit->assertEquals($data, 0);
 }, function($data) use($phpunit) {
 $phpunit->fail('This should not run!');
 });
 }
 
 public function testStaticReject() {
 $phpunit = $this;
 $promise = Promise::reject(0);
 $promise->then(function($data) use($phpunit) {
 $phpunit->fail('This should not run!');
 }, function($data) use($phpunit) {
 $phpunit->assertEquals($data, 0);
 });
 }
 
 public function testResolve() {
 
 $phpunit = $this;
 
 $promise = new Promise(function($resolve) {
 $resolve(0);
 });
 
 $promise->then(function($data) use($phpunit) {
 $phpunit->assertEquals($data, 0);
 }, function($data) use($phpunit) {
 $phpunit->fail('This should not run!');
 });
 
 }
 
 public function testReject() {
 
 $phpunit = $this;
 
 $promise = new Promise(function($resolve, $reject) {
 $reject(0);
 });
 
 $promise->then(function($data) use($phpunit)  {
 $phpunit->fail('This should not run!');
 }, function($data) use($phpunit) {
 $phpunit->assertEquals($data, 0);
 });
 }
 
 public function testCatchWithResolve() {
 
 $phpunit = $this;
 
 $promise = new Promise(function($resolve, $reject) {
 $resolve(0);
 });
 
 $promise->then(function($data) use($phpunit)  {
 $phpunit->assertEquals($data, 0);
 }, function($data) use($phpunit) {
 $phpunit->fail('This should not run!');
 })
 ->catch(function($data) use($phpunit) {
 $phpunit->fail('This should not run!');
 });
 
 }
 
 public function testCatchWithReject() {
 
 $phpunit = $this;
 
 $promise = new Promise(function($resolve, $reject) {
 $reject(0);
 });
 
 $promise->then(function($data) use($phpunit)  {
 $phpunit->fail('This should not run!');
 }, function($data) use($phpunit) {
 $phpunit->assertEquals($data, 0);
 return $data + 1;
 })
 ->catch(function($data) use($phpunit) {
 $phpunit->assertEquals($data, 1);
 });
 
 }
 
 public function testValueAfterCatchWithResolve() {
 
 $phpunit = $this;
 
 $promise = new Promise(function($resolve, $reject) {
 $resolve(0);
 });
 
 $promise->then(function($data) use($phpunit) {
 $phpunit->assertEquals($data, 0);
 return $data + 1;
 }, function($data) use($phpunit) {
 $phpunit->fail('This should not run!');
 })
 ->catch(function($data) use($phpunit) {
 $phpunit->fail('This should not run!');
 })
 ->then(function($data) use($phpunit) {
 $phpunit->assertEquals($data, 1);
 });
 
 }
 
 public function testValueAfterCatchWithReject() {
 
 $phpunit = $this;
 
 $promise = new Promise(function($resolve, $reject) {
 $reject(0);
 });
 
 $promise->then(function($data) use($phpunit) {
 $phpunit->fail('This should not run!');
 }, function($data) use($phpunit) {
 $phpunit->assertEquals($data, 0);
 return $data + 1;
 })
 ->catch(function($data) use($phpunit) {
 $phpunit->assertEquals($data, 1);
 return $data + 1;
 })
 ->then(function($data) use($phpunit) {
 $phpunit->assertEquals($data, 2);
 });
 
 }
 
 public function testFinallyAfterResolve() {
 
 $phpunit = $this;
 
 $promise = new Promise(function($resolve) {
 $resolve(0);
 });
 
 $promise->then(function($data) use($phpunit) {
 $phpunit->assertEquals($data, 0);
 return $data + 1;
 }, function($data) {
 $phpunit->fail('This should not run!');
 })
 ->finally(function($data) use($phpunit) {
 $phpunit->assertEquals($data, 1);
 });
 }
 
 public function testFinallyAfterReject() {
 
 $phpunit = $this;
 
 $promise = new Promise(function($resolve, $reject) {
 $reject(0);
 });
 
 $promise->then(function($data) use($phpunit)  {
 $phpunit->fail('This should not run!');
 }, function($data) use($phpunit) {
 $phpunit->assertEquals($data, 0);
 return $data + 1;
 })
 ->catch(function($data) use($phpunit) {
 $phpunit->assertEquals($data, 1);
 return $data + 1;
 })
 ->finally(function($data) use($phpunit) {
 $phpunit->assertEquals($data, 2);
 });
 }
 }
 
 |