TagEditor { @NonNull public TagEditor addTags(@NonNull Set<String> tags) { tagsToRemove.removeAll(tags); tagsToAdd.addAll(tags); return this; } @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) protected  TagEditor(); @NonNull TagEditor addTag(@NonNull String tag); @NonNull TagEditor addTags(@NonNull Set<String> tags); @NonNull TagEditor removeTag(@NonNull String tag); @NonNull TagEditor removeTags(@NonNull Set<String> tags); @NonNull TagEditor clear(); void apply();  }
@Test public void testAddTags() { Set<String> tagSet = new HashSet<>(); tagSet.add("set_tag"); tagSet.add("another_set_tag"); editor.addTag("some_tag") .addTags(tagSet) .addTag("some_other_tags") .apply(); assertEquals(4, tagsToAdd.size()); assertTrue(tagsToAdd.contains("some_tag")); assertTrue(tagsToAdd.contains("some_other_tags")); assertTrue(tagsToAdd.contains("set_tag")); assertTrue(tagsToAdd.contains("another_set_tag")); assertEquals(0, tagsToRemove.size()); assertFalse(clear); }