package org.jenkinsci.tools.configcloner.handler;
import org.hamcrest.Description;
import org.hamcrest.TypeSafeDiagnosingMatcher;
import org.jenkinsci.tools.configcloner.CommandResponse;
import org.jenkinsci.tools.configcloner.CommandResponse.Accumulator;
import org.jenkinsci.tools.configcloner.ConfigDestination;
public class Helper {
public static ConfigDestination dest(final String jenkins, final String path) {
return new ConfigDestination(jenkins, path);
}
public static Mapping map(final String... args) {
return new Mapping(args);
}
public static class Mapping {
private final String[] from;
public Mapping(final String... args) {
from = args;
}
public Object[][] to(final ConfigDestination... to) {
assert from.length == to.length;
return new Object[][] {
from, to
};
}
}
public static abstract class CommandResponseMatcher extends TypeSafeDiagnosingMatcher<CommandResponse.Accumulator> {
private final String description;
public CommandResponseMatcher(String description) {
this.description = description;
}
public void describeTo(Description description) {
description.appendText(this.description);
}
@Override protected boolean matchesSafely(Accumulator item, Description desc) {
if (match(item, desc)) return true;
dump(item, desc);
return false;
}
abstract protected boolean match(Accumulator item, Description desc);
}
public static CommandResponseMatcher succeeded() {
return new CommandResponseMatcher("Command suceeded") {
@Override protected boolean match(Accumulator item, Description desc) {
return item.succeeded();
}
};
}
public static CommandResponseMatcher stdoutContains(final String expected) {
return new CommandResponseMatcher("Standard output should contain string " + expected) {
@Override protected boolean match(Accumulator item, Description desc) {
return item.stdout().contains(expected);
}
};
}
public static CommandResponseMatcher stderrContains(final String expected) {
return new CommandResponseMatcher("Error output should contain string " + expected) {
@Override protected boolean match(Accumulator item, Description desc) {
return item.stderr().contains(expected);
}
};
}
private static void dump(Accumulator item, Description mismatchDescription) {
mismatchDescription.appendText("return code: ").appendValue(item.returnCode()).appendText("\n");
mismatchDescription.appendText(item.stderr("err > %s"));
mismatchDescription.appendText(item.stdout("out > %s"));
}
}