DnDTabbedPane.java

1
package com.jsql.view.swing.tab.dnd;
2
3
import com.jsql.util.LogLevelUtil;
4
import com.jsql.view.swing.action.ActionCloseTabResult;
5
import org.apache.logging.log4j.LogManager;
6
import org.apache.logging.log4j.Logger;
7
8
import javax.swing.*;
9
import java.awt.*;
10
import java.awt.dnd.DragSource;
11
import java.awt.event.MouseAdapter;
12
import java.awt.event.MouseEvent;
13
import java.beans.PropertyChangeEvent;
14
import java.beans.PropertyChangeListener;
15
import java.util.Objects;
16
import java.util.Optional;
17
18
public class DnDTabbedPane extends JTabbedPane {
19
20
    private static final Logger LOGGER = LogManager.getRootLogger();
21
22
    private static final int SCROLL_SIZE = 20;  // Test
23
    private static final int BUTTON_SIZE = 30;  // 30 is magic number of scroll button size
24
    private static final int LINE_WIDTH = 3;
25
    private static final Rectangle RECT_BACKWARD = new Rectangle();
26
    private static final Rectangle RECT_FORWARD = new Rectangle();
27
    protected static final Rectangle RECT_LINE = new Rectangle();
28
    protected int dragTabIndex = -1;
29
    private transient DnDDropLocation dropLocation;
30
31
    public static final class DnDDropLocation extends TransferHandler.DropLocation {
32
        
33
        private final int index;
34
        private boolean dropable = true;
35
        
36
        private DnDDropLocation(Point p, int index) {
37
            super(p);
38
            this.index = index;
39
        }
40
        
41
        public int getIndex() {
42 1 1. getIndex : replaced int return with 0 for com/jsql/view/swing/tab/dnd/DnDTabbedPane$DnDDropLocation::getIndex → NO_COVERAGE
            return this.index;
43
        }
44
        
45
        public void setDroppable(boolean flag) {
46
            this.dropable = flag;
47
        }
48
        
49
        public boolean isDroppable() {
50 2 1. isDroppable : replaced boolean return with true for com/jsql/view/swing/tab/dnd/DnDTabbedPane$DnDDropLocation::isDroppable → NO_COVERAGE
2. isDroppable : replaced boolean return with false for com/jsql/view/swing/tab/dnd/DnDTabbedPane$DnDDropLocation::isDroppable → NO_COVERAGE
            return this.dropable;
51
        }
52
    }
53
    
54
    private void clickArrowButton(String actionKey) {
55
        JButton scrollForwardButton = null;
56
        JButton scrollBackwardButton = null;
57
        
58
        for (Component c: this.getComponents()) {
59 1 1. clickArrowButton : negated conditional → NO_COVERAGE
            if (c instanceof JButton) {
60 1 1. clickArrowButton : negated conditional → NO_COVERAGE
                if (scrollForwardButton == null) {
61
                    scrollForwardButton = (JButton) c;
62 1 1. clickArrowButton : negated conditional → NO_COVERAGE
                } else if (scrollBackwardButton == null) {
63
                    scrollBackwardButton = (JButton) c;
64
                }
65
            }
66
        }
67
        
68 1 1. clickArrowButton : negated conditional → NO_COVERAGE
        JButton button = "scrollTabsForwardAction".equals(actionKey) ? scrollForwardButton : scrollBackwardButton;
69
        Optional.ofNullable(button)
70
            .filter(JButton::isEnabled)
71 1 1. clickArrowButton : removed call to java/util/Optional::ifPresent → NO_COVERAGE
            .ifPresent(JButton::doClick);
72
    }
73
    
74
    public void autoScrollTest(Point pt) {
75
        Rectangle r = this.getTabAreaBounds();
76
        
77 1 1. autoScrollTest : negated conditional → NO_COVERAGE
        if (DnDTabbedPane.isTopBottomTabPlacement(this.getTabPlacement())) {
78 1 1. autoScrollTest : removed call to java/awt/Rectangle::setBounds → NO_COVERAGE
            DnDTabbedPane.RECT_BACKWARD.setBounds(r.x, r.y, DnDTabbedPane.SCROLL_SIZE, r.height);
79 4 1. autoScrollTest : removed call to java/awt/Rectangle::setBounds → NO_COVERAGE
2. autoScrollTest : Replaced integer addition with subtraction → NO_COVERAGE
3. autoScrollTest : Replaced integer subtraction with addition → NO_COVERAGE
4. autoScrollTest : Replaced integer subtraction with addition → NO_COVERAGE
            DnDTabbedPane.RECT_FORWARD.setBounds(r.x + r.width - DnDTabbedPane.SCROLL_SIZE - DnDTabbedPane.BUTTON_SIZE, r.y, DnDTabbedPane.SCROLL_SIZE + DnDTabbedPane.BUTTON_SIZE, r.height);
80
        } else {
81 1 1. autoScrollTest : removed call to java/awt/Rectangle::setBounds → NO_COVERAGE
            DnDTabbedPane.RECT_BACKWARD.setBounds(r.x, r.y, r.width, DnDTabbedPane.SCROLL_SIZE);
82 4 1. autoScrollTest : removed call to java/awt/Rectangle::setBounds → NO_COVERAGE
2. autoScrollTest : Replaced integer addition with subtraction → NO_COVERAGE
3. autoScrollTest : Replaced integer subtraction with addition → NO_COVERAGE
4. autoScrollTest : Replaced integer subtraction with addition → NO_COVERAGE
            DnDTabbedPane.RECT_FORWARD.setBounds(r.x, r.y + r.height - DnDTabbedPane.SCROLL_SIZE - DnDTabbedPane.BUTTON_SIZE, r.width, DnDTabbedPane.SCROLL_SIZE + DnDTabbedPane.BUTTON_SIZE);
83
        }
84
        
85 1 1. autoScrollTest : negated conditional → NO_COVERAGE
        if (DnDTabbedPane.RECT_BACKWARD.contains(pt)) {
86 1 1. autoScrollTest : removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::clickArrowButton → NO_COVERAGE
            this.clickArrowButton("scrollTabsBackwardAction");
87 1 1. autoScrollTest : negated conditional → NO_COVERAGE
        } else if (DnDTabbedPane.RECT_FORWARD.contains(pt)) {
88 1 1. autoScrollTest : removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::clickArrowButton → NO_COVERAGE
            this.clickArrowButton("scrollTabsForwardAction");
89
        }
90
    }
91
    
92
    protected DnDTabbedPane() {
93
        super();
94
        
95
        var h = new Handler();
96 1 1. <init> : removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::addMouseListener → NO_COVERAGE
        this.addMouseListener(h);
97 1 1. <init> : removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::addMouseMotionListener → NO_COVERAGE
        this.addMouseMotionListener(h);
98 1 1. <init> : removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::addPropertyChangeListener → NO_COVERAGE
        this.addPropertyChangeListener(h);
99
    }
100
    
101
    public DnDDropLocation dropLocationForPointDnD(Point p) {
102 2 1. dropLocationForPointDnD : negated conditional → NO_COVERAGE
2. dropLocationForPointDnD : changed conditional boundary → NO_COVERAGE
        for (var i = 0; i < this.getTabCount(); i++) {
103 1 1. dropLocationForPointDnD : negated conditional → NO_COVERAGE
            if (this.getBoundsAt(i).contains(p)) {
104 1 1. dropLocationForPointDnD : replaced return value with null for com/jsql/view/swing/tab/dnd/DnDTabbedPane::dropLocationForPointDnD → NO_COVERAGE
                return new DnDDropLocation(p, i);
105
            }
106
        }
107
        
108 1 1. dropLocationForPointDnD : negated conditional → NO_COVERAGE
        if (this.getTabAreaBounds().contains(p)) {
109 1 1. dropLocationForPointDnD : replaced return value with null for com/jsql/view/swing/tab/dnd/DnDTabbedPane::dropLocationForPointDnD → NO_COVERAGE
            return new DnDDropLocation(p, this.getTabCount());
110
        }
111
        
112 1 1. dropLocationForPointDnD : replaced return value with null for com/jsql/view/swing/tab/dnd/DnDTabbedPane::dropLocationForPointDnD → NO_COVERAGE
        return new DnDDropLocation(p, -1);
113
    }
114
    
115
    public void setDropLocation(TransferHandler.DropLocation location, boolean forDrop) {
116
        DnDDropLocation old = this.dropLocation;
117
        
118 2 1. setDropLocation : negated conditional → NO_COVERAGE
2. setDropLocation : negated conditional → NO_COVERAGE
        if (Objects.isNull(location) || !forDrop) {
119
            this.dropLocation = new DnDDropLocation(new Point(), -1);
120 1 1. setDropLocation : negated conditional → NO_COVERAGE
        } else if (location instanceof DnDDropLocation) {
121
            this.dropLocation = (DnDDropLocation) location;
122
        }
123
        
124 1 1. setDropLocation : removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::firePropertyChange → NO_COVERAGE
        this.firePropertyChange("dropLocation", old, this.dropLocation);
125
    }
126
    
127
    public void exportTab(int dragIndex, JTabbedPane target, int targetIndex) {
128
        var cmp = this.getComponentAt(dragIndex);
129
        var tab = this.getTabComponentAt(dragIndex);
130
        String title = this.getTitleAt(dragIndex);
131
        var icon = this.getIconAt(dragIndex);
132
        String tip = this.getToolTipTextAt(dragIndex);
133
        boolean isEnabled = this.isEnabledAt(dragIndex);
134
        
135 1 1. exportTab : removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::remove → NO_COVERAGE
        this.remove(dragIndex);
136 1 1. exportTab : removed call to javax/swing/JTabbedPane::insertTab → NO_COVERAGE
        target.insertTab(title, icon, cmp, tip, targetIndex);
137 1 1. exportTab : removed call to javax/swing/JTabbedPane::setEnabledAt → NO_COVERAGE
        target.setEnabledAt(targetIndex, isEnabled);
138
139 1 1. exportTab : removed call to javax/swing/JTabbedPane::setTabComponentAt → NO_COVERAGE
        target.setTabComponentAt(targetIndex, tab);
140 1 1. exportTab : removed call to javax/swing/JTabbedPane::setSelectedIndex → NO_COVERAGE
        target.setSelectedIndex(targetIndex);
141
        
142 1 1. exportTab : negated conditional → NO_COVERAGE
        if (tab instanceof JComponent) {
143 1 1. exportTab : removed call to javax/swing/JComponent::scrollRectToVisible → NO_COVERAGE
            ((JComponent) tab).scrollRectToVisible(tab.getBounds());
144
        }
145
    }
146
    
147
    public void convertTab(int prev, int next) {
148
        var cmp = this.getComponentAt(prev);
149
        var tab = this.getTabComponentAt(prev);
150
        String title = this.getTitleAt(prev);
151
        var icon = this.getIconAt(prev);
152
        String tip = this.getToolTipTextAt(prev);
153
        boolean isEnabled = this.isEnabledAt(prev);
154 3 1. convertTab : negated conditional → NO_COVERAGE
2. convertTab : Replaced integer subtraction with addition → NO_COVERAGE
3. convertTab : changed conditional boundary → NO_COVERAGE
        int tgtindex = prev > next ? next : next - 1;
155
        
156 1 1. convertTab : removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::remove → NO_COVERAGE
        this.remove(prev);
157 1 1. convertTab : removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::insertTab → NO_COVERAGE
        this.insertTab(title, icon, cmp, tip, tgtindex);
158 1 1. convertTab : removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::setEnabledAt → NO_COVERAGE
        this.setEnabledAt(tgtindex, isEnabled);
159
        
160
        // When you drag'n'drop a disabled tab, it finishes enabled and selected.
161
        // pointed out by dlorde
162 1 1. convertTab : negated conditional → NO_COVERAGE
        if (isEnabled) {
163 1 1. convertTab : removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::setSelectedIndex → NO_COVERAGE
            this.setSelectedIndex(tgtindex);
164
        }
165
        
166
        // I have a component in all tabs (jlabel with an X to close the tab) and when I move a tab the component disappear.
167
        // pointed out by Daniel Dario Morales Salas
168 1 1. convertTab : removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::setTabComponentAt → NO_COVERAGE
        this.setTabComponentAt(tgtindex, tab);
169
    }
170
    
171
    public Optional<Rectangle> getDropLineRect() {
172
        int index = Optional.ofNullable(this.getDropLocation())
173
            .filter(DnDDropLocation::isDroppable)
174
            .map(DnDDropLocation::getIndex)
175
            .orElse(-1);
176
        
177 2 1. getDropLineRect : negated conditional → NO_COVERAGE
2. getDropLineRect : changed conditional boundary → NO_COVERAGE
        if (index < 0) {
178 1 1. getDropLineRect : removed call to java/awt/Rectangle::setBounds → NO_COVERAGE
            DnDTabbedPane.RECT_LINE.setBounds(0, 0, 0, 0);
179
            return Optional.empty();
180
        }
181
        
182
        int a = Math.min(index, 1);
183 2 1. getDropLineRect : Replaced integer subtraction with addition → NO_COVERAGE
2. getDropLineRect : Replaced integer multiplication with division → NO_COVERAGE
        Rectangle r = this.getBoundsAt(a * (index - 1));
184
        
185 1 1. getDropLineRect : negated conditional → NO_COVERAGE
        if (DnDTabbedPane.isTopBottomTabPlacement(this.getTabPlacement())) {
186 4 1. getDropLineRect : Replaced integer subtraction with addition → NO_COVERAGE
2. getDropLineRect : Replaced integer addition with subtraction → NO_COVERAGE
3. getDropLineRect : Replaced integer multiplication with division → NO_COVERAGE
4. getDropLineRect : removed call to java/awt/Rectangle::setBounds → NO_COVERAGE
            DnDTabbedPane.RECT_LINE.setBounds(r.x - DnDTabbedPane.LINE_WIDTH / 2 + r.width * a, r.y, DnDTabbedPane.LINE_WIDTH, r.height);
187
        } else {
188 4 1. getDropLineRect : Replaced integer subtraction with addition → NO_COVERAGE
2. getDropLineRect : Replaced integer multiplication with division → NO_COVERAGE
3. getDropLineRect : removed call to java/awt/Rectangle::setBounds → NO_COVERAGE
4. getDropLineRect : Replaced integer addition with subtraction → NO_COVERAGE
            DnDTabbedPane.RECT_LINE.setBounds(r.x, r.y - DnDTabbedPane.LINE_WIDTH / 2 + r.height * a, r.width, DnDTabbedPane.LINE_WIDTH);
189
        }
190
        
191 1 1. getDropLineRect : replaced return value with Optional.empty for com/jsql/view/swing/tab/dnd/DnDTabbedPane::getDropLineRect → NO_COVERAGE
        return Optional.of(DnDTabbedPane.RECT_LINE);
192
    }
193
    
194
    public Rectangle getTabAreaBounds() {
195
        Rectangle tabbedRect = this.getBounds();
196
        int xx = tabbedRect.x;
197
        int yy = tabbedRect.y;
198
        
199
        Rectangle compRect = Optional.ofNullable(this.getSelectedComponent())
200
            .map(Component::getBounds)
201
            .orElseGet(Rectangle::new);
202
203
        int tabPlacement = this.getTabPlacement();
204
        
205 1 1. getTabAreaBounds : negated conditional → NO_COVERAGE
        if (DnDTabbedPane.isTopBottomTabPlacement(tabPlacement)) {
206 1 1. getTabAreaBounds : Replaced integer subtraction with addition → NO_COVERAGE
            tabbedRect.height = tabbedRect.height - compRect.height;
207 1 1. getTabAreaBounds : negated conditional → NO_COVERAGE
            if (tabPlacement == SwingConstants.BOTTOM) {
208 2 1. getTabAreaBounds : Replaced integer addition with subtraction → NO_COVERAGE
2. getTabAreaBounds : Replaced integer addition with subtraction → NO_COVERAGE
                tabbedRect.y += compRect.y + compRect.height;
209
            }
210
        } else {
211 1 1. getTabAreaBounds : Replaced integer subtraction with addition → NO_COVERAGE
            tabbedRect.width = tabbedRect.width - compRect.width;
212 1 1. getTabAreaBounds : negated conditional → NO_COVERAGE
            if (tabPlacement == SwingConstants.RIGHT) {
213 2 1. getTabAreaBounds : Replaced integer addition with subtraction → NO_COVERAGE
2. getTabAreaBounds : Replaced integer addition with subtraction → NO_COVERAGE
                tabbedRect.x += compRect.x + compRect.width;
214
            }
215
        }
216
        
217 3 1. getTabAreaBounds : removed call to java/awt/Rectangle::translate → NO_COVERAGE
2. getTabAreaBounds : removed negation → NO_COVERAGE
3. getTabAreaBounds : removed negation → NO_COVERAGE
        tabbedRect.translate(-xx, -yy);
218 1 1. getTabAreaBounds : replaced return value with null for com/jsql/view/swing/tab/dnd/DnDTabbedPane::getTabAreaBounds → NO_COVERAGE
        return tabbedRect;
219
    }
220
221
    public static boolean isTopBottomTabPlacement(int tabPlacement) {
222 3 1. isTopBottomTabPlacement : replaced boolean return with true for com/jsql/view/swing/tab/dnd/DnDTabbedPane::isTopBottomTabPlacement → NO_COVERAGE
2. isTopBottomTabPlacement : negated conditional → NO_COVERAGE
3. isTopBottomTabPlacement : negated conditional → NO_COVERAGE
        return tabPlacement == SwingConstants.TOP || tabPlacement == SwingConstants.BOTTOM;
223
    }
224
225
    private class Handler extends MouseAdapter implements PropertyChangeListener { // , BeforeDrag
226
        
227
        private Point startPt;
228
        private final int gestureMotionThreshold = DragSource.getDragThreshold();
229
230
        private void repaintDropLocation() {
231
            Component c = DnDTabbedPane.this.getRootPane().getGlassPane();
232 1 1. repaintDropLocation : negated conditional → NO_COVERAGE
            if (c instanceof GhostGlassPane) {
233
                GhostGlassPane glassPane = (GhostGlassPane) c;
234 1 1. repaintDropLocation : removed call to com/jsql/view/swing/tab/dnd/GhostGlassPane::setTargetTabbedPane → NO_COVERAGE
                glassPane.setTargetTabbedPane(DnDTabbedPane.this);
235 1 1. repaintDropLocation : removed call to com/jsql/view/swing/tab/dnd/GhostGlassPane::repaint → NO_COVERAGE
                glassPane.repaint();
236
            }
237
        }
238
        
239
        // PropertyChangeListener
240
        @Override
241
        public void propertyChange(PropertyChangeEvent e) {
242
            String propertyName = e.getPropertyName();
243 1 1. propertyChange : negated conditional → NO_COVERAGE
            if ("dropLocation".equals(propertyName)) {
244 1 1. propertyChange : removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane$Handler::repaintDropLocation → NO_COVERAGE
                this.repaintDropLocation();
245
            }
246
        }
247
        
248
        // MouseListener
249
        @Override
250
        public void mousePressed(MouseEvent e) {
251
            DnDTabbedPane src = (DnDTabbedPane) e.getComponent();
252 2 1. mousePressed : negated conditional → NO_COVERAGE
2. mousePressed : changed conditional boundary → NO_COVERAGE
            boolean isOnlyOneTab = src.getTabCount() <= 1;
253 1 1. mousePressed : negated conditional → NO_COVERAGE
            if (isOnlyOneTab) {
254
                this.startPt = null;
255
                return;
256
            }
257
            
258
            var tabPt = e.getPoint();
259
            int idx;
260
            // Fix #95782: IllegalArgumentException on indexAtLocation()
261
            try {
262
                idx = src.indexAtLocation(tabPt.x, tabPt.y);
263
            } catch (IllegalArgumentException err) {
264
                LOGGER.log(LogLevelUtil.CONSOLE_JAVA, err);
265
                return;
266
            }
267
            
268
            // disabled tab, null component problem.
269
            // pointed out by daryl. NullPointerException: i.e. addTab("Tab", null)
270 4 1. mousePressed : negated conditional → NO_COVERAGE
2. mousePressed : negated conditional → NO_COVERAGE
3. mousePressed : changed conditional boundary → NO_COVERAGE
4. mousePressed : negated conditional → NO_COVERAGE
            boolean flag = idx < 0 || !src.isEnabledAt(idx) || Objects.isNull(src.getComponentAt(idx));
271
            
272 1 1. mousePressed : negated conditional → NO_COVERAGE
            this.startPt = flag ? null : tabPt;
273
        }
274
        
275
        @Override
276
        public void mouseDragged(MouseEvent e) {
277
            var tabPt = e.getPoint();
278 3 1. mouseDragged : negated conditional → NO_COVERAGE
2. mouseDragged : negated conditional → NO_COVERAGE
3. mouseDragged : changed conditional boundary → NO_COVERAGE
            if (Objects.nonNull(this.startPt) && this.startPt.distance(tabPt) > this.gestureMotionThreshold) {
279
                DnDTabbedPane src = (DnDTabbedPane) e.getComponent();
280
                var th = src.getTransferHandler();
281
                DnDTabbedPane.this.dragTabIndex = src.indexAtLocation(tabPt.x, tabPt.y);
282
                
283
                // Unhandled NoClassDefFoundError #56620: Could not initialize class java.awt.dnd.DragSource
284 1 1. mouseDragged : removed call to javax/swing/TransferHandler::exportAsDrag → NO_COVERAGE
                th.exportAsDrag(src, e, TransferHandler.MOVE);
285
286 1 1. mouseDragged : removed call to java/awt/Rectangle::setBounds → NO_COVERAGE
                DnDTabbedPane.RECT_LINE.setBounds(0, 0, 0, 0);
287 1 1. mouseDragged : removed call to java/awt/Component::setVisible → NO_COVERAGE
                src.getRootPane().getGlassPane().setVisible(true);
288 1 1. mouseDragged : removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::setDropLocation → NO_COVERAGE
                src.setDropLocation(new DnDDropLocation(tabPt, -1), true);
289
                
290
                this.startPt = null;
291
            }
292
        }
293
294
        @Override
295
        public void mouseClicked(MouseEvent e) {
296
            var tabPt = e.getPoint();
297
            JTabbedPane src = (JTabbedPane) e.getSource();
298
            
299
            int i = src.indexAtLocation(tabPt.x, tabPt.y);
300 3 1. mouseClicked : negated conditional → NO_COVERAGE
2. mouseClicked : negated conditional → NO_COVERAGE
3. mouseClicked : changed conditional boundary → NO_COVERAGE
            if (-1 < i && e.getButton() == MouseEvent.BUTTON2) {
301 1 1. mouseClicked : removed call to com/jsql/view/swing/action/ActionCloseTabResult::perform → NO_COVERAGE
                ActionCloseTabResult.perform(i);
302
            }
303
        }
304
    }
305
    
306
    public final DnDDropLocation getDropLocation() {
307 1 1. getDropLocation : replaced return value with null for com/jsql/view/swing/tab/dnd/DnDTabbedPane::getDropLocation → NO_COVERAGE
        return this.dropLocation;
308
    }
309
}

Mutations

42

1.1
Location : getIndex
Killed by : none
replaced int return with 0 for com/jsql/view/swing/tab/dnd/DnDTabbedPane$DnDDropLocation::getIndex → NO_COVERAGE

50

1.1
Location : isDroppable
Killed by : none
replaced boolean return with true for com/jsql/view/swing/tab/dnd/DnDTabbedPane$DnDDropLocation::isDroppable → NO_COVERAGE

2.2
Location : isDroppable
Killed by : none
replaced boolean return with false for com/jsql/view/swing/tab/dnd/DnDTabbedPane$DnDDropLocation::isDroppable → NO_COVERAGE

59

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

60

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

62

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

68

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

71

1.1
Location : clickArrowButton
Killed by : none
removed call to java/util/Optional::ifPresent → NO_COVERAGE

77

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

78

1.1
Location : autoScrollTest
Killed by : none
removed call to java/awt/Rectangle::setBounds → NO_COVERAGE

79

1.1
Location : autoScrollTest
Killed by : none
removed call to java/awt/Rectangle::setBounds → NO_COVERAGE

2.2
Location : autoScrollTest
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

3.3
Location : autoScrollTest
Killed by : none
Replaced integer subtraction with addition → NO_COVERAGE

4.4
Location : autoScrollTest
Killed by : none
Replaced integer subtraction with addition → NO_COVERAGE

81

1.1
Location : autoScrollTest
Killed by : none
removed call to java/awt/Rectangle::setBounds → NO_COVERAGE

82

1.1
Location : autoScrollTest
Killed by : none
removed call to java/awt/Rectangle::setBounds → NO_COVERAGE

2.2
Location : autoScrollTest
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

3.3
Location : autoScrollTest
Killed by : none
Replaced integer subtraction with addition → NO_COVERAGE

4.4
Location : autoScrollTest
Killed by : none
Replaced integer subtraction with addition → NO_COVERAGE

85

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

86

1.1
Location : autoScrollTest
Killed by : none
removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::clickArrowButton → NO_COVERAGE

87

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

88

1.1
Location : autoScrollTest
Killed by : none
removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::clickArrowButton → NO_COVERAGE

96

1.1
Location : <init>
Killed by : none
removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::addMouseListener → NO_COVERAGE

97

1.1
Location : <init>
Killed by : none
removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::addMouseMotionListener → NO_COVERAGE

98

1.1
Location : <init>
Killed by : none
removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::addPropertyChangeListener → NO_COVERAGE

102

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

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

103

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

104

1.1
Location : dropLocationForPointDnD
Killed by : none
replaced return value with null for com/jsql/view/swing/tab/dnd/DnDTabbedPane::dropLocationForPointDnD → NO_COVERAGE

108

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

109

1.1
Location : dropLocationForPointDnD
Killed by : none
replaced return value with null for com/jsql/view/swing/tab/dnd/DnDTabbedPane::dropLocationForPointDnD → NO_COVERAGE

112

1.1
Location : dropLocationForPointDnD
Killed by : none
replaced return value with null for com/jsql/view/swing/tab/dnd/DnDTabbedPane::dropLocationForPointDnD → NO_COVERAGE

118

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

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

120

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

124

1.1
Location : setDropLocation
Killed by : none
removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::firePropertyChange → NO_COVERAGE

135

1.1
Location : exportTab
Killed by : none
removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::remove → NO_COVERAGE

136

1.1
Location : exportTab
Killed by : none
removed call to javax/swing/JTabbedPane::insertTab → NO_COVERAGE

137

1.1
Location : exportTab
Killed by : none
removed call to javax/swing/JTabbedPane::setEnabledAt → NO_COVERAGE

139

1.1
Location : exportTab
Killed by : none
removed call to javax/swing/JTabbedPane::setTabComponentAt → NO_COVERAGE

140

1.1
Location : exportTab
Killed by : none
removed call to javax/swing/JTabbedPane::setSelectedIndex → NO_COVERAGE

142

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

143

1.1
Location : exportTab
Killed by : none
removed call to javax/swing/JComponent::scrollRectToVisible → NO_COVERAGE

154

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

2.2
Location : convertTab
Killed by : none
Replaced integer subtraction with addition → NO_COVERAGE

3.3
Location : convertTab
Killed by : none
changed conditional boundary → NO_COVERAGE

156

1.1
Location : convertTab
Killed by : none
removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::remove → NO_COVERAGE

157

1.1
Location : convertTab
Killed by : none
removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::insertTab → NO_COVERAGE

158

1.1
Location : convertTab
Killed by : none
removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::setEnabledAt → NO_COVERAGE

162

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

163

1.1
Location : convertTab
Killed by : none
removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::setSelectedIndex → NO_COVERAGE

168

1.1
Location : convertTab
Killed by : none
removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::setTabComponentAt → NO_COVERAGE

177

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

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

178

1.1
Location : getDropLineRect
Killed by : none
removed call to java/awt/Rectangle::setBounds → NO_COVERAGE

183

1.1
Location : getDropLineRect
Killed by : none
Replaced integer subtraction with addition → NO_COVERAGE

2.2
Location : getDropLineRect
Killed by : none
Replaced integer multiplication with division → NO_COVERAGE

185

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

186

1.1
Location : getDropLineRect
Killed by : none
Replaced integer subtraction with addition → NO_COVERAGE

2.2
Location : getDropLineRect
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

3.3
Location : getDropLineRect
Killed by : none
Replaced integer multiplication with division → NO_COVERAGE

4.4
Location : getDropLineRect
Killed by : none
removed call to java/awt/Rectangle::setBounds → NO_COVERAGE

188

1.1
Location : getDropLineRect
Killed by : none
Replaced integer subtraction with addition → NO_COVERAGE

2.2
Location : getDropLineRect
Killed by : none
Replaced integer multiplication with division → NO_COVERAGE

3.3
Location : getDropLineRect
Killed by : none
removed call to java/awt/Rectangle::setBounds → NO_COVERAGE

4.4
Location : getDropLineRect
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

191

1.1
Location : getDropLineRect
Killed by : none
replaced return value with Optional.empty for com/jsql/view/swing/tab/dnd/DnDTabbedPane::getDropLineRect → NO_COVERAGE

205

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

206

1.1
Location : getTabAreaBounds
Killed by : none
Replaced integer subtraction with addition → NO_COVERAGE

207

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

208

1.1
Location : getTabAreaBounds
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

2.2
Location : getTabAreaBounds
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

211

1.1
Location : getTabAreaBounds
Killed by : none
Replaced integer subtraction with addition → NO_COVERAGE

212

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

213

1.1
Location : getTabAreaBounds
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

2.2
Location : getTabAreaBounds
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

217

1.1
Location : getTabAreaBounds
Killed by : none
removed call to java/awt/Rectangle::translate → NO_COVERAGE

2.2
Location : getTabAreaBounds
Killed by : none
removed negation → NO_COVERAGE

3.3
Location : getTabAreaBounds
Killed by : none
removed negation → NO_COVERAGE

218

1.1
Location : getTabAreaBounds
Killed by : none
replaced return value with null for com/jsql/view/swing/tab/dnd/DnDTabbedPane::getTabAreaBounds → NO_COVERAGE

222

1.1
Location : isTopBottomTabPlacement
Killed by : none
replaced boolean return with true for com/jsql/view/swing/tab/dnd/DnDTabbedPane::isTopBottomTabPlacement → NO_COVERAGE

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

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

232

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

234

1.1
Location : repaintDropLocation
Killed by : none
removed call to com/jsql/view/swing/tab/dnd/GhostGlassPane::setTargetTabbedPane → NO_COVERAGE

235

1.1
Location : repaintDropLocation
Killed by : none
removed call to com/jsql/view/swing/tab/dnd/GhostGlassPane::repaint → NO_COVERAGE

243

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

244

1.1
Location : propertyChange
Killed by : none
removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane$Handler::repaintDropLocation → NO_COVERAGE

252

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

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

253

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

270

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

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

3.3
Location : mousePressed
Killed by : none
changed conditional boundary → NO_COVERAGE

4.4
Location : mousePressed
Killed by : none
negated conditional → NO_COVERAGE

272

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

278

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

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

3.3
Location : mouseDragged
Killed by : none
changed conditional boundary → NO_COVERAGE

284

1.1
Location : mouseDragged
Killed by : none
removed call to javax/swing/TransferHandler::exportAsDrag → NO_COVERAGE

286

1.1
Location : mouseDragged
Killed by : none
removed call to java/awt/Rectangle::setBounds → NO_COVERAGE

287

1.1
Location : mouseDragged
Killed by : none
removed call to java/awt/Component::setVisible → NO_COVERAGE

288

1.1
Location : mouseDragged
Killed by : none
removed call to com/jsql/view/swing/tab/dnd/DnDTabbedPane::setDropLocation → NO_COVERAGE

300

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

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

3.3
Location : mouseClicked
Killed by : none
changed conditional boundary → NO_COVERAGE

301

1.1
Location : mouseClicked
Killed by : none
removed call to com/jsql/view/swing/action/ActionCloseTabResult::perform → NO_COVERAGE

307

1.1
Location : getDropLocation
Killed by : none
replaced return value with null for com/jsql/view/swing/tab/dnd/DnDTabbedPane::getDropLocation → NO_COVERAGE

Active mutators

Tests examined


Report generated by PIT 1.19.1