133873d2b41a5cd2597b20a4e88eb8942944c0f23Tyler Schultzpackage com.xtremelabs.robolectric.shadows;
248d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard
348d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richardimport android.graphics.Point;
422c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implementation;
522c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implements;
622c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.RealObject;
748d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard
8537f38b99433fee0ee08d7c634763e7381942f58Phil Goodwinimport static com.xtremelabs.robolectric.Robolectric.shadowOf_;
9537f38b99433fee0ee08d7c634763e7381942f58Phil Goodwin
1059d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin/**
1159d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin * Shadow implementation of {@code Point}
1259d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin */
1348d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard@Implements(Point.class)
14afe0a89d904a7fe2f5980b9deb26cc3240192459Christian Williamspublic class ShadowPoint {
154a7b7902404d0c3743f96c043e3cc6b9069cf438Christian Williams    @RealObject private Point realPoint;
1648d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard
1748d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard    public void __constructor__(int x, int y) {
1848d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard        realPoint.x = x;
1948d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard        realPoint.y = y;
2048d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard    }
2148d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard
2248d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard    public void __constructor__(Point src) {
2348d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard        realPoint.x = src.x;
2448d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard        realPoint.y = src.y;
2548d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard    }
2648d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard
27de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
2848d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard    public void set(int x, int y) {
2948d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard        realPoint.x = x;
3048d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard        realPoint.y = y;
3148d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard    }
3248d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard
33de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
3448d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard    public final void negate() {
3548d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard        realPoint.x = -realPoint.x;
3648d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard        realPoint.y = -realPoint.y;
3748d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard    }
3848d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard
39de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
4048d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard    public final void offset(int dx, int dy) {
4148d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard        realPoint.x += dx;
4248d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard        realPoint.y += dy;
4348d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard    }
4448d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard
45bbf6ae3d37d2303d8463094096ef0bb9906fd658Christian Williams    @Override @Implementation
46bbf6ae3d37d2303d8463094096ef0bb9906fd658Christian Williams    public boolean equals(Object object) {
47537f38b99433fee0ee08d7c634763e7381942f58Phil Goodwin        if (object == null) return false;
48537f38b99433fee0ee08d7c634763e7381942f58Phil Goodwin        Object o = shadowOf_(object);
49537f38b99433fee0ee08d7c634763e7381942f58Phil Goodwin        if (o == null) return false;
50537f38b99433fee0ee08d7c634763e7381942f58Phil Goodwin        if (this == o) return true;
51537f38b99433fee0ee08d7c634763e7381942f58Phil Goodwin        if (getClass() != o.getClass()) return false;
52537f38b99433fee0ee08d7c634763e7381942f58Phil Goodwin
53537f38b99433fee0ee08d7c634763e7381942f58Phil Goodwin        ShadowPoint that = (ShadowPoint) o;
54537f38b99433fee0ee08d7c634763e7381942f58Phil Goodwin        if (this.realPoint.x == that.realPoint.x && this.realPoint.y == that.realPoint.y) return true;
55adfaceabbda4c8c51f24a0def8926075bd7306adChristian Williams
5648d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard        return false;
5748d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard    }
5848d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard
59bbf6ae3d37d2303d8463094096ef0bb9906fd658Christian Williams    @Override @Implementation
60bbf6ae3d37d2303d8463094096ef0bb9906fd658Christian Williams    public int hashCode() {
6148d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard        return realPoint.x * 32713 + realPoint.y;
6248d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard    }
6348d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard
64bbf6ae3d37d2303d8463094096ef0bb9906fd658Christian Williams    @Override @Implementation
65bbf6ae3d37d2303d8463094096ef0bb9906fd658Christian Williams    public String toString() {
6648d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard        return "Point(" + realPoint.x + ", " + realPoint.y + ")";
6748d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard    }
6859d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin
6959d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin    /**
7059d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     * Non-Android utility method for comparing a point to a well-known value
7159d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     *
7259d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     * @param x x
7359d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     * @param y y
7459d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     * @return this.x == x && this.y == y
7559d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     */
76de2143a1bef92c4ef270d3391b9201e8b8af7051Christian Williams    @Implementation
7759d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin    public final boolean equals(int x, int y) {
7859d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin        return realPoint.x == x && realPoint.y == y;
7959d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin    }
8048d362f6d040992990b0130057fa25748bea16cfChristian Williams & Ryan Richard}
81