/** * Creates a new {@link Customization} instance for {@code path} and {@code comparator}. * * @param path the json path * @param comparator the comparator * @return a new Customization */ public static Customization customization(String path, ValueMatcher<Object> comparator) { return new Customization(path, comparator); }
private Customization getCustomization(String path) { for (Customization c : customizations) if (c.appliesToPath(path)) return c; return null; } }
private String buildPatternLevel1(String path) { String regex = "\\*\\*\\."; String replacement = "(?:.+\\.)?"; return buildPattern(path, regex, replacement, 1); }
private String buildPatternForLevel(int level, String part) { switch (level) { case 1: return buildPatternLevel2(part); case 2: return buildPatternLevel3(part); case 3: return Pattern.quote(part); default: return "Incorrect level."; } }
private String buildPattern(String path, String regex, String replacement, int level) { StringBuilder sb = new StringBuilder(); String[] parts = path.split(regex); for (int i = 0; i < parts.length; i++) { sb.append(buildPatternForLevel(level, parts[i])); if (i < parts.length - 1) { sb.append(replacement); } } return sb.toString(); }
private String buildPattern(String path) { return buildPatternLevel1(path); }
@Override public void compareValues(String prefix, Object expectedValue, Object actualValue, JSONCompareResult result) throws JSONException { Customization customization = getCustomization(prefix); if (customization != null) { try { if (!customization.matches(prefix, actualValue, expectedValue, result)) { result.fail(prefix, expectedValue, actualValue); } } catch (ValueMatcherException e) { result.fail(prefix, e); } } else { super.compareValues(prefix, expectedValue, actualValue, result); } }
private String buildPatternForLevel(int level, String part) { switch (level) { case 1: return buildPatternLevel2(part); case 2: return buildPatternLevel3(part); case 3: return Pattern.quote(part); default: return "Incorrect level."; } }
private String buildPattern(String path, String regex, String replacement, int level) { StringBuilder sb = new StringBuilder(); String[] parts = path.split(regex); for (int i = 0; i < parts.length; i++) { sb.append(buildPatternForLevel(level, parts[i])); if (i < parts.length - 1) { sb.append(replacement); } } return sb.toString(); }
private String buildPattern(String path) { return buildPatternLevel1(path); }
@Override public void compareValues(String prefix, Object expectedValue, Object actualValue, JSONCompareResult result) throws JSONException { Customization customization = getCustomization(prefix); if (customization != null) { try { if (!customization.matches(prefix, actualValue, expectedValue, result)) { result.fail(prefix, expectedValue, actualValue); } } catch (ValueMatcherException e) { result.fail(prefix, e); } } else { super.compareValues(prefix, expectedValue, actualValue, result); } }
public Customization(String path, ValueMatcher<Object> comparator) { assert path != null; assert comparator != null; this.path = Pattern.compile(buildPattern(path)); this.comparator = comparator; }
/** * Creates a new {@link Customization} instance for {@code path} and {@code comparator}. * * @param path the json path * @param comparator the comparator * @return a new Customization */ public static Customization customization(String path, ValueMatcher<Object> comparator) { return new Customization(path, comparator); }
private Customization getCustomization(String path) { for (Customization c : customizations) if (c.appliesToPath(path)) return c; return null; } }
private String buildPatternLevel2(String s) { if (s.isEmpty()) { return ""; } String regex = "\\*\\*"; String replacement = ".+"; return buildPattern(s, regex, replacement, 2); }
private String buildPatternLevel3(String s) { if (s.isEmpty()) { return ""; } String regex = "\\*"; String replacement = "[^\\.]+"; return buildPattern(s, regex, replacement, 3); }
private String buildPatternLevel1(String path) { String regex = "\\*\\*\\."; String replacement = "(?:.+\\.)?"; return buildPattern(path, regex, replacement, 1); }
private String buildPatternLevel2(String s) { if (s.isEmpty()) { return ""; } String regex = "\\*\\*"; String replacement = ".+"; return buildPattern(s, regex, replacement, 2); }
public Customization(String path, ValueMatcher<Object> comparator) { assert path != null; assert comparator != null; this.path = Pattern.compile(buildPattern(path)); this.comparator = comparator; }
private String buildPatternLevel3(String s) { if (s.isEmpty()) { return ""; } String regex = "\\*"; String replacement = "[^\\.]+"; return buildPattern(s, regex, replacement, 3); }