@Override public void run() throws Throwable { multiFactory.build(String.class, Integer.class); } });
@NonNull @Override public ModelLoader<Api.GifResult, InputStream> build(MultiModelLoaderFactory multiFactory) { return new GiphyModelLoader(multiFactory.build(GlideUrl.class, InputStream.class)); }
@NonNull @Override public ModelLoader<Integer, InputStream> build(MultiModelLoaderFactory multiFactory) { return new ResourceLoader<>(resources, multiFactory.build(Uri.class, InputStream.class)); }
@NonNull @Override public ModelLoader<Uri, InputStream> build(MultiModelLoaderFactory multiFactory) { return new UrlUriLoader<>(multiFactory.build(GlideUrl.class, InputStream.class)); }
@Override public void run() throws Throwable { multiFactory.build(Integer.class, String.class); } });
@NonNull @Override public ModelLoader<String, InputStream> build( @NonNull MultiModelLoaderFactory multiFactory) { return new StringLoader<>(multiFactory.build(Uri.class, InputStream.class)); }
@NonNull @Override public ModelLoader<String, ParcelFileDescriptor> build( @NonNull MultiModelLoaderFactory multiFactory) { return new StringLoader<>(multiFactory.build(Uri.class, ParcelFileDescriptor.class)); }
@NonNull @Override public ModelLoader<Integer, ParcelFileDescriptor> build(MultiModelLoaderFactory multiFactory) { return new ResourceLoader<>( resources, multiFactory.build(Uri.class, ParcelFileDescriptor.class)); }
@NonNull private synchronized <A> List<ModelLoader<A, ?>> getModelLoadersForClass( @NonNull Class<A> modelClass) { List<ModelLoader<A, ?>> loaders = cache.get(modelClass); if (loaders == null) { loaders = Collections.unmodifiableList(multiModelLoaderFactory.build(modelClass)); cache.put(modelClass, loaders); } return loaders; }
@NonNull @Override public ModelLoader<WaitModel<Model>, Data> build( MultiModelLoaderFactory multiFactory) { return new WaitModelLoader<>(multiFactory.build(modelClass, dataClass)); }
@Test public void testAppend_addsModelLoaderForModelAndDataClass() { multiFactory.append(String.class, String.class, firstFactory); ModelLoader<String, String> modelLoader = multiFactory.build(String.class, String.class); assertThat(modelLoader).isEqualTo(firstModelLoader); }
@Test public void testReplace_addsModelLoaderForModelClass() { multiFactory.replace(String.class, String.class, firstFactory); List<ModelLoader<String, ?>> modelLoaders = multiFactory.build(String.class); assertThat(modelLoaders).containsExactly(firstModelLoader); }
@Test public void testBuild_withModelClass_matchesSuperclassesOfModelClass() { ModelLoader<Object, Object> superclass = appendFactoryFor(Object.class, Object.class); List<ModelLoader<String, ?>> modelLoaders = multiFactory.build(String.class); assertThat(modelLoaders).contains(superclass); }
@Test public void testPrepend_addsModelLoaderForModelClass() { multiFactory.prepend(String.class, String.class, firstFactory); List<ModelLoader<String, ?>> modelLoaders = multiFactory.build(String.class); assertThat(modelLoaders).containsExactly(firstModelLoader); }
@Test public void testReplace_addsModelLoaderForModelAndDataClasses() { multiFactory.replace(String.class, String.class, firstFactory); ModelLoader<String, String> modelLoader = multiFactory.build(String.class, String.class); assertThat(modelLoader).isEqualTo(firstModelLoader); }
@Test public void testBuild_withModelClass_excludesModelLoadersForOtherModelClasses() { multiFactory.append(String.class, String.class, firstFactory); List<ModelLoader<Integer, ?>> modelLoaders = multiFactory.build(Integer.class); assertThat(modelLoaders).doesNotContain(firstModelLoader); }
@Test public void testBuild_withModelClass_doesNotMatchSubclassesOfModelClass() { ModelLoader<String, Object> subclass = appendFactoryFor(String.class, Object.class); List<ModelLoader<Object, ?>> modelLoaders = multiFactory.build(Object.class); assertThat(modelLoaders).doesNotContain(subclass); }
@Test public void testBuild_withModelClass_returnsMultipleModelLoaders_ofGivenModelAndDataClasses() { ModelLoader<String, String> otherLoader = appendFactoryFor(String.class, String.class); multiFactory.append(String.class, String.class, firstFactory); List<ModelLoader<String, ?>> modelLoaders = multiFactory.build(String.class); assertThat(modelLoaders).containsExactly(otherLoader, firstModelLoader); }
@Test public void testRemove_removesPreviouslyRegisteredFactories_withModelAndDataClasses() { appendFactoryFor(String.class, String.class); appendFactoryFor(String.class, String.class); multiFactory.remove(String.class, String.class); List<ModelLoader<String, ?>> modelLoaders = multiFactory.build(String.class); assertThat(modelLoaders).isEmpty(); }
@Test public void testReplace_removesPreviouslyRegisteredFactories_withModelAndDataClasses() { appendFactoryFor(String.class, String.class); appendFactoryFor(String.class, String.class); multiFactory.replace(String.class, String.class, firstFactory); List<ModelLoader<String, ?>> modelLoaders = multiFactory.build(String.class); assertThat(modelLoaders).containsExactly(firstModelLoader); }