ImageTextureBuilder.java

1
package g0803.bindingofshiba.textures;
2
3
import g0803.bindingofshiba.math.Vec2D;
4
import java.awt.*;
5
import java.awt.image.BufferedImage;
6
import java.io.IOException;
7
import java.net.URL;
8
import javax.imageio.ImageIO;
9
10
public class ImageTextureBuilder implements ITextureBuilder {
11
12
    private final int width, height;
13
    private final Color[] pixels;
14
    private Vec2D anchorPoint = new Vec2D(0, 0);
15
16
    public ImageTextureBuilder(int width, int height) {
17
        this.width = width;
18
        this.height = height;
19 1 1. <init> : Replaced integer multiplication with division → KILLED
        this.pixels = new Color[width * height];
20
    }
21
22
    public ImageTextureBuilder(BufferedImage image) {
23
        this(image.getWidth(), image.getHeight());
24
        this.loadImageData(image);
25
    }
26
27
    private int getIndexFromCoordinates(int x, int y) {
28 8 1. getIndexFromCoordinates : changed conditional boundary → SURVIVED
2. getIndexFromCoordinates : changed conditional boundary → SURVIVED
3. getIndexFromCoordinates : changed conditional boundary → KILLED
4. getIndexFromCoordinates : changed conditional boundary → KILLED
5. getIndexFromCoordinates : negated conditional → KILLED
6. getIndexFromCoordinates : negated conditional → KILLED
7. getIndexFromCoordinates : negated conditional → KILLED
8. getIndexFromCoordinates : negated conditional → KILLED
        if (x < 0 || x >= width || y < 0 || y >= height)
29
            throw new IllegalArgumentException("The provided coordinates are invalid");
30
31 3 1. getIndexFromCoordinates : Replaced integer multiplication with division → KILLED
2. getIndexFromCoordinates : Replaced integer addition with subtraction → KILLED
3. getIndexFromCoordinates : replaced int return with 0 for g0803/bindingofshiba/textures/ImageTextureBuilder::getIndexFromCoordinates → KILLED
        return x + y * width;
32
    }
33
34
    public ImageTextureBuilder setAnchorPoint(double x, double y) {
35 1 1. setAnchorPoint : replaced return value with null for g0803/bindingofshiba/textures/ImageTextureBuilder::setAnchorPoint → KILLED
        return this.setAnchorPoint(new Vec2D(x, y));
36
    }
37
38
    public ImageTextureBuilder setAnchorPoint(Vec2D anchorPoint) {
39
        this.anchorPoint = anchorPoint;
40 1 1. setAnchorPoint : replaced return value with null for g0803/bindingofshiba/textures/ImageTextureBuilder::setAnchorPoint → KILLED
        return this;
41
    }
42
43
    public ImageTextureBuilder loadImageData(BufferedImage image) {
44
        int imageWidth = image.getWidth();
45
        int imageHeight = image.getHeight();
46
47 2 1. loadImageData : negated conditional → KILLED
2. loadImageData : negated conditional → KILLED
        if (width != imageWidth || height != imageHeight)
48
            throw new IllegalArgumentException(
49
                    "Image dimensions must match builder's expected dimensions");
50
51 3 1. loadImageData : changed conditional boundary → KILLED
2. loadImageData : Changed increment from 1 to -1 → KILLED
3. loadImageData : negated conditional → KILLED
        for (int x = 0; x < width; x++) {
52 3 1. loadImageData : changed conditional boundary → KILLED
2. loadImageData : Changed increment from 1 to -1 → KILLED
3. loadImageData : negated conditional → KILLED
            for (int y = 0; y < height; y++) {
53
                int index = getIndexFromCoordinates(x, y);
54
                int rgb = image.getRGB(x, y);
55
56
                this.pixels[index] = new Color(rgb, true);
57
            }
58
        }
59
60 1 1. loadImageData : replaced return value with null for g0803/bindingofshiba/textures/ImageTextureBuilder::loadImageData → KILLED
        return this;
61
    }
62
63
    public ImageTextureBuilder loadResourceData(String location) throws IOException {
64
        URL resourceLocation = ImageTextureBuilder.class.getResource(location);
65 1 1. loadResourceData : negated conditional → KILLED
        if (resourceLocation == null)
66
            throw new IOException("Could not find resource at " + location);
67
68
        BufferedImage image = ImageIO.read(resourceLocation);
69 1 1. loadResourceData : replaced return value with null for g0803/bindingofshiba/textures/ImageTextureBuilder::loadResourceData → KILLED
        return this.loadImageData(image);
70
    }
71
72
    public ImageTextureBuilder setPixelAt(int x, int y, Color c) {
73
        int index = getIndexFromCoordinates(x, y);
74
        this.pixels[index] = c;
75 1 1. setPixelAt : replaced return value with null for g0803/bindingofshiba/textures/ImageTextureBuilder::setPixelAt → KILLED
        return this;
76
    }
77
78
    @Override
79
    public StaticTexture build() {
80 1 1. build : replaced return value with null for g0803/bindingofshiba/textures/ImageTextureBuilder::build → KILLED
        return new StaticTexture(width, height, anchorPoint, pixels);
81
    }
82
}

Mutations

19

1.1
Location : <init>
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:defaultAnchorPoint()]
Replaced integer multiplication with division → KILLED

28

1.1
Location : getIndexFromCoordinates
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:copiesImage()]
changed conditional boundary → KILLED

2.2
Location : getIndexFromCoordinates
Killed by : none
changed conditional boundary → SURVIVED

3.3
Location : getIndexFromCoordinates
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:copiesImage()]
changed conditional boundary → KILLED

4.4
Location : getIndexFromCoordinates
Killed by : none
changed conditional boundary → SURVIVED

5.5
Location : getIndexFromCoordinates
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:pixelModificationMustBeDoneInsideTheImageArea()]
negated conditional → KILLED

6.6
Location : getIndexFromCoordinates
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:pixelModificationMustBeDoneInsideTheImageArea()]
negated conditional → KILLED

7.7
Location : getIndexFromCoordinates
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:pixelModificationMustBeDoneInsideTheImageArea()]
negated conditional → KILLED

8.8
Location : getIndexFromCoordinates
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:pixelModificationMustBeDoneInsideTheImageArea()]
negated conditional → KILLED

31

1.1
Location : getIndexFromCoordinates
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:copiesImage()]
Replaced integer multiplication with division → KILLED

2.2
Location : getIndexFromCoordinates
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:copiesImage()]
Replaced integer addition with subtraction → KILLED

3.3
Location : getIndexFromCoordinates
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:copiesImage()]
replaced int return with 0 for g0803/bindingofshiba/textures/ImageTextureBuilder::getIndexFromCoordinates → KILLED

35

1.1
Location : setAnchorPoint
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:setAnchorPoint()]
replaced return value with null for g0803/bindingofshiba/textures/ImageTextureBuilder::setAnchorPoint → KILLED

40

1.1
Location : setAnchorPoint
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:setAnchorPoint()]
replaced return value with null for g0803/bindingofshiba/textures/ImageTextureBuilder::setAnchorPoint → KILLED

47

1.1
Location : loadImageData
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:copiesImage()]
negated conditional → KILLED

2.2
Location : loadImageData
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:throwsIfDimensionsDontMatch()]
negated conditional → KILLED

51

1.1
Location : loadImageData
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:copiesImage()]
changed conditional boundary → KILLED

2.2
Location : loadImageData
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:copiesImage()]
Changed increment from 1 to -1 → KILLED

3.3
Location : loadImageData
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:copiesImage()]
negated conditional → KILLED

52

1.1
Location : loadImageData
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:copiesImage()]
changed conditional boundary → KILLED

2.2
Location : loadImageData
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:copiesImage()]
Changed increment from 1 to -1 → KILLED

3.3
Location : loadImageData
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:copiesImage()]
negated conditional → KILLED

60

1.1
Location : loadImageData
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:loadResourceData()]
replaced return value with null for g0803/bindingofshiba/textures/ImageTextureBuilder::loadImageData → KILLED

65

1.1
Location : loadResourceData
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:throwsIfResourceNotFound()]
negated conditional → KILLED

69

1.1
Location : loadResourceData
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:loadResourceData()]
replaced return value with null for g0803/bindingofshiba/textures/ImageTextureBuilder::loadResourceData → KILLED

75

1.1
Location : setPixelAt
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:setPixelAt()]
replaced return value with null for g0803/bindingofshiba/textures/ImageTextureBuilder::setPixelAt → KILLED

80

1.1
Location : build
Killed by : g0803.bindingofshiba.textures.ImageTextureBuilderTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.textures.ImageTextureBuilderTest]/[method:defaultAnchorPoint()]
replaced return value with null for g0803/bindingofshiba/textures/ImageTextureBuilder::build → KILLED

Active mutators

Tests examined


Report generated by PIT 1.7.0