public void SetUp() { _cachedLoader = Substitute.For <IBundleCachedLoader>(); // Mock bundleManifest _bundleManifestLoader = Substitute.For <IBundleManifestLoader>(); _bundleManifest = Substitute.For <IBundleManifest>(); _bundleManifestLoader.Load().Returns(Observable.Return(_bundleManifest)); _fixture = new BundleLoader(_cachedLoader, _bundleManifestLoader); }
public IObservable <IBundleManifest> Load() => _bundleManifest == null ? _innerLoader .Load <IBundle>(_manifestUri) .ContinueWith(bundle => bundle.LoadAsset <AssetBundleManifest>(ManifestAssetName)) .Select(x => { if (x == null) { throw new InvalidOperationException( $"No AssetBundleManifest found from bundleManifest uri {_manifestUri}"); } return(_bundleManifest = new BundleManifestAdaptor(x)); }) : Observable.Return(_bundleManifest);
private IObservable<List<string>> LoadAllDependencies(IBundleManifest bundleManifest, string bundleName, Options options) { var loadedBundleNames = new List<string>(); return bundleManifest .GetAllDependencies(bundleName) .Select(x => _cachedLoader .LoadDependency(x, options, bundleName) .Do(y => { (y as IDisposable)?.Dispose(); loadedBundleNames.Add(x); })) .WhenAll() .Select(x => loadedBundleNames) .DoOnError(ex => loadedBundleNames .ForEach(x => _cachedLoader.UnloadDependency(x, bundleName))); // Todo DRY }