### Question:
AppcacheLinker extends AbstractLinker { @Nonnull final String joinValues( @Nonnull final Set<String> values ) { final StringBuilder sb = new StringBuilder(); for ( final String value : values ) { if ( 0 != sb.length() ) { sb.append( "," ); } sb.append( value ); } return sb.toString(); }  @Override String getDescription(); @Override ArtifactSet link( @Nonnull final TreeLogger logger,
                           @Nonnull final LinkerContext context,
                           @Nonnull final ArtifactSet artifacts,
                           final boolean onePermutation );  }### Answer:
@Test public void joinValues() { final AppcacheLinker linker = new AppcacheLinker(); final TreeSet<String> strings = new TreeSet<>(); assertEquals( linker.joinValues( strings ), "" ); strings.add( "a" ); assertEquals( linker.joinValues( strings ), "a" ); strings.add( "b" ); strings.add( "c" ); assertEquals( linker.joinValues( strings ), "a,b,c" ); }