public IEnumerator Progress()
        {
            var progress       = new ScheduledNotifier <float>();
            var hasReported    = false;
            var latestProgress = 0.0f;
            var reportCount    = 0;

            progress
            .Subscribe(
                x =>
            {
                hasReported    = true;
                latestProgress = x;
                reportCount++;
            }
                );
            var yieldInstruction = ObservableUnityWebRequest
                                   .GetAsObservable("http://localhost:3001/fruits", null, progress)
                                   .ToYieldInstruction(false);

            yield return(yieldInstruction);

            Assert.True(hasReported);
            Assert.AreEqual(1.0f, latestProgress);
            Assert.GreaterOrEqual(reportCount, 1);
        }
        public IEnumerator GetAudioClipAsObservable()
        {
            var yieldInstruction = ObservableUnityWebRequest
                                   .GetAudioClipAsObservable($"file://{Application.dataPath}/Tests/Runtime/Fixtures/AudioClip.ogg", AudioType.OGGVORBIS)
                                   .ToYieldInstruction(false);

            yield return(yieldInstruction);

            Assert.AreEqual(8, (int)yieldInstruction.Result.length);
        }
        public IEnumerator GetAsObservable()
        {
            var yieldInstruction = ObservableUnityWebRequest
                                   .GetAsObservable($"file://{Application.dataPath}/Tests/Runtime/Fixtures/Text.txt")
                                   .ToYieldInstruction(false);

            yield return(yieldInstruction);

            Assert.AreEqual("Text", yieldInstruction.Result);
        }
        public IEnumerator GetTexture2DAsObservable()
        {
            var yieldInstruction = ObservableUnityWebRequest
                                   .GetTexture2DAsObservable($"file://{Application.dataPath}/Tests/Runtime/Fixtures/Texture2D.png")
                                   .ToYieldInstruction(false);

            yield return(yieldInstruction);

            Assert.AreEqual(423, yieldInstruction.Result.width);
            Assert.AreEqual(500, yieldInstruction.Result.height);
        }
        public IEnumerator HttpHeadAsObservable()
        {
            var yieldInstruction = ObservableUnityWebRequest
                                   .HeadAsObservable("http://localhost:3001/fruits")
                                   .ToYieldInstruction(false);

            yield return(yieldInstruction);

            var responseHeaders = yieldInstruction.Result;

            Assert.AreEqual("application/json; charset=utf-8", responseHeaders["Content-Type"]);
            Assert.AreEqual("Express", responseHeaders["X-Powered-By"]);
        }
        public IEnumerator HttpPutAsObservable()
        {
            var yieldInstruction = ObservableUnityWebRequest
                                   .PutAsObservable("http://localhost:3001/fruits/2", Encoding.UTF8.GetBytes("id=2&name=BloodOrange&name_ja=ぶらっどおれんじ"))
                                   .ToYieldInstruction(false);

            yield return(yieldInstruction);

            var fruit = JsonUtility.FromJson <Fruit>(yieldInstruction.Result);

            Assert.AreEqual(2, fruit.Id);
            Assert.AreEqual("BloodOrange", fruit.Name);
            Assert.AreEqual("ぶらっどおれんじ", fruit.NameJapanese);
        }
        public IEnumerator HttpGetAsObservable()
        {
            var yieldInstruction = ObservableUnityWebRequest
                                   .GetAsObservable("http://localhost:3001/fruits")
                                   .ToYieldInstruction(false);

            yield return(yieldInstruction);

            var fruits = JsonUtility.FromJson <Fruits>($"{{\"fruits\":{yieldInstruction.Result}}}");

            Assert.AreEqual(1, fruits.FruitList[0].Id);
            Assert.AreEqual("Apple", fruits.FruitList[0].Name);
            Assert.AreEqual("りんご", fruits.FruitList[0].NameJapanese);
        }
        /// <summary>
        /// Put record if not exists for idempotency
        /// </summary>
        /// <returns></returns>
        private static IEnumerator PrepareForDelete()
        {
            var yieldInstruction = ObservableUnityWebRequest
                                   .HeadAsObservable("http://localhost:3001/fruits/3")
                                   .ToYieldInstruction(false);

            yield return(yieldInstruction);

            if (yieldInstruction.HasError && yieldInstruction.Error is UnityWebRequestErrorException.NotFound)
            {
                yield return(ObservableUnityWebRequest
                             .PostAsObservable("http://localhost:3001/fruits", Encoding.UTF8.GetBytes("id=3&name=Grape&name_ja=ぶどう"))
                             .ToYieldInstruction(false));
            }
        }
        /// <summary>
        /// Remove record if exists for idempotency
        /// </summary>
        /// <returns></returns>
        private static IEnumerator PrepareForPost()
        {
            var yieldInstruction = ObservableUnityWebRequest
                                   .HeadAsObservable("http://localhost:3001/fruits/4")
                                   .ToYieldInstruction(false);

            yield return(yieldInstruction);

            if (!yieldInstruction.HasError)
            {
                yield return(ObservableUnityWebRequest
                             .DeleteAsObservable("http://localhost:3001/fruits/4")
                             .ToYieldInstruction(false));
            }
        }
        public IEnumerator HttpDeleteAsObservable()
        {
            yield return(PrepareForDelete());

            var yieldInstruction = ObservableUnityWebRequest
                                   .DeleteAsObservable("http://localhost:3001/fruits/3")
                                   .ToYieldInstruction(false);

            yield return(yieldInstruction);

            var fruit = JsonUtility.FromJson <Fruit>(yieldInstruction.Result);

            Assert.AreEqual(default(int), fruit.Id);
            Assert.Null(fruit.Name);
            Assert.Null(fruit.NameJapanese);
        }
        public IEnumerator HttpPostAsObservable()
        {
            yield return(PrepareForPost());

            var yieldInstruction = ObservableUnityWebRequest
                                   .PostAsObservable("http://localhost:3001/fruits", "id=4&name=Banana&name_ja=ばなな")
                                   .ToYieldInstruction(false);

            yield return(yieldInstruction);

            var fruit = JsonUtility.FromJson <Fruit>(yieldInstruction.Result);

            Assert.AreEqual(4, fruit.Id);
            Assert.AreEqual("Banana", fruit.Name);
            Assert.AreEqual("ばなな", fruit.NameJapanese);
        }
        public IEnumerator GetAssetBundleAsObservable()
        {
            var yieldInstruction = ObservableUnityWebRequest
                                   .GetAssetBundleAsObservable($"file://{Application.dataPath}/Tests/Runtime/Fixtures/AssetBundle.assetbundle", 0U, 0U)
                                   .ToYieldInstruction(false);

            yield return(yieldInstruction);

            var assetBundle        = yieldInstruction.Result;
            var assetBundleRequest = assetBundle.LoadAssetAsync <TextAsset>(assetBundle.GetAllAssetNames().First());

            yield return(assetBundleRequest);

            Assert.AreEqual(typeof(TextAsset), assetBundleRequest.asset.GetType());
            Assert.AreEqual("Sample\n", (assetBundleRequest.asset as TextAsset)?.text);
        }
 public static IObservable <string> SendWebRequestAsObservable(this UnityWebRequest self, IProgress <float> progress = default)
 {
     return(ObservableUnityWebRequest.RequestAsObservable(self, ObservableUnityWebRequest.FetchString, progress));
 }
 private static IObservable <Texture2D> SendTexture2DWebRequestAsObservable(this UnityWebRequest self, IProgress <float> progress = default)
 {
     return(ObservableUnityWebRequest.RequestAsObservable(self, ObservableUnityWebRequest.FetchTexture2D, progress));
 }
 private static IObservable <AudioClip> SendAudioClipWebRequestAsObservable(this UnityWebRequest self, IProgress <float> progress = default)
 {
     return(ObservableUnityWebRequest.RequestAsObservable(self, ObservableUnityWebRequest.FetchAudioClip, progress));
 }
 private static IObservable <AssetBundle> SendAssetBundleWebRequestAsObservable(this UnityWebRequest self, IProgress <float> progress = default)
 {
     return(ObservableUnityWebRequest.RequestAsObservable(self, ObservableUnityWebRequest.FetchAssetBundle, progress));
 }
 private static IObservable <IEnumerable <byte> > SendBytesWebRequestAsObservable(this UnityWebRequest self, IProgress <float> progress = default)
 {
     return(ObservableUnityWebRequest.RequestAsObservable(self, ObservableUnityWebRequest.FetchBytes, progress));
 }