public IEnumerator Setup() { var done = false; // overwrite Autoya instance for test purchase feature. yield return(WaitPurchaseFeatureOfAutoya( () => { done = true; } )); yield return(WaitUntil( () => done, () => { throw new TimeoutException("failed to ready."); } )); if (!done) { Fail("Purchase feature test setup is failed to ready."); yield break; } // shutdown purchase feature for get valid result from Unity IAP. Autoya.Purchase_DEBUG_Shutdown(); var purchaseRunner = new GameObject("PurchaseTestRunner"); runner = purchaseRunner.AddComponent <TestMBRunner>(); router = new PurchaseRouter( iEnum => { runner.StartCoroutine(iEnum); }, () => PurchaseRouter.RequestProductInfosAs.Binary, productData => { // dummy response. return(new ProductInfo[] { new ProductInfo("100_gold_coins", "100_gold_coins_iOS", true, "one hundled of coins."), new ProductInfo("1000_gold_coins", "1000_gold_coins_iOS", true, "one ton of coins.") }); }, givenProductId => Encoding.UTF8.GetBytes(givenProductId), ticketData => Encoding.UTF8.GetString((byte[])ticketData), () => { }, (err, code, reason) => { }, ticketAndReceipt => Encoding.UTF8.GetBytes(JsonUtility.ToJson(ticketAndReceipt)), ticketAndReceipt => Encoding.UTF8.GetBytes(JsonUtility.ToJson(ticketAndReceipt)), failData => Encoding.UTF8.GetBytes(JsonUtility.ToJson(failData)) ); yield return(WaitUntil(() => router.IsPurchaseReady(), () => { throw new TimeoutException("failed to ready."); })); }