Package org.waveprotocol.wave.model.waveref

Source Code of org.waveprotocol.wave.model.waveref.WaverefEncoderTest

/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*/

package org.waveprotocol.wave.model.waveref;

import junit.framework.TestCase;

import org.waveprotocol.wave.model.id.WaveId;
import org.waveprotocol.wave.model.id.WaveletId;
import org.waveprotocol.wave.model.waveref.WaverefEncoder.PercentEncoderDecoder;

/**
* Unit tests for {@link WaverefEncoder}
*
* @author meade@google.com <Edwina Mead>
*/
public class WaverefEncoderTest extends TestCase {

  private static final String decodeDummyString = "decodedDummyString";
  private static final String pathEncodeDummyString = "pathEncodedDummyString";
  private static final String queryEncodeDummyString = "queryEncodedDummyString";

  /**
   * Inject dummy functions in place of the injectable PercentEncoderDecoder for
   * simplicity/minimising dependencies.
   */
  private static final WaverefEncoder dummyEncoder =
      new WaverefEncoder(new PercentEncoderDecoder() {
        @Override
        public String decode(String encodedValue) {
          return decodeDummyString;
        }

        @Override
        public String pathEncode(String decodedValue) {
          return pathEncodeDummyString;
        }

        @Override
        public String queryEncode(String decodedValue) {
          return queryEncodeDummyString;
        }
      });

  /**
   * An encoder that does no percent escaping.
   */
  private static final WaverefEncoder waverefEncoder = new WaverefEncoder(new PercentEncoderDecoder() {

    @Override
    public String decode(String encodedValue) {
      return encodedValue;
    }

    @Override
    public String pathEncode(String decodedValue) {
      return decodedValue;
    }

    @Override
    public String queryEncode(String decodedValue) {
      return decodedValue;
    }
  });

  /**
   * Tests that the injected pathEncode function gets called when
   * encodeToUriPathSegment is called with a string input.
   */
  public void testPathEncodeGetsCalledWithStringInput() {
    assertEquals(pathEncodeDummyString, dummyEncoder.encodeToUriPathSegment("testString"));
  }

  /**
   * Tests that the injected queryEncode function gets called when
   * encodeToUriQueryString is called with a string input.
   */
  public void testQueryEncodeGetsCalledWithStringInput() {
    assertEquals(queryEncodeDummyString, dummyEncoder.encodeToUriQueryString("testString"));
  }

  /**
   * Tests that the injected pathEncode function gets called when
   * encodeToUriPathSegment is called with a waveRef input, and checks that the
   * resulting path has the correct format of
   * waveDomain/waveId[/~/waveletId/[documentId]]
   */
  public void testPathEncodeGetsCalledWithWaveRefInput() {
    WaveId waveId = WaveId.of("www.example.com", "abcdEFGH");
    WaveletId waveletId = WaveletId.of("www.example.com", "conv+root");
    String documentId = "b+1234";

    WaveRef waveIdOnly = WaveRef.of(waveId);
    WaveRef waveIdPlusWaveletId = WaveRef.of(waveId, waveletId);
    WaveRef fullySpecified = WaveRef.of(waveId, waveletId, documentId);

    String expectedResultWaveIdOnly = pathEncodeDummyString + "/" + pathEncodeDummyString;
    assertEquals(expectedResultWaveIdOnly,
        dummyEncoder.encodeToUriPathSegment(waveIdOnly));

    String expectedResultWithWaveletId =
      expectedResultWaveIdOnly + "/~/" + pathEncodeDummyString;
    assertEquals(expectedResultWithWaveletId,
        dummyEncoder.encodeToUriPathSegment(waveIdPlusWaveletId));

    String expectedResultFullySpecified =
      expectedResultWithWaveletId + "/" + pathEncodeDummyString;
    assertEquals(expectedResultFullySpecified,
        dummyEncoder.encodeToUriPathSegment(fullySpecified));
  }

  /**
   * Tests that the injected queryEncode function gets called when
   * encodeToUriPathSegment is called with a waveRef input, and checks that the
   * resulting path has the correct format of
   * waveDomain/waveId[/~/waveletId/[documentId]]
   */
  public void testQueryEncodeGetsCalledWithWaveRefInput() {
    WaveId waveId = WaveId.of("www.example.com", "abcdEFGH");
    WaveletId waveletId = WaveletId.of("www.example.com", "conv+root");
    String documentId = "b+1234";

    WaveRef waveIdOnly = WaveRef.of(waveId);
    WaveRef waveIdPlusWaveletId = WaveRef.of(waveId, waveletId);
    WaveRef fullySpecified = WaveRef.of(waveId, waveletId, documentId);

    String expectedResultWaveIdOnly = queryEncodeDummyString + "/" + queryEncodeDummyString;
    assertEquals(expectedResultWaveIdOnly,
        dummyEncoder.encodeToUriQueryString(waveIdOnly));

    String expectedResultWithWaveletId = expectedResultWaveIdOnly + "/~/" + queryEncodeDummyString;
    assertEquals(expectedResultWithWaveletId,
        dummyEncoder.encodeToUriQueryString(waveIdPlusWaveletId));

    String expectedResultFullySpecified =
      expectedResultWithWaveletId + "/" + queryEncodeDummyString;
    assertEquals(expectedResultFullySpecified,
        dummyEncoder.encodeToUriQueryString(fullySpecified));
  }

  public void testDecodeCalledWithStringInput() throws InvalidWaveRefException {
    assertEquals(decodeDummyString, dummyEncoder.decode("testString"));
  }

  public void testDomainlessWaveRefIsInvalid() {
    assertInvalidWaveRef("/foo/~/conv+root/xyz");
  }

  public void testIdlessWaveRefIsInvalid() {
    assertInvalidWaveRef("foocorp.com//~/conv+root/xyz");
  }

  public void testDomainlessWaveletWaveRefIsInvalid() {
    assertInvalidWaveRef("foocorp.com/w+abc123//conv+root/xyz");
  }

  public void testIdlessWaveletWaveRefIsInvalid() {
    assertInvalidWaveRef("foocorp.com/w+abc123/~//xyz");
  }

  public void testDeserialisingValidWaveRefs() throws InvalidWaveRefException {
    WaveRef ref = waverefEncoder.decodeWaveRefFromPath("example.com/w+abc123/~/conv+root/b+983247");
    WaveRef expected = WaveRef.of(WaveId.of("example.com", "w+abc123"),
        WaveletId.of("example.com", "conv+root"),
    "b+983247");
    assertEquals(expected, ref);
  }

  /**
   * Helper for testing that decoding an invalid waveref results in an exception.
   */
  private void assertInvalidWaveRef(String refStr) {
    try {
      waverefEncoder.decodeWaveRefFromPath(refStr);
    } catch (InvalidWaveRefException ex) {
      // This is expected
    }
  }
}
TOP

Related Classes of org.waveprotocol.wave.model.waveref.WaverefEncoderTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.