In fact builder pattern is combining mutable objects during creation with immutable result
1 package org.apidesign.aserverinfo.test;
3 import java.net.MalformedURLException;
5 import org.apidesign.aserverinfo.builder.ServerConnector;
6 import org.apidesign.aserverinfo.builder.ServerInfo;
7 import org.apidesign.aserverinfo.spi.NameProvider;
8 import org.apidesign.aserverinfo.spi.ResetHandler;
9 import org.apidesign.aserverinfo.spi.URLProvider;
10 import org.junit.After;
11 import org.junit.Before;
12 import org.junit.Test;
13 import static org.junit.Assert.*;
14 import org.openide.util.Exceptions;
16 public class BuilderFactoryTest {
18 public BuilderFactoryTest() {
26 public void tearDown() {
30 public void showUseOfBuilder() throws Exception {
35 ServerConnector connection;
37 // BEGIN: ServerConnector.builder.creation
38 connection = ServerInfo.empty()
39 .nameProvider(np).urlProvider(up).reset(res).connect();
40 // END: ServerConnector.builder.creation
42 assertEquals("API Design Server", connection.getName());
43 assertEquals("http://www.apidesign.org", connection.getURL().toExternalForm());
45 assertEquals("Once reset", 1, p.resets);
50 public void showVerboseUseOfBuilder() throws Exception {
51 Prov prov = new Prov();
52 ServerConnector connection;
54 // BEGIN: ServerConnector.builder.creation.verbose
55 ServerInfo empty = ServerInfo.empty();
56 ServerInfo name = empty.nameProvider(prov);
57 ServerInfo urlAndName = name.urlProvider(prov);
58 ServerInfo all = urlAndName.reset(prov);
59 connection = all.connect();
60 // END: ServerConnector.builder.creation.verbose
62 assertEquals("API Design Server", connection.getName());
63 assertEquals("http://www.apidesign.org", connection.getURL().toExternalForm());
65 assertEquals("Once reset", 1, prov.resets);
70 private static class Prov implements NameProvider, URLProvider, ResetHandler {
73 public String getName() {
74 return "API Design Server";
79 return new URL("http://www.apidesign.org");
80 } catch (MalformedURLException ex) {
81 Exceptions.printStackTrace(ex);