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