/** * Adds a value for the given header and returns this builder. * * <p> Use {@link #addHeader(String, LazyHeaderFactory)} if obtaining the value requires I/O * (i.e. an OAuth token). </p> * * @see #addHeader(String, LazyHeaderFactory) */ public Builder addHeader(@NonNull String key, @NonNull String value) { return addHeader(key, new StringHeaderFactory(value)); }
@Test public void testMultipleLazyValuesAreSeparatedByCommas() { LazyHeaderFactory first = mock(LazyHeaderFactory.class); when(first.buildHeader()).thenReturn("first"); LazyHeaderFactory second = mock(LazyHeaderFactory.class); when(second.buildHeader()).thenReturn("second"); Map<String, String> headers = new Builder() .addHeader("key", first) .addHeader("key", second) .build() .getHeaders(); assertThat(headers).containsEntry("key", "first,second"); }
@Test public void testCanAddMultipleKeys() { LazyHeaderFactory factory = mock(LazyHeaderFactory.class); when(factory.buildHeader()).thenReturn("lazy"); Map<String, String> headers = new Builder() .addHeader("first", factory) .addHeader("second", "eager") .build() .getHeaders(); assertThat(headers).containsEntry("first", "lazy"); assertThat(headers).containsEntry("second", "eager"); }
/** * Adds a value for the given header and returns this builder. * * <p> Use {@link #addHeader(String, LazyHeaderFactory)} if obtaining the value requires I/O * (i.e. an OAuth token). </p> * * @see #addHeader(String, LazyHeaderFactory) */ public Builder addHeader(String key, String value) { return addHeader(key, new StringHeaderFactory(value)); }
public static void loadImage(Context context, String url, ImageView view, String source) { GlideUrl glideUrl = new GlideUrl(url, new LazyHeaders.Builder() .addHeader(REFERER, getReferer(source)) .build()); Glide.with(context) .load(glideUrl) // .placeholder(R.drawable.comic_placeholder) .diskCacheStrategy(DiskCacheStrategy.ALL) .crossFade() .into(view); }
/** * Adds a value for the given header and returns this builder. * * <p> Use {@link #addHeader(String, LazyHeaderFactory)} if obtaining the value requires I/O * (ie an oauth token). </p> * * @see #addHeader(String, LazyHeaderFactory) */ public Builder addHeader(String key, String value) { return addHeader(key, new StringHeaderFactory(value)); }
new Builder().addHeader("key", "value").build(), new Builder().addHeader("key", "value").build() new Builder().addHeader("key", "value").addHeader("key", "value").build() new Builder().addHeader("key", firstLazyFactory).build(), new Builder().addHeader("key", firstLazyFactory).build() .addHeader("key", firstLazyFactory) .addHeader("key", firstLazyFactory) .build() .addHeader("firstKey", "value") .addHeader("secondKey", firstLazyFactory) .build(), new Builder() .addHeader("secondKey", firstLazyFactory) .addHeader("firstKey", "value") .build() new Builder().addHeader("key", "secondValue") new Builder().addHeader("secondKey", "value") new Builder().addHeader("key", secondLazyFactory) new Builder().addHeader("secondKey", firstLazyFactory) .addHeader("firstKey", "firstValue")
@Test public void testKeyIncludedWithOneFactoryThatReturnsNullAndOneFactoryThatDoesNotReturnNull() { Builder builder = new Builder(); builder.addHeader("test", new LazyHeaderFactory() { @Nullable @Override public String buildHeader() { return null; } }); builder.addHeader("test", new LazyHeaderFactory() { @Nullable @Override public String buildHeader() { return "value"; } }); LazyHeaders headers = builder.build(); assertThat(headers.getHeaders()).containsEntry("test", "value"); }
@Test public void testUpdatingBuilderAfterBuildingDoesNotModifyOriginalHeaders() { Builder builder = new Builder(); builder.addHeader("key", "firstValue"); builder.addHeader("otherKey", "otherValue"); LazyHeaders first = builder.build(); LazyHeaderFactory factory = mock(LazyHeaderFactory.class); when(factory.buildHeader()).thenReturn("otherValue"); builder.addHeader("key", "secondValue"); builder.setHeader("otherKey", factory); LazyHeaders second = builder.build(); assertThat(first.getHeaders()).isNotEqualTo(second.getHeaders()); assertThat(first.getHeaders()).containsEntry("key", "firstValue"); assertThat(first.getHeaders()).containsEntry("otherKey", "otherValue"); assertThat(second.getHeaders()).containsEntry("key", "firstValue,secondValue"); assertThat(second.getHeaders()).containsEntry("otherKey", "otherValue"); }
@Test public void testMixedEagerAndLazyValuesAreIncluded() { LazyHeaderFactory factory = mock(LazyHeaderFactory.class); when(factory.buildHeader()).thenReturn("first"); Map<String, String> headers = new Builder() .addHeader("key", factory) .addHeader("key", "second") .build() .getHeaders(); assertThat(headers).containsEntry("key", "first,second"); headers = new Builder() .addHeader("key", "second") .addHeader("key", factory) .build() .getHeaders(); assertThat(headers).containsEntry("key", "second,first"); }
@Test public void testRemovingAndAddingEncodingHeaderReplacesDefaultThenAppends() { Builder builder = new Builder(); builder.setHeader("Accept-Encoding", (String) null); LazyHeaders headers = builder.build(); assertThat(headers.getHeaders()).doesNotContainKey("Accept-Encoding"); builder.addHeader("Accept-Encoding", "false"); headers = builder.build(); assertThat(headers.getHeaders()).containsEntry("Accept-Encoding", "false"); builder.addHeader("Accept-Encoding", "true"); headers = builder.build(); assertThat(headers.getHeaders()).containsEntry("Accept-Encoding", "false,true"); }
@Test public void testRemovingAndAddingUserAgentHeaderReplacesDefaultThenAppends() { Builder builder = new Builder(); builder.setHeader("User-Agent", (String) null); LazyHeaders headers = builder.build(); assertThat(headers.getHeaders()).doesNotContainKey("User-Agent"); builder.addHeader("User-Agent", "false"); headers = builder.build(); assertThat(headers.getHeaders()).containsEntry("User-Agent", "false"); builder.addHeader("User-Agent", "true"); headers = builder.build(); assertThat(headers.getHeaders()).containsEntry("User-Agent", "false,true"); }
@Test public void testIncludesLazyHeaders() { LazyHeaderFactory factory = mock(LazyHeaderFactory.class); when(factory.buildHeader()).thenReturn("value"); Map<String, String> headers = new Builder() .addHeader("key", factory) .build() .getHeaders(); assertThat(headers).containsEntry("key", "value"); }
@Test public void testIncludesEagerHeaders() { Map<String, String> headers = new Builder() .addHeader("key", "value") .build() .getHeaders(); assertThat(headers).containsEntry("key", "value"); }
@Test public void testAddingEncodingHeaderReplacesDefaultThenAppends() { Builder builder = new Builder(); builder.addHeader("Accept-Encoding", "false"); LazyHeaders headers = builder.build(); assertThat(headers.getHeaders()).containsEntry("Accept-Encoding", "false"); builder.addHeader("Accept-Encoding", "true"); headers = builder.build(); assertThat(headers.getHeaders()).containsEntry("Accept-Encoding", "false,true"); }
@Test public void testSetHeaderWithNullLazyHeaderFactoryRemovesExistingHeader() { Builder builder = new Builder(); builder.addHeader("key", "first") .addHeader("key", "second") .setHeader("key", (LazyHeaderFactory) null); LazyHeaders headers = builder.build(); assertThat(headers.getHeaders()).doesNotContainKey("key"); }
@Test public void testAddingUserAgentHeaderReplacesDefaultThenAppends() { Builder builder = new Builder(); builder.addHeader("User-Agent", "false"); LazyHeaders headers = builder.build(); assertThat(headers.getHeaders()).containsEntry("User-Agent", "false"); builder.addHeader("User-Agent", "true"); headers = builder.build(); assertThat(headers.getHeaders()).containsEntry("User-Agent", "false,true"); }