CATMEController.java

1
package edu.ucsb.cs156.frontiers.controllers;
2
3
import edu.ucsb.cs156.frontiers.entities.RosterStudent;
4
import edu.ucsb.cs156.frontiers.repositories.RosterStudentRepository;
5
import io.swagger.v3.oas.annotations.Operation;
6
import io.swagger.v3.oas.annotations.Parameter;
7
import io.swagger.v3.oas.annotations.tags.Tag;
8
import java.util.Arrays;
9
import java.util.Map;
10
import java.util.stream.Collectors;
11
import java.util.stream.StreamSupport;
12
import org.springframework.beans.factory.annotation.Autowired;
13
import org.springframework.security.access.prepost.PreAuthorize;
14
import org.springframework.web.bind.annotation.PostMapping;
15
import org.springframework.web.bind.annotation.RequestBody;
16
import org.springframework.web.bind.annotation.RequestMapping;
17
import org.springframework.web.bind.annotation.RequestParam;
18
import org.springframework.web.bind.annotation.RestController;
19
20
@Tag(name = "CATME")
21
@RequestMapping("/api/catme")
22
@RestController
23
public class CATMEController extends ApiController {
24
25
  @Autowired private RosterStudentRepository rosterStudentRepository;
26
27
  @Operation(summary = "Convert CATME roster names into course emails")
28
  @PreAuthorize("@CourseSecurity.hasManagePermissions(#root, #courseId)")
29
  @PostMapping(value = "/emails", consumes = "text/plain", produces = "text/plain")
30
  public String getCourseEmailsFromCatme(
31
      @Parameter(name = "courseId") @RequestParam Long courseId,
32
      @Parameter(name = "payload") @RequestBody(required = false) String payload) {
33
34 1 1. getCourseEmailsFromCatme : negated conditional → KILLED
    String normalizedPayload = payload == null ? "" : payload;
35 1 1. getCourseEmailsFromCatme : negated conditional → KILLED
    if (normalizedPayload.isBlank()) {
36
      return "";
37
    }
38
39
    Map<String, String> emailByName =
40
        StreamSupport.stream(rosterStudentRepository.findByCourseId(courseId).spliterator(), false)
41
            .filter(
42
                student ->
43 2 1. lambda$getCourseEmailsFromCatme$0 : replaced boolean return with true for edu/ucsb/cs156/frontiers/controllers/CATMEController::lambda$getCourseEmailsFromCatme$0 → KILLED
2. lambda$getCourseEmailsFromCatme$0 : negated conditional → KILLED
                    student.getFirstName() != null
44 1 1. lambda$getCourseEmailsFromCatme$0 : negated conditional → KILLED
                        && student.getLastName() != null
45 1 1. lambda$getCourseEmailsFromCatme$0 : negated conditional → KILLED
                        && student.getEmail() != null)
46
            .collect(
47
                Collectors.toMap(
48 1 1. lambda$getCourseEmailsFromCatme$1 : replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::lambda$getCourseEmailsFromCatme$1 → KILLED
                    student -> toLookupKey(student.getLastName(), student.getFirstName()),
49
                    RosterStudent::getEmail,
50 1 1. lambda$getCourseEmailsFromCatme$2 : replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::lambda$getCourseEmailsFromCatme$2 → KILLED
                    (first, second) -> first));
51
52
    // \\R handles all line endings and -1 preserves trailing blank lines.
53 1 1. getCourseEmailsFromCatme : replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::getCourseEmailsFromCatme → KILLED
    return Arrays.stream(normalizedPayload.split("\\R", -1))
54 1 1. lambda$getCourseEmailsFromCatme$3 : replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::lambda$getCourseEmailsFromCatme$3 → KILLED
        .map(line -> formatEmailResultLine(extractName(line), emailByName))
55
        .collect(Collectors.joining("\n"));
56
  }
57
58
  private static String extractName(String line) {
59
    String trimmed = normalizeSpaces(line);
60 1 1. extractName : negated conditional → KILLED
    if (trimmed.isBlank()) {
61
      return "";
62
    }
63
64
    // CATME lines look like: "LAST, FIRST MIDDLE <score> <timestamp>".
65
    int dateStart = findDateTokenStart(trimmed);
66 1 1. extractName : negated conditional → KILLED
    if (dateStart == -1) {
67 1 1. extractName : replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::extractName → KILLED
      return trimmed;
68
    }
69
70
    String beforeDate = trimmed.substring(0, dateStart).trim();
71
    int lastSpace = beforeDate.lastIndexOf(' ');
72 1 1. extractName : negated conditional → KILLED
    if (lastSpace == -1) {
73 1 1. extractName : replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::extractName → KILLED
      return beforeDate;
74
    }
75
76 1 1. extractName : Replaced integer addition with subtraction → KILLED
    String possibleScore = beforeDate.substring(lastSpace + 1);
77 1 1. extractName : negated conditional → KILLED
    if (possibleScore.chars().allMatch(Character::isDigit)) {
78 1 1. extractName : replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::extractName → KILLED
      return beforeDate.substring(0, lastSpace).trim();
79
    }
80 1 1. extractName : replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::extractName → KILLED
    return beforeDate;
81
  }
82
83
  private static String formatEmailResultLine(String name, Map<String, String> emailByName) {
84 1 1. formatEmailResultLine : negated conditional → KILLED
    if (name.isBlank()) {
85
      return "";
86
    }
87
    String email = emailByName.get(toLookupKey(name));
88 1 1. formatEmailResultLine : negated conditional → KILLED
    if (email != null) {
89 1 1. formatEmailResultLine : replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::formatEmailResultLine → KILLED
      return email;
90
    }
91 1 1. formatEmailResultLine : replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::formatEmailResultLine → KILLED
    return "# NO EMAIL FOUND FOR " + name;
92
  }
93
94
  private static String toLookupKey(String lastName, String firstName) {
95 1 1. toLookupKey : replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::toLookupKey → KILLED
    return toLookupKey(lastName + ", " + firstName);
96
  }
97
98
  private static String toLookupKey(String name) {
99 1 1. toLookupKey : replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::toLookupKey → KILLED
    return normalizeSpaces(name).toUpperCase().replaceFirst("\\s*,\\s*", ",");
100
  }
101
102
  private static String normalizeSpaces(String value) {
103 1 1. normalizeSpaces : replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::normalizeSpaces → KILLED
    return value.replaceAll("\\s+", " ").trim();
104
  }
105
106
  private static int findDateTokenStart(String value) {
107 3 1. findDateTokenStart : negated conditional → KILLED
2. findDateTokenStart : changed conditional boundary → KILLED
3. findDateTokenStart : Replaced integer addition with subtraction → KILLED
    for (int i = 0; i + 10 <= value.length(); i++) {
108 1 1. findDateTokenStart : negated conditional → KILLED
      if (isDateToken(value, i)) {
109 1 1. findDateTokenStart : replaced int return with 0 for edu/ucsb/cs156/frontiers/controllers/CATMEController::findDateTokenStart → KILLED
        return i;
110
      }
111
    }
112 1 1. findDateTokenStart : replaced int return with 0 for edu/ucsb/cs156/frontiers/controllers/CATMEController::findDateTokenStart → KILLED
    return -1;
113
  }
114
115
  private static boolean isDateToken(String value, int start) {
116 4 1. isDateToken : Replaced integer subtraction with addition → KILLED
2. isDateToken : negated conditional → KILLED
3. isDateToken : negated conditional → KILLED
4. isDateToken : changed conditional boundary → KILLED
    if (start > 0 && value.charAt(start - 1) != ' ') {
117 1 1. isDateToken : replaced boolean return with true for edu/ucsb/cs156/frontiers/controllers/CATMEController::isDateToken → KILLED
      return false;
118
    }
119
120 3 1. isDateToken : negated conditional → KILLED
2. isDateToken : replaced boolean return with true for edu/ucsb/cs156/frontiers/controllers/CATMEController::isDateToken → KILLED
3. isDateToken : Replaced integer addition with subtraction → KILLED
    return Character.isDigit(value.charAt(start))
121 2 1. isDateToken : Replaced integer addition with subtraction → KILLED
2. isDateToken : negated conditional → KILLED
        && Character.isDigit(value.charAt(start + 1))
122 2 1. isDateToken : Replaced integer addition with subtraction → KILLED
2. isDateToken : negated conditional → KILLED
        && Character.isDigit(value.charAt(start + 2))
123 2 1. isDateToken : Replaced integer addition with subtraction → KILLED
2. isDateToken : negated conditional → KILLED
        && Character.isDigit(value.charAt(start + 3))
124 2 1. isDateToken : Replaced integer addition with subtraction → KILLED
2. isDateToken : negated conditional → KILLED
        && value.charAt(start + 4) == '-'
125 2 1. isDateToken : negated conditional → KILLED
2. isDateToken : Replaced integer addition with subtraction → KILLED
        && Character.isDigit(value.charAt(start + 5))
126 2 1. isDateToken : negated conditional → KILLED
2. isDateToken : Replaced integer addition with subtraction → KILLED
        && Character.isDigit(value.charAt(start + 6))
127 2 1. isDateToken : Replaced integer addition with subtraction → KILLED
2. isDateToken : negated conditional → KILLED
        && value.charAt(start + 7) == '-'
128 2 1. isDateToken : Replaced integer addition with subtraction → KILLED
2. isDateToken : negated conditional → KILLED
        && Character.isDigit(value.charAt(start + 8))
129 1 1. isDateToken : negated conditional → KILLED
        && Character.isDigit(value.charAt(start + 9));
130
  }
131
}

Mutations

34

1.1
Location : getCourseEmailsFromCatme
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_directCall_nullPayload_returnsBlankAndSkipsRepoLookup()]
negated conditional → KILLED

35

1.1
Location : getCourseEmailsFromCatme
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_directCall_nullPayload_returnsBlankAndSkipsRepoLookup()]
negated conditional → KILLED

43

1.1
Location : lambda$getCourseEmailsFromCatme$0
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_ignoresRosterEntriesMissingRequiredFields()]
replaced boolean return with true for edu/ucsb/cs156/frontiers/controllers/CATMEController::lambda$getCourseEmailsFromCatme$0 → KILLED

2.2
Location : lambda$getCourseEmailsFromCatme$0
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_ignoresRosterEntriesMissingRequiredFields()]
negated conditional → KILLED

44

1.1
Location : lambda$getCourseEmailsFromCatme$0
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_ignoresRosterEntriesMissingRequiredFields()]
negated conditional → KILLED

45

1.1
Location : lambda$getCourseEmailsFromCatme$0
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_ignoresRosterEntriesMissingRequiredFields()]
negated conditional → KILLED

48

1.1
Location : lambda$getCourseEmailsFromCatme$1
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_ignoresRosterEntriesMissingRequiredFields()]
replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::lambda$getCourseEmailsFromCatme$1 → KILLED

50

1.1
Location : lambda$getCourseEmailsFromCatme$2
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::lambda$getCourseEmailsFromCatme$2 → KILLED

53

1.1
Location : getCourseEmailsFromCatme
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_doesNotTreatNonDigitDateTokenAsDate()]
replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::getCourseEmailsFromCatme → KILLED

54

1.1
Location : lambda$getCourseEmailsFromCatme$3
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_doesNotTreatNonDigitDateTokenAsDate()]
replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::lambda$getCourseEmailsFromCatme$3 → KILLED

60

1.1
Location : extractName
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_doesNotTreatNonDigitDateTokenAsDate()]
negated conditional → KILLED

66

1.1
Location : extractName
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_doesNotTreatNonDigitDateTokenAsDate()]
negated conditional → KILLED

67

1.1
Location : extractName
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_doesNotTreatNonDigitDateTokenAsDate()]
replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::extractName → KILLED

72

1.1
Location : extractName
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_matchesWhenDateTokenStartsAtLastPossibleIndex()]
negated conditional → KILLED

73

1.1
Location : extractName
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::extractName → KILLED

76

1.1
Location : extractName
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_matchesWhenDateTokenStartsAtLastPossibleIndex()]
Replaced integer addition with subtraction → KILLED

77

1.1
Location : extractName
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
negated conditional → KILLED

78

1.1
Location : extractName
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_matchesWhenDateTokenStartsAtLastPossibleIndex()]
replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::extractName → KILLED

80

1.1
Location : extractName
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::extractName → KILLED

84

1.1
Location : formatEmailResultLine
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_doesNotTreatNonDigitDateTokenAsDate()]
negated conditional → KILLED

88

1.1
Location : formatEmailResultLine
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_doesNotTreatNonDigitDateTokenAsDate()]
negated conditional → KILLED

89

1.1
Location : formatEmailResultLine
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_ignoresRosterEntriesMissingRequiredFields()]
replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::formatEmailResultLine → KILLED

91

1.1
Location : formatEmailResultLine
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_doesNotTreatNonDigitDateTokenAsDate()]
replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::formatEmailResultLine → KILLED

95

1.1
Location : toLookupKey
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_ignoresRosterEntriesMissingRequiredFields()]
replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::toLookupKey → KILLED

99

1.1
Location : toLookupKey
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::toLookupKey → KILLED

103

1.1
Location : normalizeSpaces
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_doesNotTreatNonDigitDateTokenAsDate()]
replaced return value with "" for edu/ucsb/cs156/frontiers/controllers/CATMEController::normalizeSpaces → KILLED

107

1.1
Location : findDateTokenStart
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
negated conditional → KILLED

2.2
Location : findDateTokenStart
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
changed conditional boundary → KILLED

3.3
Location : findDateTokenStart
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_doesNotTreatNonDigitDateTokenAsDate()]
Replaced integer addition with subtraction → KILLED

108

1.1
Location : findDateTokenStart
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_doesNotTreatNonDigitDateTokenAsDate()]
negated conditional → KILLED

109

1.1
Location : findDateTokenStart
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
replaced int return with 0 for edu/ucsb/cs156/frontiers/controllers/CATMEController::findDateTokenStart → KILLED

112

1.1
Location : findDateTokenStart
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_doesNotTreatNonDigitDateTokenAsDate()]
replaced int return with 0 for edu/ucsb/cs156/frontiers/controllers/CATMEController::findDateTokenStart → KILLED

116

1.1
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
Replaced integer subtraction with addition → KILLED

2.2
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_doesNotTreatNonDigitDateTokenAsDate()]
negated conditional → KILLED

3.3
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
negated conditional → KILLED

4.4
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_doesNotTreatNonDigitDateTokenAsDate()]
changed conditional boundary → KILLED

117

1.1
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_doesNotTreatNonDigitDateTokenAsDate()]
replaced boolean return with true for edu/ucsb/cs156/frontiers/controllers/CATMEController::isDateToken → KILLED

120

1.1
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
negated conditional → KILLED

2.2
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_doesNotTreatNonDigitDateTokenAsDate()]
replaced boolean return with true for edu/ucsb/cs156/frontiers/controllers/CATMEController::isDateToken → KILLED

3.3
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
Replaced integer addition with subtraction → KILLED

121

1.1
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
Replaced integer addition with subtraction → KILLED

2.2
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
negated conditional → KILLED

122

1.1
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
Replaced integer addition with subtraction → KILLED

2.2
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
negated conditional → KILLED

123

1.1
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
Replaced integer addition with subtraction → KILLED

2.2
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_doesNotTreatNonDigitDateTokenAsDate()]
negated conditional → KILLED

124

1.1
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
Replaced integer addition with subtraction → KILLED

2.2
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
negated conditional → KILLED

125

1.1
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
negated conditional → KILLED

2.2
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
Replaced integer addition with subtraction → KILLED

126

1.1
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
negated conditional → KILLED

2.2
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
Replaced integer addition with subtraction → KILLED

127

1.1
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
Replaced integer addition with subtraction → KILLED

2.2
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
negated conditional → KILLED

128

1.1
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
Replaced integer addition with subtraction → KILLED

2.2
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
negated conditional → KILLED

129

1.1
Location : isDateToken
Killed by : edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.controllers.CATMEControllerTests]/[method:catmeEmails_coversDateAndDuplicateEdgeCases()]
negated conditional → KILLED

Active mutators

Tests examined


Report generated by PIT 1.17.0