@NonNull private String buildHeaderValue(@NonNull List<LazyHeaderFactory> factories) { StringBuilder sb = new StringBuilder(); int size = factories.size(); for (int i = 0; i < size; i++) { LazyHeaderFactory factory = factories.get(i); String header = factory.buildHeader(); if (!TextUtils.isEmpty(header)) { sb.append(header); if (i != factories.size() - 1) { sb.append(','); } } } return sb.toString(); }
@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 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 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"); }
@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 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"); }
private Map<String, String> generateHeaders() { Map<String, String> combinedHeaders = new HashMap<String, String>(); for (Map.Entry<String, List<LazyHeaderFactory>> entry : headers.entrySet()) { StringBuilder sb = new StringBuilder(); List<LazyHeaderFactory> factories = entry.getValue(); for (int i = 0; i < factories.size(); i++) { LazyHeaderFactory factory = factories.get(i); sb.append(factory.buildHeader()); if (i != factories.size() - 1) { sb.append(','); } } combinedHeaders.put(entry.getKey(), sb.toString()); } return combinedHeaders; }
private Map<String, String> generateHeaders() { Map<String, String> combinedHeaders = new HashMap<>(); for (Map.Entry<String, List<LazyHeaderFactory>> entry : headers.entrySet()) { StringBuilder sb = new StringBuilder(); List<LazyHeaderFactory> factories = entry.getValue(); int size = factories.size(); for (int i = 0; i < size; i++) { LazyHeaderFactory factory = factories.get(i); String header = factory.buildHeader(); if (!TextUtils.isEmpty(header)) { sb.append(header); if (i != factories.size() - 1) { sb.append(','); } } } String values = sb.toString(); if (!TextUtils.isEmpty(values)) { combinedHeaders.put(entry.getKey(), sb.toString()); } } return combinedHeaders; }