public static Builder builder() {
    return new Builder();
  }
@Test
  public void testRoundTrip() throws Exception {
    assertRoundTripSerializesEquallyFrom(
        "{\"access_token\":\"bearer-token\",\"token_type\":\"bearer\"}",
        OAuthTokenResponse.builder().withToken("bearer-token").withTokenType("bearer").build());

    assertRoundTripSerializesEquallyFrom(
        "{\"access_token\":\"bearer-token\",\"token_type\":\"bearer\","
            + "\"issued_token_type\":\"urn:ietf:params:oauth:token-type:access_token\"}",
        OAuthTokenResponse.builder()
            .withToken("bearer-token")
            .withTokenType("bearer")
            .withIssuedTokenType("urn:ietf:params:oauth:token-type:access_token")
            .build());

    assertRoundTripSerializesEquallyFrom(
        "{\"access_token\":\"bearer-token\",\"token_type\":\"bearer\",\"expires_in\":600}",
        OAuthTokenResponse.builder()
            .withToken("bearer-token")
            .withTokenType("bearer")
            .setExpirationInSeconds(600)
            .build());

    assertRoundTripSerializesEquallyFrom(
        "{\"access_token\":\"bearer-token\",\"token_type\":\"bearer\",\"scope\":\"a b\"}",
        OAuthTokenResponse.builder()
            .withToken("bearer-token")
            .withTokenType("bearer")
            .addScope("a")
            .addScope("b")
            .build());

    assertRoundTripSerializesEquallyFrom(
        "{\"access_token\":\"bearer-token\",\"token_type\":\"bearer\","
            + "\"issued_token_type\":\"urn:ietf:params:oauth:token-type:access_token\","
            + "\"expires_in\":600,\"scope\":\"a b\"}",
        OAuthTokenResponse.builder()
            .withToken("bearer-token")
            .withTokenType("bearer")
            .withIssuedTokenType("urn:ietf:params:oauth:token-type:access_token")
            .setExpirationInSeconds(600)
            .addScope("a")
            .addScope("b")
            .build());
  }