-
Notifications
You must be signed in to change notification settings - Fork 21
/
DescartesEngineFactory.java
71 lines (62 loc) · 1.99 KB
/
DescartesEngineFactory.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package eu.stamp_project.descartes;
import eu.stamp_project.descartes.codemanipulation.MethodInfo;
import eu.stamp_project.descartes.operators.MutationOperator;
import java.util.Arrays;
import java.util.Collection;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import org.pitest.functional.prelude.Prelude;
import org.pitest.mutationtest.EngineArguments;
import org.pitest.mutationtest.MutationEngineFactory;
import org.pitest.mutationtest.engine.MutationEngine;
import org.pitest.util.Glob;
public class DescartesEngineFactory implements MutationEngineFactory {
@Override
public MutationEngine createEngine(final EngineArguments engineArguments) {
Collection<String> operators = engineArguments.mutators();
if (operators == null || operators.isEmpty()) {
operators = getDefaultOperators();
}
return createEngine(
globsToPredicate(engineArguments.excludedMethods()),
operators.stream().map(MutationOperator::fromIdentifier).collect(Collectors.toList()));
}
public MutationEngine createEngine(
final Predicate<MethodInfo> excludedMethods, final Collection<MutationOperator> operators) {
return new DescartesMutationEngine(excludedMethods, operators);
}
public static Collection<String> getDefaultOperators() {
return Arrays.asList(
"void",
"null",
"empty",
"true",
"false",
"0",
"1",
"(short)0",
"(short)1",
"(byte)0",
"(byte)1",
"0L",
"1L",
"0.0",
"1.0",
"0.0f",
"1.0f",
"'\\40'",
"'A'",
"\"\"",
"\"A\"");
}
public static Predicate<MethodInfo> globsToPredicate(final Collection<String> globs) {
Predicate<String> excludedNames = Prelude.or(Glob.toGlobPredicates(globs));
return (method) -> excludedNames.test(method.getName());
}
public String name() {
return "descartes";
}
public String description() {
return "Extreme mutation engine";
}
}