, new String[]{"with special chars", "o1/A{part1}B{part2}/{part3}", "o1/AWhatB%2410%2C000/~!%40%23%24%25%5E%26*()_%2B%3D-%60%5B%5D%7B%7D%7C%5C.", "part1", "What", "part2", "$10,000", "part3", "~!@#$%^&*()_+=-`[]{}|\\."}
, new String[]{"with values containing key names", "o1/A{part1}B{part2}/{part3}", "o1/Avalue_of_part1_is_%7Bpart2%7D_and_should_not_be_replacedBsame_for_part2%7Bpart3%7D/foo", "part1", "value_of_part1_is_{part2}_and_should_not_be_replaced", "part2", "same_for_part2{part3}", "part3", "foo"}
};
Document doc = DOMUtils.newDocument();
UrlReplacementTransformer encoder = new UrlReplacementTransformer();
for (String[] data : a) {
// convert into map
Map<String, Element> parts = new HashMap<String, Element>();
for (int k = 3; k < data.length; k = k + 2) {
Element element = doc.createElement(data[k]);
element.setTextContent(data[k + 1]);
parts.put(data[k], element);
}
assertEquals(data[0], data[2], encoder.transform(data[1], parts));
}
}