package jnpf.elnService.formula;
|
|
import jnpf.elnEntity.formula.ElnTemplateFormulaBindingEntity;
|
import org.junit.Test;
|
|
import java.util.Arrays;
|
import java.util.Collections;
|
import java.util.LinkedHashMap;
|
|
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertTrue;
|
|
public class FormulaDependencyGraphTest {
|
|
@Test
|
public void returnsStableTopologicalOrderForFormulaChain() {
|
ElnTemplateFormulaBindingEntity c = binding("c", "result-c", map("p", "result-b"));
|
ElnTemplateFormulaBindingEntity a = binding("a", "result-a", Collections.emptyMap());
|
ElnTemplateFormulaBindingEntity b = binding("b", "result-b", map("p", "result-a"));
|
|
FormulaDependencyGraph.Result result = new FormulaDependencyGraph()
|
.validate(Arrays.asList(c, a, b));
|
|
assertTrue(result.isValid());
|
assertEquals(Arrays.asList("a", "b", "c"), result.getTopologicalOrder());
|
assertTrue(result.getCyclePath().isEmpty());
|
}
|
|
@Test
|
public void reportsCompleteCyclePathIncludingClosingNode() {
|
ElnTemplateFormulaBindingEntity a = binding("a", "result-a", map("p", "result-c"));
|
ElnTemplateFormulaBindingEntity b = binding("b", "result-b", map("p", "result-a"));
|
ElnTemplateFormulaBindingEntity c = binding("c", "result-c", map("p", "result-b"));
|
|
FormulaDependencyGraph.Result result = new FormulaDependencyGraph()
|
.validate(Arrays.asList(c, b, a));
|
|
assertFalse(result.isValid());
|
assertEquals(Arrays.asList("a", "b", "c", "a"), result.getCyclePath());
|
}
|
|
private static ElnTemplateFormulaBindingEntity binding(String id, String result,
|
java.util.Map<String, String> parameters) {
|
ElnTemplateFormulaBindingEntity item = new ElnTemplateFormulaBindingEntity();
|
item.setId(id);
|
item.setJieguoBangdingId(result);
|
item.setBangdingZhuangtai("ACTIVE");
|
item.setCanshuYingshe(parameters);
|
return item;
|
}
|
|
private static java.util.Map<String, String> map(String key, String value) {
|
java.util.Map<String, String> result = new LinkedHashMap<>();
|
result.put(key, value);
|
return result;
|
}
|
}
|