Package org.hibernate.validator.test.internal.engine.messageinterpolation

Source Code of org.hibernate.validator.test.internal.engine.messageinterpolation.TokenIteratorTest

/*
* Hibernate Validator, declare and validate application constraints
*
* License: Apache License, Version 2.0
* See the license.txt file in the root directory or <http://www.apache.org/licenses/LICENSE-2.0>.
*/
package org.hibernate.validator.test.internal.engine.messageinterpolation;

import org.hibernate.validator.internal.engine.messageinterpolation.InterpolationTermType;
import org.hibernate.validator.internal.engine.messageinterpolation.parser.TokenCollector;
import org.hibernate.validator.internal.engine.messageinterpolation.parser.TokenIterator;
import org.testng.annotations.Test;

import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;

/**
* Tests for {@code TokenIterator}.
*
* @author Hardy Ferentschik
*/
public class TokenIteratorTest {

  @Test(expectedExceptions = IllegalStateException.class)
  public void testGettingInterpolatedMessageWithoutCallingHasMoreInterpolationTerms() throws Exception {
    TokenCollector tokenCollector = new TokenCollector( "foo", InterpolationTermType.PARAMETER );
    TokenIterator tokenIterator = new TokenIterator( tokenCollector.getTokenList() );
    tokenIterator.getInterpolatedMessage();
  }

  @Test(expectedExceptions = IllegalStateException.class)
  public void testNextInterpolationTermWithoutCallingHasMoreInterpolationTerms() throws Exception {
    TokenCollector tokenCollector = new TokenCollector( "foo", InterpolationTermType.PARAMETER );
    TokenIterator tokenIterator = new TokenIterator( tokenCollector.getTokenList() );
    tokenIterator.nextInterpolationTerm();
  }

  @Test
  public void testMessageDescriptorWithoutParameter() throws Exception {
    String message = "this message has no parameter";
    TokenCollector tokenCollector = new TokenCollector( message, InterpolationTermType.PARAMETER );
    TokenIterator tokenIterator = new TokenIterator( tokenCollector.getTokenList() );

    assertFalse( tokenIterator.hasMoreInterpolationTerms(), "There should be no interpolation terms" );
    assertEquals( tokenIterator.getInterpolatedMessage(), message, "The message should be unchanged" );
  }

  @Test
  public void testParameterTermHasPrecedenceForParameterParser() throws Exception {
    TokenCollector tokenCollector = new TokenCollector( "${foo}", InterpolationTermType.PARAMETER );
    TokenIterator tokenIterator = new TokenIterator( tokenCollector.getTokenList() );
    assertSingleReplacement( tokenIterator, "{foo}", "bar", "$bar" );
  }

  @Test
  public void testFindParameterTerms() throws Exception {
    String message = "{foo} {bar}";
    TokenCollector tokenCollector = new TokenCollector( message, InterpolationTermType.PARAMETER );
    TokenIterator tokenIterator = new TokenIterator( tokenCollector.getTokenList() );

    assertTrue( tokenIterator.hasMoreInterpolationTerms(), "There should be a term" );
    assertEquals( tokenIterator.nextInterpolationTerm(), "{foo}", "{foo} should be the first term" );

    assertTrue( tokenIterator.hasMoreInterpolationTerms(), "There should be a term" );
    assertEquals( tokenIterator.nextInterpolationTerm(), "{bar}", "{bar} should be the second term" );

    assertFalse( tokenIterator.hasMoreInterpolationTerms(), "There should be no more interpolation terms" );
  }

  @Test
  public void testEscapedMetaCharactersStayUntouched() throws Exception {
    String message = "\\} \\{ \\$ \\\\";
    TokenCollector tokenCollector = new TokenCollector( message, InterpolationTermType.PARAMETER );
    TokenIterator tokenIterator = new TokenIterator( tokenCollector.getTokenList() );

    assertFalse( tokenIterator.hasMoreInterpolationTerms(), "There should be no term" );
    assertEquals(
        tokenIterator.getInterpolatedMessage(),
        message,
        "Message should not change since all meta characters are escaped"
    );
  }

  @Test
  public void testUnEscapedExpressionLanguageLiteral() throws Exception {
    TokenCollector tokenCollector = new TokenCollector(
        "The price is US$ {value}",
        InterpolationTermType.PARAMETER
    );
    TokenIterator tokenIterator = new TokenIterator( tokenCollector.getTokenList() );

    assertSingleReplacement( tokenIterator, "{value}", "100", "The price is US$ 100" );
  }

  @Test
  public void testEscapedExpressionLanguageLiteralParameterParsing() throws Exception {
    TokenCollector tokenCollector = new TokenCollector(
        "The price is US\\$ {value}",
        InterpolationTermType.PARAMETER
    );
    TokenIterator tokenIterator = new TokenIterator( tokenCollector.getTokenList() );

    assertSingleReplacement( tokenIterator, "{value}", "100", "The price is US\\$ 100" );
  }

  @Test
  public void testExpressionLanguageLiteralParameterParsing() throws Exception {
    TokenCollector tokenCollector = new TokenCollector(
        "The price is US$ {value}",
        InterpolationTermType.PARAMETER
    );
    TokenIterator tokenIterator = new TokenIterator( tokenCollector.getTokenList() );

    assertSingleReplacement( tokenIterator, "{value}", "100", "The price is US$ 100" );
  }

  @Test
  public void testExpressionLanguageLiteralELParsing() throws Exception {
    String message = "The price is US$ {value}";
    TokenCollector tokenCollector = new TokenCollector( message, InterpolationTermType.EL );
    TokenIterator tokenIterator = new TokenIterator( tokenCollector.getTokenList() );

    assertFalse( tokenIterator.hasMoreInterpolationTerms(), "There should be no interpolation terms" );
    assertEquals( tokenIterator.getInterpolatedMessage(), message, "The message should be unchanged" );
  }

  @Test
  public void testReplaceParameter() throws Exception {
    TokenCollector tokenCollector = new TokenCollector( "{foo}", InterpolationTermType.PARAMETER );
    TokenIterator tokenIterator = new TokenIterator( tokenCollector.getTokenList() );

    assertSingleReplacement( tokenIterator, "{foo}", "bar", "bar" );
  }

  @Test
  public void testReplaceParameterInline() throws Exception {
    TokenCollector tokenCollector = new TokenCollector( "a{var}c", InterpolationTermType.PARAMETER );
    TokenIterator tokenIterator = new TokenIterator( tokenCollector.getTokenList() );

    assertSingleReplacement( tokenIterator, "{var}", "b", "abc" );
  }

  @Test
  public void testReplaceParameterInEscapedBraces() throws Exception {
    TokenCollector tokenCollector = new TokenCollector( "\\{{var}\\}", InterpolationTermType.PARAMETER );
    TokenIterator tokenIterator = new TokenIterator( tokenCollector.getTokenList() );

    assertSingleReplacement( tokenIterator, "{var}", "foo", "\\{foo\\}" );
  }

  @Test
  public void testELParameter() throws Exception {
    TokenCollector tokenCollector = new TokenCollector( "${foo}", InterpolationTermType.EL );
    TokenIterator tokenIterator = new TokenIterator( tokenCollector.getTokenList() );

    assertSingleReplacement( tokenIterator, "${foo}", "bar", "bar" );
  }

  private void assertSingleReplacement(TokenIterator tokenIterator,
      String term,
      String termReplacement,
      String interpolatedMessage)
      throws Exception {
    assertTrue( tokenIterator.hasMoreInterpolationTerms(), "There should be a term" );

    String actualTerm = tokenIterator.nextInterpolationTerm();
    assertEquals( actualTerm, term, "Wrong term" );
    tokenIterator.replaceCurrentInterpolationTerm( termReplacement );

    assertFalse( tokenIterator.hasMoreInterpolationTerms(), "There should be no more term" );
    assertEquals(
        tokenIterator.getInterpolatedMessage(),
        interpolatedMessage,
        "Term did not get properly replaced"
    );
  }
}
TOP

Related Classes of org.hibernate.validator.test.internal.engine.messageinterpolation.TokenIteratorTest

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.