1/*
2 * Copyright (C) 2009 The Guava Authors
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.google.common.escape.testing;
18
19import static com.google.common.escape.Escapers.computeReplacement;
20
21import com.google.common.annotations.Beta;
22import com.google.common.annotations.GwtCompatible;
23import com.google.common.escape.CharEscaper;
24import com.google.common.escape.Escaper;
25import com.google.common.escape.UnicodeEscaper;
26
27import junit.framework.Assert;
28
29import java.io.IOException;
30
31/**
32 * Extra assert methods for testing Escaper implementations.
33 *
34 * @author David Beaumont
35 * @since 15.0
36 */
37@Beta
38@GwtCompatible
39public final class EscaperAsserts {
40  private EscaperAsserts() {}
41
42  /**
43   * Asserts that an escaper behaves correctly with respect to null inputs.
44   *
45   * @param escaper the non-null escaper to test
46   * @throws IOException
47   */
48  public static void assertBasic(Escaper escaper) throws IOException {
49    // Escapers operate on characters: no characters, no escaping.
50    Assert.assertEquals("", escaper.escape(""));
51    // Assert that escapers throw null pointer exceptions.
52    try {
53      escaper.escape((String) null);
54      Assert.fail("exception not thrown when escaping a null string");
55    } catch (NullPointerException e) {
56      // pass
57    }
58  }
59
60  /**
61   * Asserts that an escaper escapes the given character into the expected
62   * string.
63   *
64   * @param escaper the non-null escaper to test
65   * @param expected the expected output string
66   * @param c the character to escape
67   */
68  public static void assertEscaping(CharEscaper escaper, String expected,
69      char c) {
70
71    String escaped = computeReplacement(escaper, c);
72    Assert.assertNotNull(escaped);
73    Assert.assertEquals(expected, escaped);
74  }
75
76  /**
77   * Asserts that an escaper does not escape the given character.
78   *
79   * @param escaper the non-null escaper to test
80   * @param c the character to test
81   */
82  public static void assertUnescaped(CharEscaper escaper, char c) {
83    Assert.assertNull(computeReplacement(escaper, c));
84  }
85
86  /**
87   * Asserts that a Unicode escaper escapes the given code point into the
88   * expected string.
89   *
90   * @param escaper the non-null escaper to test
91   * @param expected the expected output string
92   * @param cp the Unicode code point to escape
93   */
94  public static void assertEscaping(UnicodeEscaper escaper, String expected,
95      int cp) {
96
97    String escaped = computeReplacement(escaper, cp);
98    Assert.assertNotNull(escaped);
99    Assert.assertEquals(expected, escaped);
100  }
101
102  /**
103   * Asserts that a Unicode escaper does not escape the given character.
104   *
105   * @param escaper the non-null escaper to test
106   * @param cp the Unicode code point to test
107   */
108  public static void assertUnescaped(UnicodeEscaper escaper, int cp) {
109    Assert.assertNull(computeReplacement(escaper, cp));
110  }
111
112  /**
113   * Asserts that a Unicode escaper escapes the given hi/lo surrogate pair into
114   * the expected string.
115   *
116   * @param escaper the non-null escaper to test
117   * @param expected the expected output string
118   * @param hi the high surrogate pair character
119   * @param lo the low surrogate pair character
120   */
121  public static void assertUnicodeEscaping(UnicodeEscaper escaper,
122      String expected, char hi, char lo) {
123
124    int cp = Character.toCodePoint(hi, lo);
125    String escaped = computeReplacement(escaper, cp);
126    Assert.assertNotNull(escaped);
127    Assert.assertEquals(expected, escaped);
128  }
129}
130