blob: 4c5f8ce1a71bd8f2ca2d35ec51ddfeafc2b0c9fc [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package io.v.impl.google.naming;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.util.Arrays;
import java.util.Collection;
import static com.google.common.truth.Truth.assertThat;
/**
* Unit tests for {@link NamingUtil#escape}, {@link NamingUtil#unescape},
* {@link NamingUtil#encodeAsNameElement} and {@link NamingUtil#decodeFromNameElement(String)}
*/
@RunWith(Parameterized.class)
public class NamingUtilEscapingTest {
private final String input;
private final String encodedInput;
@Parameterized.Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][]{
{"", ""},
{"/", "%2F"},
{"%", "%25"},
{"/The % rain in /% Spain", "%2FThe %25 rain in %2F%25 Spain"},
{"/%/%", "%2F%25%2F%25"},
{"ᚸӲ읔+קAل", "ᚸӲ읔+קAل"},
{"ᚸ/Ӳ%읔/ק%A+ل", "ᚸ%2FӲ%25읔%2Fק%25A+ل"},
});
}
public NamingUtilEscapingTest(String input, String encodedInput) {
this.input = input;
this.encodedInput = encodedInput;
}
@Test
public void testEncodingNameElements() {
assertThat(NamingUtil.encodeAsNameElement(input)).isEqualTo(encodedInput);
}
@Test
public void testDecodingNameElements() {
assertThat(NamingUtil.decodeFromNameElement(encodedInput)).isEqualTo(input);
}
@Test
public void testEscapingMultipleCharacters() {
String input = "ᚸ/Ӳ%읔/ק%A+ل";
// Escape multiple characters, also % in special should be ignored since
// % is always escaped regardless.
String escaped = NamingUtil.escape(input, new char[] {'/','읔','%'});
assertThat(escaped).doesNotContain("읔");
assertThat(escaped).contains("Ӳ");
assertThat(NamingUtil.unescape(escaped)).isEqualTo(input);
}
}