ActionBruteForce.java

1
/*******************************************************************************
2
 * Copyhacked (H) 2012-2025.
3
 * This program and the accompanying materials
4
 * are made available under no term at all, use it like
5
 * you want, but share and discuss it
6
 * every time possible with every body.
7
 *
8
 * Contributors:
9
 *      ron190 at ymail dot com - initial implementation
10
 *******************************************************************************/
11
package com.jsql.view.swing.manager.util;
12
13
import com.jsql.util.I18nUtil;
14
import com.jsql.util.LogLevelUtil;
15
import com.jsql.util.ThreadUtil;
16
import com.jsql.util.bruter.Bruter;
17
import com.jsql.util.bruter.HashBruter;
18
import com.jsql.view.swing.manager.ManagerBruteForce;
19
import com.jsql.view.swing.util.I18nViewUtil;
20
import org.apache.commons.lang3.StringUtils;
21
import org.apache.logging.log4j.LogManager;
22
import org.apache.logging.log4j.Logger;
23
24
import javax.swing.*;
25
import javax.swing.text.BadLocationException;
26
import java.awt.event.ActionEvent;
27
import java.awt.event.ActionListener;
28
import java.util.Locale;
29
30
/**
31
 * Run a brute force attack.
32
 */
33
public class ActionBruteForce implements ActionListener, Runnable {
34
    
35
    private static final Logger LOGGER = LogManager.getRootLogger();
36
37
    private final ManagerBruteForce bruteForceManager;
38
    
39
    private boolean isStopped = false;
40
    
41
    public ActionBruteForce(ManagerBruteForce bruteForceManager) {
42
        this.bruteForceManager = bruteForceManager;
43
    }
44
45
    @Override
46
    public void actionPerformed(ActionEvent actionEvent) {
47 1 1. actionPerformed : negated conditional → NO_COVERAGE
        if (this.bruteForceManager.getRun().getState() == StateButton.STOPPABLE) {
48 1 1. actionPerformed : removed call to com/jsql/view/swing/manager/util/JButtonStateful::setEnabled → NO_COVERAGE
            this.bruteForceManager.getRun().setEnabled(false);
49
            this.isStopped = true;
50
        } else {
51 1 1. actionPerformed : negated conditional → NO_COVERAGE
            if (StringUtils.isEmpty(this.bruteForceManager.getHash().getText())) {
52
                LOGGER.log(LogLevelUtil.CONSOLE_ERROR, () -> I18nUtil.valueByKey("BRUTEFORCE_EMPTY_HASH"));
53
                return;
54 1 1. actionPerformed : negated conditional → NO_COVERAGE
            } else if (this.isRangeNotSelected()) {
55
                LOGGER.log(LogLevelUtil.CONSOLE_ERROR, () -> I18nUtil.valueByKey("BRUTEFORCE_CHARACTER_RANGE"));
56
                return;
57 1 1. actionPerformed : negated conditional → NO_COVERAGE
            } else if (this.isLengthNotValid()) {
58
                LOGGER.log(LogLevelUtil.CONSOLE_ERROR, () -> I18nUtil.valueByKey("BRUTEFORCE_INCORRECT_MIN_MAX_LENGTH"));
59
                return;
60
            }
61 1 1. actionPerformed : removed call to java/lang/Thread::start → NO_COVERAGE
            new Thread(this, "ThreadDisplayBruteForce").start();
62
        }
63
    }
64
65
    private boolean isLengthNotValid() {
66 1 1. isLengthNotValid : replaced boolean return with true for com/jsql/view/swing/manager/util/ActionBruteForce::isLengthNotValid → NO_COVERAGE
        return Integer.parseInt(this.bruteForceManager.getMaximumLength().getValue().toString())
67 2 1. isLengthNotValid : changed conditional boundary → NO_COVERAGE
2. isLengthNotValid : negated conditional → NO_COVERAGE
            < Integer.parseInt(this.bruteForceManager.getMinimumLength().getValue().toString());
68
    }
69
70
    private boolean isRangeNotSelected() {
71 2 1. isRangeNotSelected : replaced boolean return with true for com/jsql/view/swing/manager/util/ActionBruteForce::isRangeNotSelected → NO_COVERAGE
2. isRangeNotSelected : negated conditional → NO_COVERAGE
        return !this.bruteForceManager.getSpecialCharacters().isSelected()
72 1 1. isRangeNotSelected : negated conditional → NO_COVERAGE
            && !this.bruteForceManager.getUpperCaseCharacters().isSelected()
73 1 1. isRangeNotSelected : negated conditional → NO_COVERAGE
            && !this.bruteForceManager.getLowerCaseCharacters().isSelected()
74 1 1. isRangeNotSelected : negated conditional → NO_COVERAGE
            && !this.bruteForceManager.getNumericCharacters().isSelected();
75
    }
76
77
    @Override
78
    public void run() {
79
        // Reset the panel
80 1 1. run : removed call to com/jsql/view/swing/manager/util/JButtonStateful::setText → NO_COVERAGE
        this.bruteForceManager.getRun().setText(I18nViewUtil.valueByKey("BRUTEFORCE_STOP"));
81 1 1. run : removed call to com/jsql/view/swing/manager/util/JButtonStateful::setState → NO_COVERAGE
        this.bruteForceManager.getRun().setState(StateButton.STOPPABLE);
82 1 1. run : removed call to com/jsql/view/swing/manager/ManagerBruteForce::showLoader → NO_COVERAGE
        this.bruteForceManager.showLoader(true);
83 1 1. run : removed call to javax/swing/JTextPane::setText → NO_COVERAGE
        this.bruteForceManager.getResult().setText(null);
84
85
        final var hashBruter = new HashBruter();
86 1 1. run : removed call to com/jsql/view/swing/manager/util/ActionBruteForce::initBruter → NO_COVERAGE
        this.initBruter(hashBruter);
87
88
        // Begin the reverse hashing process
89 1 1. run : removed call to java/lang/Thread::start → NO_COVERAGE
        new Thread(hashBruter::tryBruteForce, "ThreadRunBruteForce").start();
90 3 1. run : negated conditional → NO_COVERAGE
2. run : negated conditional → NO_COVERAGE
3. run : negated conditional → NO_COVERAGE
        while (!hashBruter.isDone() && !hashBruter.isFound() && !this.isStopped) {
91
            
92 1 1. run : removed call to com/jsql/util/bruter/HashBruter::setEndtime → NO_COVERAGE
            hashBruter.setEndtime(System.nanoTime());
93 1 1. run : removed call to com/jsql/util/ThreadUtil::sleep → NO_COVERAGE
            ThreadUtil.sleep(1000);  // delay to update result panel
94
            
95
            int selectionStart = this.bruteForceManager.getResult().getSelectionStart();
96
            int selectionEnd = this.bruteForceManager.getResult().getSelectionEnd();
97
            
98 1 1. run : removed call to com/jsql/view/swing/manager/util/ActionBruteForce::updateResult → NO_COVERAGE
            this.updateResult(hashBruter);
99
100 1 1. run : removed call to javax/swing/JTextPane::setSelectionStart → NO_COVERAGE
            this.bruteForceManager.getResult().setSelectionStart(selectionStart);
101 1 1. run : removed call to javax/swing/JTextPane::setSelectionEnd → NO_COVERAGE
            this.bruteForceManager.getResult().setSelectionEnd(selectionEnd);
102
            
103 1 1. run : negated conditional → NO_COVERAGE
            if (this.isStopped) {
104 1 1. run : removed call to com/jsql/util/bruter/HashBruter::setIsDone → NO_COVERAGE
                hashBruter.setIsDone(true);
105 1 1. run : removed call to com/jsql/util/bruter/HashBruter::setFound → NO_COVERAGE
                hashBruter.setFound(true);
106
                break;
107
            }
108
        }
109
110 1 1. run : removed call to com/jsql/view/swing/manager/util/ActionBruteForce::displayResult → NO_COVERAGE
        this.displayResult(hashBruter);
111
112
        this.isStopped = false;
113 1 1. run : removed call to com/jsql/view/swing/manager/ManagerBruteForce::showLoader → NO_COVERAGE
        this.bruteForceManager.showLoader(false);
114 1 1. run : removed call to com/jsql/view/swing/manager/util/JButtonStateful::setText → NO_COVERAGE
        this.bruteForceManager.getRun().setText(I18nViewUtil.valueByKey("BRUTEFORCE_RUN_BUTTON_LABEL"));
115 1 1. run : removed call to com/jsql/view/swing/manager/util/JButtonStateful::setEnabled → NO_COVERAGE
        this.bruteForceManager.getRun().setEnabled(true);
116 1 1. run : removed call to com/jsql/view/swing/manager/util/JButtonStateful::setState → NO_COVERAGE
        this.bruteForceManager.getRun().setState(StateButton.STARTABLE);
117
    }
118
119
    private void updateResult(final HashBruter hashBruter) {
120 1 1. updateResult : removed call to javax/swing/JTextPane::setText → NO_COVERAGE
        this.bruteForceManager.getResult().setText(I18nUtil.valueByKey("BRUTEFORCE_CURRENT_STRING") + ": " + hashBruter.getPassword());
121 1 1. updateResult : removed call to com/jsql/view/swing/manager/util/ActionBruteForce::append → NO_COVERAGE
        this.append(I18nUtil.valueByKey("BRUTEFORCE_CURRENT_HASH") + ": " + hashBruter.getGeneratedHash() + "\n");
122 1 1. updateResult : removed call to com/jsql/view/swing/manager/util/ActionBruteForce::append → NO_COVERAGE
        this.append(I18nUtil.valueByKey("BRUTEFORCE_POSSIBILITIES") + ": " + hashBruter.getNumberOfPossibilities());
123 1 1. updateResult : removed call to com/jsql/view/swing/manager/util/ActionBruteForce::append → NO_COVERAGE
        this.append(I18nUtil.valueByKey("BRUTEFORCE_CHECKED_HASHES") + ": " + hashBruter.getCounter());
124 1 1. updateResult : removed call to com/jsql/view/swing/manager/util/ActionBruteForce::append → NO_COVERAGE
        this.append(I18nUtil.valueByKey("BRUTEFORCE_ESTIMATED") + ": " + hashBruter.getRemainder());
125 1 1. updateResult : removed call to com/jsql/view/swing/manager/util/ActionBruteForce::append → NO_COVERAGE
        this.append(I18nUtil.valueByKey("BRUTEFORCE_PERSECOND") + ": " + hashBruter.getPerSecond() + "\n");
126 1 1. updateResult : removed call to com/jsql/view/swing/manager/util/ActionBruteForce::append → NO_COVERAGE
        this.append(hashBruter.calculateTimeElapsed());
127
128 1 1. updateResult : negated conditional → NO_COVERAGE
        if (hashBruter.getPerSecond() != 0) {
129 1 1. updateResult : Replaced float division with multiplication → NO_COVERAGE
            float remainingDuration = Float.parseFloat(Long.toString(hashBruter.getRemainder())) / hashBruter.getPerSecond();
130 1 1. updateResult : removed call to com/jsql/view/swing/manager/util/ActionBruteForce::append → NO_COVERAGE
            this.append(String.format(
131
                Bruter.PATTERN_PERIOD,
132 3 1. updateResult : Replaced float division with multiplication → NO_COVERAGE
2. updateResult : Replaced float division with multiplication → NO_COVERAGE
3. updateResult : Replaced float division with multiplication → NO_COVERAGE
                I18nUtil.valueByKey("BRUTEFORCE_TRAVERSING_REMAINING"),
133 3 1. updateResult : Replaced float division with multiplication → NO_COVERAGE
2. updateResult : Replaced float modulus with multiplication → NO_COVERAGE
3. updateResult : Replaced float division with multiplication → NO_COVERAGE
                Math.round(Math.floor(remainingDuration / 60f / 60.0f / 24f)), I18nUtil.valueByKey("BRUTEFORCE_DAYS"),
134 2 1. updateResult : Replaced float division with multiplication → NO_COVERAGE
2. updateResult : Replaced float modulus with multiplication → NO_COVERAGE
                Math.round(Math.floor(remainingDuration / 60f / 60f % 24)), I18nUtil.valueByKey("BRUTEFORCE_HOURS"),
135 1 1. updateResult : Replaced float modulus with multiplication → NO_COVERAGE
                Math.round(Math.floor(remainingDuration / 60f % 60)), I18nUtil.valueByKey("BRUTEFORCE_MINUTES"),
136
                Math.round(remainingDuration % 60), I18nUtil.valueByKey("BRUTEFORCE_SECONDS")
137
            ));
138
        }
139
140 1 1. updateResult : removed call to com/jsql/view/swing/manager/util/ActionBruteForce::append → NO_COVERAGE
        this.append(String.format(
141
            "%s: %s%%",
142
            I18nUtil.valueByKey("BRUTEFORCE_PERCENT_DONE"),
143 2 1. updateResult : Replaced float multiplication with division → NO_COVERAGE
2. updateResult : Replaced float division with multiplication → NO_COVERAGE
            100 * (float) hashBruter.getCounter() / hashBruter.getNumberOfPossibilities()
144
        ));
145
    }
146
147
    private void initBruter(final HashBruter hashBruter) {
148 1 1. initBruter : removed call to com/jsql/util/bruter/HashBruter::setMinLength → NO_COVERAGE
        hashBruter.setMinLength(Integer.parseInt(this.bruteForceManager.getMinimumLength().getValue().toString()));
149 1 1. initBruter : removed call to com/jsql/util/bruter/HashBruter::setMaxLength → NO_COVERAGE
        hashBruter.setMaxLength(Integer.parseInt(this.bruteForceManager.getMaximumLength().getValue().toString()));
150
151 1 1. initBruter : negated conditional → NO_COVERAGE
        if (this.bruteForceManager.getSpecialCharacters().isSelected()) {
152 1 1. initBruter : removed call to com/jsql/util/bruter/HashBruter::addSpecialCharacters → NO_COVERAGE
            hashBruter.addSpecialCharacters();
153
        }
154 1 1. initBruter : negated conditional → NO_COVERAGE
        if (this.bruteForceManager.getUpperCaseCharacters().isSelected()) {
155 1 1. initBruter : removed call to com/jsql/util/bruter/HashBruter::addUpperCaseLetters → NO_COVERAGE
            hashBruter.addUpperCaseLetters();
156
        }
157 1 1. initBruter : negated conditional → NO_COVERAGE
        if (this.bruteForceManager.getLowerCaseCharacters().isSelected()) {
158 1 1. initBruter : removed call to com/jsql/util/bruter/HashBruter::addLowerCaseLetters → NO_COVERAGE
            hashBruter.addLowerCaseLetters();
159
        }
160 1 1. initBruter : negated conditional → NO_COVERAGE
        if (this.bruteForceManager.getNumericCharacters().isSelected()) {
161 1 1. initBruter : removed call to com/jsql/util/bruter/HashBruter::addDigits → NO_COVERAGE
            hashBruter.addDigits();
162
        }
163 1 1. initBruter : negated conditional → NO_COVERAGE
        if (StringUtils.isNotEmpty(this.bruteForceManager.getExclude().getText())) {
164 1 1. initBruter : removed call to com/jsql/util/bruter/HashBruter::excludeChars → NO_COVERAGE
            hashBruter.excludeChars(this.bruteForceManager.getExclude().getText());
165
        }
166
167 1 1. initBruter : removed call to com/jsql/util/bruter/HashBruter::setType → NO_COVERAGE
        hashBruter.setType((String) this.bruteForceManager.getHashTypes().getSelectedItem());
168 1 1. initBruter : removed call to com/jsql/util/bruter/HashBruter::setHash → NO_COVERAGE
        hashBruter.setHash(
169
            this.bruteForceManager.getHash().getText()
170
            .toUpperCase(Locale.ROOT)
171
            .replaceAll("[^a-zA-Z0-9]", StringUtils.EMPTY)
172
            .trim()
173
        );
174
    }
175
176
    private void displayResult(final HashBruter hashBruter) {
177
        // Display the result
178 1 1. displayResult : negated conditional → NO_COVERAGE
        if (this.isStopped) {
179
            LOGGER.log(LogLevelUtil.CONSOLE_ERROR, () -> I18nUtil.valueByKey("BRUTEFORCE_ABORTED"));
180 1 1. displayResult : negated conditional → NO_COVERAGE
        } else if (hashBruter.isFound()) {
181 1 1. displayResult : removed call to com/jsql/view/swing/manager/util/ActionBruteForce::append → NO_COVERAGE
            this.append(String.format(
182
                "%n%s:%n%s => %s",
183
                I18nUtil.valueByKey("BRUTEFORCE_FOUND_HASH"),
184
                hashBruter.getGeneratedHash(),
185
                hashBruter.getPassword()
186
            ));
187
            LOGGER.log(
188
                LogLevelUtil.CONSOLE_SUCCESS,
189
                "{}: {} => {}",
190 1 1. lambda$displayResult$4 : replaced return value with null for com/jsql/view/swing/manager/util/ActionBruteForce::lambda$displayResult$4 → NO_COVERAGE
                () -> I18nUtil.valueByKey("BRUTEFORCE_FOUND_HASH"),
191
                hashBruter::getGeneratedHash,
192
                hashBruter::getPassword
193
            );
194 1 1. displayResult : negated conditional → NO_COVERAGE
        } else if (hashBruter.isDone()) {
195 1 1. displayResult : removed call to com/jsql/view/swing/manager/util/ActionBruteForce::append → NO_COVERAGE
            this.append("\n"+ I18nUtil.valueByKey("BRUTEFORCE_HASH_NOT_FOUND"));
196
            LOGGER.log(LogLevelUtil.CONSOLE_ERROR, () -> I18nUtil.valueByKey("BRUTEFORCE_HASH_NOT_FOUND"));
197
        }
198
    }
199
200
    private void append(String text) {
201
        try {
202
            JTextPane textPane = this.bruteForceManager.getResult();
203 1 1. append : removed call to javax/swing/text/Document::insertString → NO_COVERAGE
            textPane.getDocument().insertString(
204
                textPane.getDocument().getLength(),
205 1 1. append : negated conditional → NO_COVERAGE
                (textPane.getDocument().getLength() == 0 ? StringUtils.EMPTY : "\n") + text,
206
                null
207
            );
208
        } catch (BadLocationException e) {
209
            LOGGER.log(LogLevelUtil.CONSOLE_JAVA, e, e);
210
        }
211
    }
212
}

Mutations

47

1.1
Location : actionPerformed
Killed by : none
negated conditional → NO_COVERAGE

48

1.1
Location : actionPerformed
Killed by : none
removed call to com/jsql/view/swing/manager/util/JButtonStateful::setEnabled → NO_COVERAGE

51

1.1
Location : actionPerformed
Killed by : none
negated conditional → NO_COVERAGE

54

1.1
Location : actionPerformed
Killed by : none
negated conditional → NO_COVERAGE

57

1.1
Location : actionPerformed
Killed by : none
negated conditional → NO_COVERAGE

61

1.1
Location : actionPerformed
Killed by : none
removed call to java/lang/Thread::start → NO_COVERAGE

66

1.1
Location : isLengthNotValid
Killed by : none
replaced boolean return with true for com/jsql/view/swing/manager/util/ActionBruteForce::isLengthNotValid → NO_COVERAGE

67

1.1
Location : isLengthNotValid
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : isLengthNotValid
Killed by : none
negated conditional → NO_COVERAGE

71

1.1
Location : isRangeNotSelected
Killed by : none
replaced boolean return with true for com/jsql/view/swing/manager/util/ActionBruteForce::isRangeNotSelected → NO_COVERAGE

2.2
Location : isRangeNotSelected
Killed by : none
negated conditional → NO_COVERAGE

72

1.1
Location : isRangeNotSelected
Killed by : none
negated conditional → NO_COVERAGE

73

1.1
Location : isRangeNotSelected
Killed by : none
negated conditional → NO_COVERAGE

74

1.1
Location : isRangeNotSelected
Killed by : none
negated conditional → NO_COVERAGE

80

1.1
Location : run
Killed by : none
removed call to com/jsql/view/swing/manager/util/JButtonStateful::setText → NO_COVERAGE

81

1.1
Location : run
Killed by : none
removed call to com/jsql/view/swing/manager/util/JButtonStateful::setState → NO_COVERAGE

82

1.1
Location : run
Killed by : none
removed call to com/jsql/view/swing/manager/ManagerBruteForce::showLoader → NO_COVERAGE

83

1.1
Location : run
Killed by : none
removed call to javax/swing/JTextPane::setText → NO_COVERAGE

86

1.1
Location : run
Killed by : none
removed call to com/jsql/view/swing/manager/util/ActionBruteForce::initBruter → NO_COVERAGE

89

1.1
Location : run
Killed by : none
removed call to java/lang/Thread::start → NO_COVERAGE

90

1.1
Location : run
Killed by : none
negated conditional → NO_COVERAGE

2.2
Location : run
Killed by : none
negated conditional → NO_COVERAGE

3.3
Location : run
Killed by : none
negated conditional → NO_COVERAGE

92

1.1
Location : run
Killed by : none
removed call to com/jsql/util/bruter/HashBruter::setEndtime → NO_COVERAGE

93

1.1
Location : run
Killed by : none
removed call to com/jsql/util/ThreadUtil::sleep → NO_COVERAGE

98

1.1
Location : run
Killed by : none
removed call to com/jsql/view/swing/manager/util/ActionBruteForce::updateResult → NO_COVERAGE

100

1.1
Location : run
Killed by : none
removed call to javax/swing/JTextPane::setSelectionStart → NO_COVERAGE

101

1.1
Location : run
Killed by : none
removed call to javax/swing/JTextPane::setSelectionEnd → NO_COVERAGE

103

1.1
Location : run
Killed by : none
negated conditional → NO_COVERAGE

104

1.1
Location : run
Killed by : none
removed call to com/jsql/util/bruter/HashBruter::setIsDone → NO_COVERAGE

105

1.1
Location : run
Killed by : none
removed call to com/jsql/util/bruter/HashBruter::setFound → NO_COVERAGE

110

1.1
Location : run
Killed by : none
removed call to com/jsql/view/swing/manager/util/ActionBruteForce::displayResult → NO_COVERAGE

113

1.1
Location : run
Killed by : none
removed call to com/jsql/view/swing/manager/ManagerBruteForce::showLoader → NO_COVERAGE

114

1.1
Location : run
Killed by : none
removed call to com/jsql/view/swing/manager/util/JButtonStateful::setText → NO_COVERAGE

115

1.1
Location : run
Killed by : none
removed call to com/jsql/view/swing/manager/util/JButtonStateful::setEnabled → NO_COVERAGE

116

1.1
Location : run
Killed by : none
removed call to com/jsql/view/swing/manager/util/JButtonStateful::setState → NO_COVERAGE

120

1.1
Location : updateResult
Killed by : none
removed call to javax/swing/JTextPane::setText → NO_COVERAGE

121

1.1
Location : updateResult
Killed by : none
removed call to com/jsql/view/swing/manager/util/ActionBruteForce::append → NO_COVERAGE

122

1.1
Location : updateResult
Killed by : none
removed call to com/jsql/view/swing/manager/util/ActionBruteForce::append → NO_COVERAGE

123

1.1
Location : updateResult
Killed by : none
removed call to com/jsql/view/swing/manager/util/ActionBruteForce::append → NO_COVERAGE

124

1.1
Location : updateResult
Killed by : none
removed call to com/jsql/view/swing/manager/util/ActionBruteForce::append → NO_COVERAGE

125

1.1
Location : updateResult
Killed by : none
removed call to com/jsql/view/swing/manager/util/ActionBruteForce::append → NO_COVERAGE

126

1.1
Location : updateResult
Killed by : none
removed call to com/jsql/view/swing/manager/util/ActionBruteForce::append → NO_COVERAGE

128

1.1
Location : updateResult
Killed by : none
negated conditional → NO_COVERAGE

129

1.1
Location : updateResult
Killed by : none
Replaced float division with multiplication → NO_COVERAGE

130

1.1
Location : updateResult
Killed by : none
removed call to com/jsql/view/swing/manager/util/ActionBruteForce::append → NO_COVERAGE

132

1.1
Location : updateResult
Killed by : none
Replaced float division with multiplication → NO_COVERAGE

2.2
Location : updateResult
Killed by : none
Replaced float division with multiplication → NO_COVERAGE

3.3
Location : updateResult
Killed by : none
Replaced float division with multiplication → NO_COVERAGE

133

1.1
Location : updateResult
Killed by : none
Replaced float division with multiplication → NO_COVERAGE

2.2
Location : updateResult
Killed by : none
Replaced float modulus with multiplication → NO_COVERAGE

3.3
Location : updateResult
Killed by : none
Replaced float division with multiplication → NO_COVERAGE

134

1.1
Location : updateResult
Killed by : none
Replaced float division with multiplication → NO_COVERAGE

2.2
Location : updateResult
Killed by : none
Replaced float modulus with multiplication → NO_COVERAGE

135

1.1
Location : updateResult
Killed by : none
Replaced float modulus with multiplication → NO_COVERAGE

140

1.1
Location : updateResult
Killed by : none
removed call to com/jsql/view/swing/manager/util/ActionBruteForce::append → NO_COVERAGE

143

1.1
Location : updateResult
Killed by : none
Replaced float multiplication with division → NO_COVERAGE

2.2
Location : updateResult
Killed by : none
Replaced float division with multiplication → NO_COVERAGE

148

1.1
Location : initBruter
Killed by : none
removed call to com/jsql/util/bruter/HashBruter::setMinLength → NO_COVERAGE

149

1.1
Location : initBruter
Killed by : none
removed call to com/jsql/util/bruter/HashBruter::setMaxLength → NO_COVERAGE

151

1.1
Location : initBruter
Killed by : none
negated conditional → NO_COVERAGE

152

1.1
Location : initBruter
Killed by : none
removed call to com/jsql/util/bruter/HashBruter::addSpecialCharacters → NO_COVERAGE

154

1.1
Location : initBruter
Killed by : none
negated conditional → NO_COVERAGE

155

1.1
Location : initBruter
Killed by : none
removed call to com/jsql/util/bruter/HashBruter::addUpperCaseLetters → NO_COVERAGE

157

1.1
Location : initBruter
Killed by : none
negated conditional → NO_COVERAGE

158

1.1
Location : initBruter
Killed by : none
removed call to com/jsql/util/bruter/HashBruter::addLowerCaseLetters → NO_COVERAGE

160

1.1
Location : initBruter
Killed by : none
negated conditional → NO_COVERAGE

161

1.1
Location : initBruter
Killed by : none
removed call to com/jsql/util/bruter/HashBruter::addDigits → NO_COVERAGE

163

1.1
Location : initBruter
Killed by : none
negated conditional → NO_COVERAGE

164

1.1
Location : initBruter
Killed by : none
removed call to com/jsql/util/bruter/HashBruter::excludeChars → NO_COVERAGE

167

1.1
Location : initBruter
Killed by : none
removed call to com/jsql/util/bruter/HashBruter::setType → NO_COVERAGE

168

1.1
Location : initBruter
Killed by : none
removed call to com/jsql/util/bruter/HashBruter::setHash → NO_COVERAGE

178

1.1
Location : displayResult
Killed by : none
negated conditional → NO_COVERAGE

180

1.1
Location : displayResult
Killed by : none
negated conditional → NO_COVERAGE

181

1.1
Location : displayResult
Killed by : none
removed call to com/jsql/view/swing/manager/util/ActionBruteForce::append → NO_COVERAGE

190

1.1
Location : lambda$displayResult$4
Killed by : none
replaced return value with null for com/jsql/view/swing/manager/util/ActionBruteForce::lambda$displayResult$4 → NO_COVERAGE

194

1.1
Location : displayResult
Killed by : none
negated conditional → NO_COVERAGE

195

1.1
Location : displayResult
Killed by : none
removed call to com/jsql/view/swing/manager/util/ActionBruteForce::append → NO_COVERAGE

203

1.1
Location : append
Killed by : none
removed call to javax/swing/text/Document::insertString → NO_COVERAGE

205

1.1
Location : append
Killed by : none
negated conditional → NO_COVERAGE

Active mutators

Tests examined


Report generated by PIT 1.25.5 support