in src/main/java/org/jetbrains/jetCheck/Scenario.java [42:98]
private void performCommand(ImperativeCommand command, GenerationEnvironment data, String indent) {
command.performCommand(new ImperativeCommand.Environment() {
@Override
public void logMessage(@NotNull String message) {
if (data instanceof GenerativeDataStructure) {
((GenerativeDataStructure) data).ensureActiveStructure();
}
if (hasEmptyLog()) {
log.append(COMMANDS);
logConsumer.accept(COMMANDS);
}
String logEntry = indent + message;
log.append("\n").append(logEntry);
logConsumer.accept(logEntry);
}
@Override
public <T> T generateValue(@NotNull Generator<T> generator, @Nullable String logMessage) {
T value = safeGenerate(data, generator);
if (logMessage != null) {
logMessage(String.format(logMessage, value));
}
return value;
}
@Override
public void executeCommands(IntDistribution count, Generator<? extends ImperativeCommand> cmdGen) {
innerCommandLists(Generator.listsOf(count, innerCommands(cmdGen)));
}
@Override
public void executeCommands(Generator<? extends ImperativeCommand> cmdGen) {
innerCommandLists(Generator.nonEmptyLists(innerCommands(cmdGen)));
}
private void innerCommandLists(final Generator<List<Object>> listGen) {
data.generate(Generator.from(new EquivalentGenerator<List<Object>>() {
@Override
public List<Object> apply(GenerationEnvironment data) {
return listGen.getGeneratorFunction().apply(data);
}
}));
}
@NotNull
private Generator<Object> innerCommands(Generator<? extends ImperativeCommand> cmdGen) {
return Generator.from(new EquivalentGenerator<Object>() {
@Override
public Object apply(GenerationEnvironment cmdData) {
performCommand(safeGenerate(cmdData, cmdGen), cmdData, indent + " ");
return null;
}
});
}
});
}