
net.javacrumbs.jsonunit.core.Configuration Maven / Gradle / Ivy
/**
* Copyright 2009-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.javacrumbs.jsonunit.core;
import static java.util.Arrays.asList;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import net.javacrumbs.jsonunit.core.ConfigurationWhen.ApplicableForPath;
import net.javacrumbs.jsonunit.core.ConfigurationWhen.PathsParam;
import net.javacrumbs.jsonunit.core.internal.DefaultNumberComparator;
import net.javacrumbs.jsonunit.core.internal.PathOption;
import net.javacrumbs.jsonunit.core.listener.DifferenceListener;
import org.hamcrest.Matcher;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* Comparison configuration. Immutable.
*/
public class Configuration {
private static final DifferenceListener DUMMY_LISTENER = (difference, context) -> {};
private static final String DEFAULT_IGNORE_PLACEHOLDER = "${json-unit.ignore}";
private static final String ALTERNATIVE_IGNORE_PLACEHOLDER = "#{json-unit.ignore}";
private static final DefaultNumberComparator DEFAULT_NUMBER_COMPARATOR = new DefaultNumberComparator();
private static final Configuration EMPTY_CONFIGURATION = new Configuration(
null,
Options.empty(),
DEFAULT_IGNORE_PLACEHOLDER,
Matchers.empty(),
Collections.emptySet(),
DUMMY_LISTENER,
Collections.emptyList(),
DEFAULT_NUMBER_COMPARATOR);
private final BigDecimal tolerance;
private final Options options;
private final String ignorePlaceholder;
private final Matchers matchers;
private final List pathOptions;
private final Set pathsToBeIgnored;
private final DifferenceListener differenceListener;
private final NumberComparator numberComparator;
private Configuration(
@Nullable BigDecimal tolerance,
Options options,
String ignorePlaceholder,
Matchers matchers,
Set pathsToBeIgnored,
DifferenceListener differenceListener,
List pathOptions,
NumberComparator numberComparator) {
this.tolerance = tolerance;
this.options = options;
this.ignorePlaceholder = ignorePlaceholder;
this.matchers = matchers;
this.pathsToBeIgnored = pathsToBeIgnored;
this.pathOptions = pathOptions;
this.differenceListener = differenceListener;
this.numberComparator = numberComparator;
}
/**
* Returns an empty configuration.
*/
@NotNull
public static Configuration empty() {
return EMPTY_CONFIGURATION;
}
/**
* Sets numerical comparison tolerance.
*
* @param tolerance
* @return
*/
@NotNull
public Configuration withTolerance(@Nullable BigDecimal tolerance) {
return new Configuration(
tolerance,
options,
ignorePlaceholder,
matchers,
pathsToBeIgnored,
differenceListener,
pathOptions,
numberComparator);
}
/**
* Sets numerical comparison tolerance.
*
* @param tolerance
* @return
*/
@NotNull
public Configuration withTolerance(double tolerance) {
return withTolerance(BigDecimal.valueOf(tolerance));
}
/**
* Adds comparison options.
*
* @param first
* @param next
* @return
*/
@NotNull
public Configuration when(@NotNull Option first, @NotNull Option... next) {
return withOptions(first, next);
}
/**
* Adds comparison options.
*
* @param first
* @param next
* @return
*/
@NotNull
public Configuration withOptions(@NotNull Option first, @NotNull Option... next) {
return new Configuration(
tolerance,
options.with(first, next),
ignorePlaceholder,
matchers,
pathsToBeIgnored,
differenceListener,
pathOptions,
numberComparator);
}
/**
* Adds comparison options.
*/
@NotNull
public Configuration withOptions(@NotNull Collection
© 2015 - 2025 Weber Informatics LLC | Privacy Policy