| Index: tests/stub-generator/src/MintMakerPromiseWithStubsTest-generatedTest.dart
|
| ===================================================================
|
| --- tests/stub-generator/src/MintMakerPromiseWithStubsTest-generatedTest.dart (revision 1134)
|
| +++ tests/stub-generator/src/MintMakerPromiseWithStubsTest-generatedTest.dart (working copy)
|
| @@ -8,7 +8,7 @@
|
|
|
| /* class = Mint (tests/stub-generator/src/MintMakerPromiseWithStubsTest.dart/MintMakerPromiseWithStubsTest.dart: 9) */
|
|
|
| -interface Mint$Proxy {
|
| +interface Mint$Proxy extends Proxy {
|
| Purse$Proxy createPurse(int balance);
|
| }
|
|
|
| @@ -61,7 +61,7 @@
|
|
|
| /* class = Purse (tests/stub-generator/src/MintMakerPromiseWithStubsTest.dart/MintMakerPromiseWithStubsTest.dart: 17) */
|
|
|
| -interface Purse$Proxy {
|
| +interface Purse$Proxy extends Proxy {
|
| Promise<int> queryBalance();
|
|
|
| Purse$Proxy sproutPurse();
|
| @@ -89,7 +89,7 @@
|
| }
|
|
|
| Promise<int> deposit(int amount, Purse$Proxy source) {
|
| - return this.call(["deposit", amount, source]);
|
| + return new PromiseProxy<int>(this.call(["deposit", amount, source]));
|
| }
|
| }
|
|
|
| @@ -110,13 +110,9 @@
|
| int amount = message[1];
|
| List<Promise<SendPort>> promises = new List<Promise<SendPort>>();
|
| promises.add(new PromiseProxy<SendPort>(new Promise<SendPort>.fromValue(message[2])));
|
| - Promise done = new Promise();
|
| - done.waitFor(promises, 1);
|
| - done.addCompleteHandler((_) {
|
| - Purse$Proxy source = new Purse$ProxyImpl(promises[0]);
|
| - int deposit = target.deposit(amount, source);
|
| - reply(deposit);
|
| - });
|
| + Purse$Proxy source = new Purse$ProxyImpl(promises[0]);
|
| + Promise<int> deposit = target.deposit(amount, source);
|
| + reply(deposit);
|
| } else {
|
| // TODO(kasperl,benl): Somehow throw an exception instead.
|
| reply("Exception: command '" + command + "' not understood by Purse.");
|
| @@ -150,7 +146,7 @@
|
|
|
| int queryBalance();
|
| Purse sproutPurse();
|
| - int deposit(int amount, Purse$Proxy source);
|
| + Promise<int> deposit(int amount, Purse$Proxy source);
|
|
|
| }
|
|
|
| @@ -187,17 +183,21 @@
|
| return _mint.createPurse(0);
|
| }
|
|
|
| - int deposit(int amount, Purse$Proxy proxy) {
|
| + Promise<int> deposit(int amount, Purse$Proxy proxy) {
|
| if (amount < 0) throw "Ha ha";
|
| // Because we are in the same isolate as the other purse, we can
|
| // retrieve the proxy's local PurseImpl object and act on it
|
| // directly. Further, a forged purse will not be convertible, and
|
| // so an attempt to use it will fail.
|
| - PurseImpl source = proxy.dynamic.local;
|
| - if (source._balance < amount) throw "Not enough dough.";
|
| - _balance += amount;
|
| - source._balance -= amount;
|
| - return _balance;
|
| + Promise<int> balance = new Promise<int>();
|
| + proxy.addCompleteHandler((_) {
|
| + PurseImpl source = proxy.dynamic.local;
|
| + if (source._balance < amount) throw "Not enough dough.";
|
| + _balance += amount;
|
| + source._balance -= amount;
|
| + balance.complete(_balance);
|
| + });
|
| + return balance;
|
| }
|
|
|
| Mint _mint;
|
| @@ -218,19 +218,33 @@
|
| // FIXME(benl): We should not have to manually order the calls
|
| // like this.
|
| Promise<int> result = sprouted.deposit(5, purse);
|
| - expect.completesWithValue(result, 5);
|
| + Promise p1 = expect.completesWithValue(result, 5);
|
| + Promise<bool> p2 = new Promise<bool>();
|
| + Promise<bool> p3 = new Promise<bool>();
|
| + Promise<bool> p4 = new Promise<bool>();
|
| + Promise<bool> p5 = new Promise<bool>();
|
| + Promise<bool> p6 = new Promise<bool>();
|
| result.addCompleteHandler((_) {
|
| - expect.completesWithValue(sprouted.queryBalance(), 0 + 5);
|
| - expect.completesWithValue(purse.queryBalance(), 100 - 5);
|
| + expect.completesWithValue(sprouted.queryBalance(), 0 + 5)
|
| + .then((_) => p2.complete(true));
|
| + expect.completesWithValue(purse.queryBalance(), 100 - 5)
|
| + .then((_) => p3.complete(true));
|
|
|
| result = sprouted.deposit(42, purse);
|
| - expect.completesWithValue(result, 5 + 42);
|
| + expect.completesWithValue(result, 5 + 42).then((_) => p4.complete(true));
|
| result.addCompleteHandler((_) {
|
| - expect.completesWithValue(sprouted.queryBalance(), 0 + 5 + 42);
|
| - expect.completesWithValue(purse.queryBalance(), 100 - 5 - 42);
|
| + expect.completesWithValue(sprouted.queryBalance(), 0 + 5 + 42)
|
| + .then((_) => p5.complete(true));
|
| + expect.completesWithValue(purse.queryBalance(), 100 - 5 - 42)
|
| + .then((_) => p6.complete(true));
|
| });
|
| });
|
| - expect.succeeded();
|
| + Promise<bool> done = new Promise<bool>();
|
| + done.waitFor([p1, p2, p3, p4, p5, p6], 6);
|
| + done.then((_) {
|
| + expect.succeeded();
|
| + print("##DONE##");
|
| + });
|
| }
|
|
|
| }
|
|
|