ManagerScan.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;
12
13
import com.jsql.model.injection.method.AbstractMethodInjection;
14
import com.jsql.model.injection.engine.model.Engine;
15
import com.jsql.util.LogLevelUtil;
16
import com.jsql.util.StringUtil;
17
import com.jsql.util.ThreadUtil;
18
import com.jsql.view.subscriber.SubscriberScan;
19
import com.jsql.view.swing.list.*;
20
import com.jsql.view.swing.manager.util.StateButton;
21
import com.jsql.view.swing.util.I18nViewUtil;
22
import com.jsql.view.swing.util.MediatorHelper;
23
import com.jsql.view.swing.util.UiUtil;
24
import org.apache.commons.lang3.StringUtils;
25
import org.apache.logging.log4j.LogManager;
26
import org.apache.logging.log4j.Logger;
27
import org.json.JSONArray;
28
import org.json.JSONException;
29
30
import javax.swing.*;
31
import java.awt.*;
32
import java.awt.event.ActionEvent;
33
import java.awt.event.ActionListener;
34
import java.io.BufferedReader;
35
import java.io.IOException;
36
import java.io.InputStreamReader;
37
import java.nio.charset.StandardCharsets;
38
import java.util.List;
39
import java.util.Objects;
40
import java.util.Optional;
41
42
/**
43
 * Manager to display webpages frequently used as backoffice administration.
44
 */
45
public class ManagerScan extends AbstractManagerList {
46
    
47
    private static final Logger LOGGER = LogManager.getRootLogger();
48
49
    public static final String NAME = "listManagerScan";
50
51
    /**
52
     * Create admin page finder.
53
     */
54
    public ManagerScan() {
55
        super("swing/list/scan-page.json");
56
57 1 1. <init> : removed call to com/jsql/view/swing/list/DnDList::setTransferHandler → NO_COVERAGE
        this.listPaths.setTransferHandler(null);
58 1 1. <init> : removed call to com/jsql/view/swing/list/DnDList::setTransferHandler → NO_COVERAGE
        this.listPaths.setTransferHandler(new ListTransfertHandlerScan());
59 1 1. <init> : removed call to com/jsql/view/swing/list/DnDList::setCellRenderer → NO_COVERAGE
        this.listPaths.setCellRenderer(new DefaultListCellRenderer() {
60
            @Override
61
            public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
62
                JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
63
                ItemList itemList = (ItemList) value;
64 1 1. getListCellRendererComponent : negated conditional → NO_COVERAGE
                if (itemList.isVulnerable()) {
65 1 1. getListCellRendererComponent : removed call to javax/swing/JLabel::setIcon → NO_COVERAGE
                    label.setIcon(UiUtil.TICK_GREEN.getIcon());
66
                }
67 1 1. getListCellRendererComponent : replaced return value with null for com/jsql/view/swing/manager/ManagerScan$1::getListCellRendererComponent → NO_COVERAGE
                return label;
68
            }
69
        });
70
        
71 1 1. <init> : removed call to com/jsql/view/swing/list/DnDList::setName → NO_COVERAGE
        this.listPaths.setName(ManagerScan.NAME);
72
73
        JPanel lastLine = this.getLastLinePanel();
74 1 1. <init> : removed call to com/jsql/view/swing/manager/ManagerScan::add → NO_COVERAGE
        this.add(lastLine, BorderLayout.SOUTH);
75
        
76 1 1. <init> : removed call to com/jsql/view/swing/list/DnDList::addListSelectionListener → NO_COVERAGE
        this.listPaths.addListSelectionListener(e -> {
77 1 1. lambda$new$0 : negated conditional → NO_COVERAGE
            if (this.listPaths.getSelectedValue() == null) {
78
                return;
79
            }
80
            
81
            var beanInjection = ((ItemListScan) this.listPaths.getSelectedValue()).getBeanInjection();
82 1 1. lambda$new$0 : removed call to javax/swing/JTextField::setText → NO_COVERAGE
            MediatorHelper.panelAddressBar().getTextFieldAddress().setText(beanInjection.getUrl());
83 1 1. lambda$new$0 : removed call to javax/swing/JTextField::setText → NO_COVERAGE
            MediatorHelper.panelAddressBar().getTextFieldHeader().setText(beanInjection.getHeader());
84 1 1. lambda$new$0 : removed call to javax/swing/JTextField::setText → NO_COVERAGE
            MediatorHelper.panelAddressBar().getTextFieldRequest().setText(beanInjection.getRequest());
85
            
86
            String requestType = beanInjection.getRequestType();
87 2 1. lambda$new$0 : negated conditional → NO_COVERAGE
2. lambda$new$0 : negated conditional → NO_COVERAGE
            if (requestType != null && !requestType.isEmpty()) {
88 1 1. lambda$new$0 : removed call to javax/swing/JRadioButton::setText → NO_COVERAGE
                MediatorHelper.panelAddressBar().getAtomicRadioMethod().setText(requestType);
89
            } else {
90 1 1. lambda$new$0 : removed call to javax/swing/JRadioButton::setText → NO_COVERAGE
                MediatorHelper.panelAddressBar().getAtomicRadioMethod().setText(StringUtil.GET);
91
            }
92
            
93
            AbstractMethodInjection method = beanInjection.getMethodInstance();
94 1 1. lambda$new$0 : negated conditional → NO_COVERAGE
            if (method == MediatorHelper.model().getMediatorMethod().getHeader()) {
95 1 1. lambda$new$0 : removed call to javax/swing/JRadioButton::setSelected → NO_COVERAGE
                MediatorHelper.panelAddressBar().getAtomicRadioHeader().setSelected(true);
96 1 1. lambda$new$0 : negated conditional → NO_COVERAGE
            } else if (method == MediatorHelper.model().getMediatorMethod().getRequest()) {
97 1 1. lambda$new$0 : removed call to javax/swing/JRadioButton::setSelected → NO_COVERAGE
                MediatorHelper.panelAddressBar().getAtomicRadioMethod().setSelected(true);
98
            } else {
99 1 1. lambda$new$0 : removed call to javax/swing/JRadioButton::setSelected → NO_COVERAGE
                MediatorHelper.panelAddressBar().getAtomicRadioRequest().setSelected(true);
100
            }
101
        });
102
    }
103
104
    @Override
105
    public void buildList(String nameFile) {
106
        var jsonScan = new StringBuilder();
107
        try (
108
            var inputStream = UiUtil.class.getClassLoader().getResourceAsStream(nameFile);
109
            var inputStreamReader = new InputStreamReader(Objects.requireNonNull(inputStream), StandardCharsets.UTF_8);
110
            var reader = new BufferedReader(inputStreamReader)
111
        ) {
112
            String line;
113 1 1. buildList : negated conditional → NO_COVERAGE
            while ((line = reader.readLine()) != null) {
114
                jsonScan.append(line);
115
            }
116
            var jsonArrayScan = new JSONArray(jsonScan.toString());
117 2 1. buildList : negated conditional → NO_COVERAGE
2. buildList : changed conditional boundary → NO_COVERAGE
            for (var i = 0 ; i < jsonArrayScan.length() ; i++) {
118
                this.itemsList.add(new ItemListScan(jsonArrayScan.getJSONObject(i)));
119
            }
120
            this.listPaths = new DnDListScan(this.itemsList);
121
        } catch (JSONException | IOException e) {
122
            LOGGER.log(LogLevelUtil.CONSOLE_JAVA, e, e);
123
        }
124
    }
125
126
    private JPanel getLastLinePanel() {
127
        var lastLine = new JPanel();
128 1 1. getLastLinePanel : removed call to javax/swing/JPanel::setOpaque → NO_COVERAGE
        lastLine.setOpaque(false);
129 1 1. getLastLinePanel : removed call to javax/swing/JPanel::setLayout → NO_COVERAGE
        lastLine.setLayout(new BoxLayout(lastLine, BoxLayout.X_AXIS));
130
131 1 1. getLastLinePanel : removed call to com/jsql/view/swing/manager/ManagerScan::buildRunButton → NO_COVERAGE
        this.buildRunButton("SCAN_RUN_BUTTON_LABEL", "SCAN_RUN_BUTTON_TOOLTIP");
132 1 1. getLastLinePanel : removed call to com/jsql/view/swing/manager/util/JButtonStateful::addActionListener → NO_COVERAGE
        this.run.addActionListener(new ActionScan());
133
134
        lastLine.add(this.horizontalGlue);
135
        lastLine.add(this.progressBar);
136
        lastLine.add(this.run);
137 1 1. getLastLinePanel : replaced return value with null for com/jsql/view/swing/manager/ManagerScan::getLastLinePanel → NO_COVERAGE
        return lastLine;
138
    }
139
140
    private class ActionScan implements ActionListener {
141
        @Override
142
        public void actionPerformed(ActionEvent e) {
143 1 1. actionPerformed : negated conditional → NO_COVERAGE
            if (ManagerScan.this.listPaths.getSelectedValuesList().isEmpty()) {
144
                LOGGER.log(LogLevelUtil.CONSOLE_ERROR, "Select URL(s) to scan");
145
                return;
146
            }
147 1 1. actionPerformed : negated conditional → NO_COVERAGE
            if (MediatorHelper.model().isInjectingWithoutScan()) {
148
                LOGGER.log(LogLevelUtil.CONSOLE_ERROR, "Injection already ongoing, either wait or cancel the injection manually");
149
                return;
150
            }
151
            new Thread(() -> {
152 1 1. lambda$actionPerformed$0 : negated conditional → NO_COVERAGE
                if (ManagerScan.this.run.getState() == StateButton.STARTABLE) {
153 1 1. lambda$actionPerformed$0 : removed call to com/jsql/view/swing/manager/util/JButtonStateful::setText → NO_COVERAGE
                    ManagerScan.this.run.setText(I18nViewUtil.valueByKey("SCAN_RUN_BUTTON_STOP"));
154 1 1. lambda$actionPerformed$0 : removed call to com/jsql/view/swing/manager/util/JButtonStateful::setState → NO_COVERAGE
                    ManagerScan.this.run.setState(StateButton.STOPPABLE);
155 1 1. lambda$actionPerformed$0 : removed call to javax/swing/JProgressBar::setVisible → NO_COVERAGE
                    ManagerScan.this.progressBar.setVisible(true);
156 1 1. lambda$actionPerformed$0 : removed call to java/awt/Component::setVisible → NO_COVERAGE
                    ManagerScan.this.horizontalGlue.setVisible(false);
157
                    DefaultListModel<ItemList> listModel = (DefaultListModel<ItemList>) ManagerScan.this.listPaths.getModel();
158 2 1. lambda$actionPerformed$0 : changed conditional boundary → NO_COVERAGE
2. lambda$actionPerformed$0 : negated conditional → NO_COVERAGE
                    for (var i = 0 ; i < listModel.getSize() ; i++) {
159 1 1. lambda$actionPerformed$0 : removed call to com/jsql/view/swing/list/ItemList::reset → NO_COVERAGE
                        listModel.get(i).reset();
160
                    }
161 1 1. lambda$actionPerformed$0 : removed call to com/jsql/view/swing/manager/ManagerScan::scan → NO_COVERAGE
                    ManagerScan.this.scan(ManagerScan.this.listPaths.getSelectedValuesList());
162
                } else {
163 1 1. lambda$actionPerformed$0 : removed call to com/jsql/model/accessible/ResourceAccess::setScanStopped → NO_COVERAGE
                    MediatorHelper.model().getResourceAccess().setScanStopped(true);
164 1 1. lambda$actionPerformed$0 : removed call to com/jsql/model/InjectionModel::setIsStoppedByUser → NO_COVERAGE
                    MediatorHelper.model().setIsStoppedByUser(true);
165 1 1. lambda$actionPerformed$0 : removed call to com/jsql/view/swing/manager/util/JButtonStateful::setEnabled → NO_COVERAGE
                    ManagerScan.this.run.setEnabled(false);
166 1 1. lambda$actionPerformed$0 : removed call to com/jsql/view/swing/manager/util/JButtonStateful::setState → NO_COVERAGE
                    ManagerScan.this.run.setState(StateButton.STOPPING);
167
                }
168 1 1. actionPerformed : removed call to java/lang/Thread::start → NO_COVERAGE
            }, "ThreadScan").start();
169
        }
170
    }
171
    
172
    /**
173
     * Start fast scan of URLs in sequence and display result.
174
     * Unplug any existing view and plug a console-like view in order to
175
     * respond appropriately to GUI message with simple text result instead of
176
     * build complex graphical components during the multi website injections.
177
     * At the end of the scan it plugs again the default view.
178
     * @param urlsItemList contains a list of String URL
179
     */
180
    public void scan(List<ItemList> urlsItemList) {
181 1 1. scan : removed call to com/jsql/view/swing/JFrameView::resetInterface → NO_COVERAGE
        MediatorHelper.frame().resetInterface();  // Erase everything in the view from a previous injection
182
        
183
        // wait for ending of ongoing interaction between two injections
184 1 1. scan : removed call to com/jsql/util/ThreadUtil::sleep → NO_COVERAGE
        ThreadUtil.sleep(500);
185
186
        // Display result only in console
187 1 1. scan : removed call to java/util/concurrent/Flow$Subscription::cancel → NO_COVERAGE
        MediatorHelper.frame().getSubscriberView().getSubscription().cancel();
188
        var subscriberScan = new SubscriberScan();
189 1 1. scan : removed call to com/jsql/model/InjectionModel::subscribe → NO_COVERAGE
        MediatorHelper.model().subscribe(subscriberScan);
190 1 1. scan : negated conditional → NO_COVERAGE
        while (subscriberScan.getSubscription() == null) {  // defensive concurrency check
191 1 1. scan : removed call to com/jsql/util/ThreadUtil::sleep → NO_COVERAGE
            ThreadUtil.sleep(500);
192
        }
193
194 1 1. scan : removed call to com/jsql/model/InjectionModel::setIsScanning → NO_COVERAGE
        MediatorHelper.model().setIsScanning(true);
195 1 1. scan : removed call to com/jsql/model/accessible/ResourceAccess::setScanStopped → NO_COVERAGE
        MediatorHelper.model().getResourceAccess().setScanStopped(false);
196
        
197
        for (ItemList urlItemList: urlsItemList) {
198
            if (  // detect interrupt by user to end intermediate scan
199 1 1. scan : negated conditional → NO_COVERAGE
                MediatorHelper.model().isStoppedByUser()
200 1 1. scan : negated conditional → NO_COVERAGE
                || MediatorHelper.model().getResourceAccess().isScanStopped()
201
            ) {
202
                break;
203
            }
204
205
            var urlItemListScan = (ItemListScan) urlItemList;
206
            LOGGER.log(LogLevelUtil.CONSOLE_INFORM, "Scanning {}", urlItemListScan.getBeanInjection().getUrl());
207
208
            Optional<Engine> optionalEngine = MediatorHelper.model().getMediatorEngine().getEngines()
209
                .stream()
210 2 1. lambda$scan$1 : replaced boolean return with false for com/jsql/view/swing/manager/ManagerScan::lambda$scan$1 → NO_COVERAGE
2. lambda$scan$1 : replaced boolean return with true for com/jsql/view/swing/manager/ManagerScan::lambda$scan$1 → NO_COVERAGE
                .filter(engine -> engine.toString().equalsIgnoreCase(urlItemListScan.getBeanInjection().getEngine()))
211
                .findAny();
212
213 1 1. scan : removed call to com/jsql/model/injection/engine/MediatorEngine::setEngineByUser → NO_COVERAGE
            MediatorHelper.model().getMediatorEngine().setEngineByUser(
214
                optionalEngine.orElse(MediatorHelper.model().getMediatorEngine().getAuto())
215
            );
216 1 1. scan : removed call to com/jsql/util/ParameterUtil::controlInput → NO_COVERAGE
            MediatorHelper.model().getMediatorUtils().parameterUtil().controlInput(
217
                StringUtils.EMPTY,
218
                urlItemListScan.getBeanInjection().getUrl(),
219
                urlItemListScan.getBeanInjection().getRequest(),
220
                urlItemListScan.getBeanInjection().getHeader(),
221
                urlItemListScan.getBeanInjection().getMethodInstance(),
222
                urlItemListScan.getBeanInjection().getRequestType(),
223
                true
224
            );
225
226 1 1. scan : removed call to com/jsql/util/ThreadUtil::sleep → NO_COVERAGE
            ThreadUtil.sleep(500);
227
        }
228
        
229
        // Get back the default view
230
        // Fix #96366: NullPointerException on cancel()
231 1 1. scan : negated conditional → NO_COVERAGE
        if (subscriberScan.getSubscription() != null) {  // defensive concurrency check
232 1 1. scan : removed call to java/util/concurrent/Flow$Subscription::cancel → NO_COVERAGE
            subscriberScan.getSubscription().cancel();
233
        }
234
        // Defensive concurrency check: 'IllegalStateException: Duplicate subscribe' when quickly start/stop scanning
235 1 1. scan : negated conditional → NO_COVERAGE
        if (!MediatorHelper.model().isSubscribed(MediatorHelper.frame().getSubscriberView())) {
236 1 1. scan : removed call to com/jsql/model/InjectionModel::subscribe → NO_COVERAGE
            MediatorHelper.model().subscribe(MediatorHelper.frame().getSubscriberView());
237
        }
238
239 1 1. scan : removed call to com/jsql/model/InjectionModel::setIsScanning → NO_COVERAGE
        MediatorHelper.model().setIsScanning(false);
240 1 1. scan : removed call to com/jsql/model/InjectionModel::setIsStoppedByUser → NO_COVERAGE
        MediatorHelper.model().setIsStoppedByUser(false);
241 1 1. scan : removed call to com/jsql/model/accessible/ResourceAccess::setScanStopped → NO_COVERAGE
        MediatorHelper.model().getResourceAccess().setScanStopped(false);
242
243 1 1. scan : removed call to com/jsql/view/swing/manager/ManagerScan::endProcess → NO_COVERAGE
        this.endProcess();
244
    }
245
}

Mutations

57

1.1
Location : <init>
Killed by : none
removed call to com/jsql/view/swing/list/DnDList::setTransferHandler → NO_COVERAGE

58

1.1
Location : <init>
Killed by : none
removed call to com/jsql/view/swing/list/DnDList::setTransferHandler → NO_COVERAGE

59

1.1
Location : <init>
Killed by : none
removed call to com/jsql/view/swing/list/DnDList::setCellRenderer → NO_COVERAGE

64

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

65

1.1
Location : getListCellRendererComponent
Killed by : none
removed call to javax/swing/JLabel::setIcon → NO_COVERAGE

67

1.1
Location : getListCellRendererComponent
Killed by : none
replaced return value with null for com/jsql/view/swing/manager/ManagerScan$1::getListCellRendererComponent → NO_COVERAGE

71

1.1
Location : <init>
Killed by : none
removed call to com/jsql/view/swing/list/DnDList::setName → NO_COVERAGE

74

1.1
Location : <init>
Killed by : none
removed call to com/jsql/view/swing/manager/ManagerScan::add → NO_COVERAGE

76

1.1
Location : <init>
Killed by : none
removed call to com/jsql/view/swing/list/DnDList::addListSelectionListener → NO_COVERAGE

77

1.1
Location : lambda$new$0
Killed by : none
negated conditional → NO_COVERAGE

82

1.1
Location : lambda$new$0
Killed by : none
removed call to javax/swing/JTextField::setText → NO_COVERAGE

83

1.1
Location : lambda$new$0
Killed by : none
removed call to javax/swing/JTextField::setText → NO_COVERAGE

84

1.1
Location : lambda$new$0
Killed by : none
removed call to javax/swing/JTextField::setText → NO_COVERAGE

87

1.1
Location : lambda$new$0
Killed by : none
negated conditional → NO_COVERAGE

2.2
Location : lambda$new$0
Killed by : none
negated conditional → NO_COVERAGE

88

1.1
Location : lambda$new$0
Killed by : none
removed call to javax/swing/JRadioButton::setText → NO_COVERAGE

90

1.1
Location : lambda$new$0
Killed by : none
removed call to javax/swing/JRadioButton::setText → NO_COVERAGE

94

1.1
Location : lambda$new$0
Killed by : none
negated conditional → NO_COVERAGE

95

1.1
Location : lambda$new$0
Killed by : none
removed call to javax/swing/JRadioButton::setSelected → NO_COVERAGE

96

1.1
Location : lambda$new$0
Killed by : none
negated conditional → NO_COVERAGE

97

1.1
Location : lambda$new$0
Killed by : none
removed call to javax/swing/JRadioButton::setSelected → NO_COVERAGE

99

1.1
Location : lambda$new$0
Killed by : none
removed call to javax/swing/JRadioButton::setSelected → NO_COVERAGE

113

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

117

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

2.2
Location : buildList
Killed by : none
changed conditional boundary → NO_COVERAGE

128

1.1
Location : getLastLinePanel
Killed by : none
removed call to javax/swing/JPanel::setOpaque → NO_COVERAGE

129

1.1
Location : getLastLinePanel
Killed by : none
removed call to javax/swing/JPanel::setLayout → NO_COVERAGE

131

1.1
Location : getLastLinePanel
Killed by : none
removed call to com/jsql/view/swing/manager/ManagerScan::buildRunButton → NO_COVERAGE

132

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

137

1.1
Location : getLastLinePanel
Killed by : none
replaced return value with null for com/jsql/view/swing/manager/ManagerScan::getLastLinePanel → NO_COVERAGE

143

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

147

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

152

1.1
Location : lambda$actionPerformed$0
Killed by : none
negated conditional → NO_COVERAGE

153

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

154

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

155

1.1
Location : lambda$actionPerformed$0
Killed by : none
removed call to javax/swing/JProgressBar::setVisible → NO_COVERAGE

156

1.1
Location : lambda$actionPerformed$0
Killed by : none
removed call to java/awt/Component::setVisible → NO_COVERAGE

158

1.1
Location : lambda$actionPerformed$0
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : lambda$actionPerformed$0
Killed by : none
negated conditional → NO_COVERAGE

159

1.1
Location : lambda$actionPerformed$0
Killed by : none
removed call to com/jsql/view/swing/list/ItemList::reset → NO_COVERAGE

161

1.1
Location : lambda$actionPerformed$0
Killed by : none
removed call to com/jsql/view/swing/manager/ManagerScan::scan → NO_COVERAGE

163

1.1
Location : lambda$actionPerformed$0
Killed by : none
removed call to com/jsql/model/accessible/ResourceAccess::setScanStopped → NO_COVERAGE

164

1.1
Location : lambda$actionPerformed$0
Killed by : none
removed call to com/jsql/model/InjectionModel::setIsStoppedByUser → NO_COVERAGE

165

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

166

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

168

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

181

1.1
Location : scan
Killed by : none
removed call to com/jsql/view/swing/JFrameView::resetInterface → NO_COVERAGE

184

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

187

1.1
Location : scan
Killed by : none
removed call to java/util/concurrent/Flow$Subscription::cancel → NO_COVERAGE

189

1.1
Location : scan
Killed by : none
removed call to com/jsql/model/InjectionModel::subscribe → NO_COVERAGE

190

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

191

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

194

1.1
Location : scan
Killed by : none
removed call to com/jsql/model/InjectionModel::setIsScanning → NO_COVERAGE

195

1.1
Location : scan
Killed by : none
removed call to com/jsql/model/accessible/ResourceAccess::setScanStopped → NO_COVERAGE

199

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

200

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

210

1.1
Location : lambda$scan$1
Killed by : none
replaced boolean return with false for com/jsql/view/swing/manager/ManagerScan::lambda$scan$1 → NO_COVERAGE

2.2
Location : lambda$scan$1
Killed by : none
replaced boolean return with true for com/jsql/view/swing/manager/ManagerScan::lambda$scan$1 → NO_COVERAGE

213

1.1
Location : scan
Killed by : none
removed call to com/jsql/model/injection/engine/MediatorEngine::setEngineByUser → NO_COVERAGE

216

1.1
Location : scan
Killed by : none
removed call to com/jsql/util/ParameterUtil::controlInput → NO_COVERAGE

226

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

231

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

232

1.1
Location : scan
Killed by : none
removed call to java/util/concurrent/Flow$Subscription::cancel → NO_COVERAGE

235

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

236

1.1
Location : scan
Killed by : none
removed call to com/jsql/model/InjectionModel::subscribe → NO_COVERAGE

239

1.1
Location : scan
Killed by : none
removed call to com/jsql/model/InjectionModel::setIsScanning → NO_COVERAGE

240

1.1
Location : scan
Killed by : none
removed call to com/jsql/model/InjectionModel::setIsStoppedByUser → NO_COVERAGE

241

1.1
Location : scan
Killed by : none
removed call to com/jsql/model/accessible/ResourceAccess::setScanStopped → NO_COVERAGE

243

1.1
Location : scan
Killed by : none
removed call to com/jsql/view/swing/manager/ManagerScan::endProcess → NO_COVERAGE

Active mutators

Tests examined


Report generated by PIT 1.25.5 support