{"action":"created","comment":{"url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/pulls/comments/23486978","id":23486978,"diff_hunk":"@@ -0,0 +1,209 @@\n+package com.fundynamic.d2tm.game.event;\n+\n+import com.fundynamic.d2tm.Game;\n+import com.fundynamic.d2tm.game.Viewport;\n+import com.fundynamic.d2tm.game.drawing.DrawableViewPort;\n+import com.fundynamic.d2tm.game.map.Map;\n+import com.fundynamic.d2tm.game.math.Vector2D;\n+import com.fundynamic.d2tm.graphics.Tile;\n+import junit.framework.Assert;\n+import org.junit.Before;\n+import org.junit.Test;\n+import org.junit.runner.RunWith;\n+import org.mockito.Mock;\n+import org.mockito.Mockito;\n+import org.mockito.runners.MockitoJUnitRunner;\n+import org.newdawn.slick.Graphics;\n+import org.newdawn.slick.SlickException;\n+\n+import static com.fundynamic.d2tm.Game.SCREEN_HEIGHT;\n+import static com.fundynamic.d2tm.Game.SCREEN_WIDTH;\n+import static org.mockito.Mockito.mock;\n+import static org.mockito.Mockito.times;\n+\n+@RunWith(MockitoJUnitRunner.class)\n+public class DrawableViewPortMoverListenerTest {\n+    public static final float MOVE_SPEED = 2.0F;\n+\n+    public static final int ANY_COORDINATE_NOT_NEAR_BORDER = 100;\n+    public static final float INITIAL_VIEWPORT_X = 4F;\n+    public static final float INITIAL_VIEWPORT_Y = 4F;\n+\n+    public static int HEIGHT_OF_MAP = 20;\n+    public static int WIDTH_OF_MAP = 26;\n+\n+    @Mock\n+    private Viewport viewport;\n+\n+    private DrawableViewPort drawableViewPort;\n+    private DrawableViewPortMoverListener listener;\n+\n+    private int renderAndUpdatedCalled;\n+\n+    @Before\n+    public void setUp() throws SlickException {\n+        Mockito.when(viewport.getMap()).thenReturn(new Map(null, WIDTH_OF_MAP, HEIGHT_OF_MAP));\n+\n+        drawableViewPort = new DrawableViewPort(viewport, new Vector2D<>(INITIAL_VIEWPORT_X, INITIAL_VIEWPORT_Y), mock(Graphics.class), MOVE_SPEED);\n+        listener = new DrawableViewPortMoverListener(drawableViewPort);\n+\n+\n+        renderAndUpdatedCalled = 0;\n+    }\n+\n+    @Test\n+    public void mouseHittingLeftBorderOfScreenMovesViewportToLeft() throws SlickException {\n+        // moved to 2 pixels close to the left of the screen\n+        listener.mouseMoved(3, ANY_COORDINATE_NOT_NEAR_BORDER, 2, ANY_COORDINATE_NOT_NEAR_BORDER);\n+\n+        Vector2D<Float> viewportVector = updateAndRenderAndReturnNewViewportVector();\n+\n+        Assert.assertEquals(INITIAL_VIEWPORT_X - MOVE_SPEED, viewportVector.getX(), 0.0001F);\n+        Assert.assertEquals(INITIAL_VIEWPORT_Y, viewportVector.getY(), 0.0001F);\n+    }\n+\n+    @Test\n+    public void mouseHittingRightBorderOfScreenMovesViewportToRight() throws SlickException {\n+        // moved to 2 pixels close to the right of the screen\n+        listener.mouseMoved(SCREEN_WIDTH - 3, ANY_COORDINATE_NOT_NEAR_BORDER, SCREEN_WIDTH - 2, ANY_COORDINATE_NOT_NEAR_BORDER);\n+\n+        Vector2D<Float> viewportVector = updateAndRenderAndReturnNewViewportVector();\n+\n+        Assert.assertEquals(INITIAL_VIEWPORT_X + MOVE_SPEED, viewportVector.getX(), 0.0001F);\n+        Assert.assertEquals(INITIAL_VIEWPORT_Y, viewportVector.getY(), 0.0001F);\n+    }\n+\n+    @Test\n+    public void mouseHittingTopOfScreenMovesViewportUp() throws SlickException {\n+        // moved to 2 pixels close to the top of the screen\n+        listener.mouseMoved(ANY_COORDINATE_NOT_NEAR_BORDER, 3, ANY_COORDINATE_NOT_NEAR_BORDER, 2);\n+\n+        Vector2D<Float> viewportVector = updateAndRenderAndReturnNewViewportVector();\n+\n+        Assert.assertEquals(INITIAL_VIEWPORT_X, viewportVector.getX(), 0.0001F);\n+        Assert.assertEquals(INITIAL_VIEWPORT_Y - MOVE_SPEED, viewportVector.getY(), 0.0001F);\n+    }\n+\n+    @Test\n+    public void mouseHittingBottomOfScreenMovesViewportDown() throws SlickException {\n+        // moved to 2 pixels close to the bottom of the screen\n+        listener.mouseMoved(ANY_COORDINATE_NOT_NEAR_BORDER, SCREEN_HEIGHT - 3, ANY_COORDINATE_NOT_NEAR_BORDER, SCREEN_HEIGHT - 2);\n+\n+        Vector2D<Float> viewportVector = updateAndRenderAndReturnNewViewportVector();\n+\n+        Assert.assertEquals(INITIAL_VIEWPORT_X, viewportVector.getX(), 0.0001F);\n+        Assert.assertEquals(INITIAL_VIEWPORT_Y + MOVE_SPEED, viewportVector.getY(), 0.0001F);\n+    }\n+\n+    @Test\n+    public void mouseFromTopLeftToNoBorderStopsMoving() throws SlickException {\n+        // this updates viewport coordinates one move up and to the left\n+        listener.mouseMoved(ANY_COORDINATE_NOT_NEAR_BORDER, ANY_COORDINATE_NOT_NEAR_BORDER, 0, 0);\n+        updateAndRender(); // and move the viewport\n+        Vector2D<Float> tickOneViewportVector = drawableViewPort.getViewingVector();\n+\n+        // move back to the middle\n+        listener.mouseMoved(0, 0, ANY_COORDINATE_NOT_NEAR_BORDER, ANY_COORDINATE_NOT_NEAR_BORDER);\n+        updateAndRender(); // and stop moving\n+\n+        // Check that the viewport stopped moving\n+        Vector2D<Float> viewportVector = getLastCalledViewport();\n+        Assert.assertEquals(\"Y position moved while expected to have stopped\", tickOneViewportVector.getY(), viewportVector.getY(), 0.0001F);\n+        Assert.assertEquals(\"X position moved while expected to have stopped\", tickOneViewportVector.getX(), viewportVector.getX(), 0.0001F);\n+    }\n+\n+    @Test\n+    public void mouseFromBottomRightToNoBorderStopsMoving() throws SlickException {\n+        // this updates viewport coordinates one move up and to the left\n+        listener.mouseMoved(ANY_COORDINATE_NOT_NEAR_BORDER, ANY_COORDINATE_NOT_NEAR_BORDER, SCREEN_WIDTH, SCREEN_HEIGHT);\n+        updateAndRender(); // and move the viewport\n+        Vector2D<Float> tickOneViewportVector = drawableViewPort.getViewingVector();\n+\n+        // move back to the middle\n+        listener.mouseMoved(SCREEN_WIDTH, SCREEN_HEIGHT, ANY_COORDINATE_NOT_NEAR_BORDER, ANY_COORDINATE_NOT_NEAR_BORDER);\n+        updateAndRender(); // and stop moving\n+\n+        // Check that the viewport stopped moving\n+        Vector2D<Float> viewportVector = getLastCalledViewport();\n+        Assert.assertEquals(\"Y position moved while expected to have stopped\", tickOneViewportVector.getY(), viewportVector.getY(), 0.0001F);\n+        Assert.assertEquals(\"X position moved while expected to have stopped\", tickOneViewportVector.getX(), viewportVector.getX(), 0.0001F);\n+    }\n+\n+    @Test\n+    public void stopsMovingLeftWhenAtTheLeftEdge() throws SlickException {\n+        listener.mouseMoved(0, ANY_COORDINATE_NOT_NEAR_BORDER, 0, ANY_COORDINATE_NOT_NEAR_BORDER); // move left\n+        updateAndRender();\n+        updateAndRender();\n+        updateAndRender();\n+\n+        Vector2D<Float> viewportVector = getLastCalledViewport();\n+        Assert.assertEquals(\"X position moved over the edge\", 0F, viewportVector.getX(), 0.0001F);\n+    }\n+\n+    @Test\n+    public void stopsMovingUpWhenAtTheUpperEdge() throws SlickException {\n+        listener.mouseMoved(ANY_COORDINATE_NOT_NEAR_BORDER, 0, ANY_COORDINATE_NOT_NEAR_BORDER, 0); // move up\n+        updateAndRender();\n+        updateAndRender();\n+        updateAndRender();\n+\n+        Vector2D<Float> viewportVector = getLastCalledViewport();\n+        Assert.assertEquals(\"Y position moved over the edge\", 0F, viewportVector.getY(), 0.0001F);\n+    }\n+\n+    @Test\n+    public void stopsMovingDownWhenAtTheBottomEdge() throws SlickException {\n+        int viewportX = 0;\n+        int viewportY = 0;\n+        float moveSpeed = 16F;\n+\n+        float maxYViewportPosition = (HEIGHT_OF_MAP * Tile.HEIGHT) - Game.SCREEN_HEIGHT;\n+\n+        drawableViewPort = new DrawableViewPort(viewport, Vector2D.zero(), new Vector2D<>(viewportX, viewportY), mock(Graphics.class), moveSpeed);\n+        listener = new DrawableViewPortMoverListener(drawableViewPort);\n+\n+        listener.mouseMoved(ANY_COORDINATE_NOT_NEAR_BORDER, SCREEN_HEIGHT, ANY_COORDINATE_NOT_NEAR_BORDER, SCREEN_HEIGHT); // move down\n+        updateAndRender();\n+        updateAndRender();\n+        updateAndRender();\n+\n+        Vector2D<Float> viewportVector = getLastCalledViewport();\n+        Assert.assertEquals(\"Y position moved over the bottom\", maxYViewportPosition, viewportVector.getY(), 0.0001F);\n+    }\n+\n+    @Test\n+    public void stopsMovingRightWhenAtTheRightEdge() throws SlickException {\n+        int viewportX = 0;\n+        int viewportY = 0;\n+        float moveSpeed = 16F;\n+\n+        float maxXViewportPosition = (WIDTH_OF_MAP * Tile.WIDTH) - Game.SCREEN_WIDTH;\n+\n+        drawableViewPort = new DrawableViewPort(viewport, Vector2D.zero(), new Vector2D<>(viewportX, viewportY), mock(Graphics.class), moveSpeed);\n+        listener = new DrawableViewPortMoverListener(drawableViewPort);\n+\n+        listener.mouseMoved(SCREEN_WIDTH, ANY_COORDINATE_NOT_NEAR_BORDER, SCREEN_WIDTH, ANY_COORDINATE_NOT_NEAR_BORDER); // move right\n+        updateAndRender();\n+        updateAndRender();","path":"src/test/java/com/fundynamic/d2tm/game/event/DrawableViewPortMoverListenerTest.java","position":187,"original_position":187,"commit_id":"30f3966a56ae01da7202eb51db539c92cb2ae9e9","original_commit_id":"30f3966a56ae01da7202eb51db539c92cb2ae9e9","user":{"login":"arjenvanderende","id":357115,"avatar_url":"https://avatars.githubusercontent.com/u/357115?v=3","gravatar_id":"","url":"https://api.github.com/users/arjenvanderende","html_url":"https://github.com/arjenvanderende","followers_url":"https://api.github.com/users/arjenvanderende/followers","following_url":"https://api.github.com/users/arjenvanderende/following{/other_user}","gists_url":"https://api.github.com/users/arjenvanderende/gists{/gist_id}","starred_url":"https://api.github.com/users/arjenvanderende/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/arjenvanderende/subscriptions","organizations_url":"https://api.github.com/users/arjenvanderende/orgs","repos_url":"https://api.github.com/users/arjenvanderende/repos","events_url":"https://api.github.com/users/arjenvanderende/events{/privacy}","received_events_url":"https://api.github.com/users/arjenvanderende/received_events","type":"User","site_admin":false},"body":"Why call `updateAndRender` twice? Can we use a larger moveSpeed instead?","created_at":"2015-01-23T22:59:25Z","updated_at":"2015-01-23T22:59:25Z","html_url":"https://github.com/stefanhendriks/dune2themaker4j/pull/11#discussion_r23486978","pull_request_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/pulls/11","_links":{"self":{"href":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/pulls/comments/23486978"},"html":{"href":"https://github.com/stefanhendriks/dune2themaker4j/pull/11#discussion_r23486978"},"pull_request":{"href":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/pulls/11"}}},"pull_request":{"url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/pulls/11","id":27952928,"html_url":"https://github.com/stefanhendriks/dune2themaker4j/pull/11","diff_url":"https://github.com/stefanhendriks/dune2themaker4j/pull/11.diff","patch_url":"https://github.com/stefanhendriks/dune2themaker4j/pull/11.patch","issue_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/issues/11","number":11,"state":"open","locked":false,"title":"Feature/event handling","user":{"login":"stefanhendriks","id":1332066,"avatar_url":"https://avatars.githubusercontent.com/u/1332066?v=3","gravatar_id":"","url":"https://api.github.com/users/stefanhendriks","html_url":"https://github.com/stefanhendriks","followers_url":"https://api.github.com/users/stefanhendriks/followers","following_url":"https://api.github.com/users/stefanhendriks/following{/other_user}","gists_url":"https://api.github.com/users/stefanhendriks/gists{/gist_id}","starred_url":"https://api.github.com/users/stefanhendriks/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stefanhendriks/subscriptions","organizations_url":"https://api.github.com/users/stefanhendriks/orgs","repos_url":"https://api.github.com/users/stefanhendriks/repos","events_url":"https://api.github.com/users/stefanhendriks/events{/privacy}","received_events_url":"https://api.github.com/users/stefanhendriks/received_events","type":"User","site_admin":false},"body":"Solves #3\r\n\r\n- [x] game can quit using keyboard key event\r\n- [x] scrolling is done using mouse events hitting border of screen\r\n\r\n","created_at":"2015-01-23T20:30:47Z","updated_at":"2015-01-23T22:59:25Z","closed_at":null,"merged_at":null,"merge_commit_sha":"022a18f4b5edc1d5a6d05980dc8e2b2b126cf998","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/pulls/11/commits","review_comments_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/pulls/11/comments","review_comment_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/pulls/comments/{number}","comments_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/issues/11/comments","statuses_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/statuses/30f3966a56ae01da7202eb51db539c92cb2ae9e9","head":{"label":"stefanhendriks:feature/event-handling","ref":"feature/event-handling","sha":"30f3966a56ae01da7202eb51db539c92cb2ae9e9","user":{"login":"stefanhendriks","id":1332066,"avatar_url":"https://avatars.githubusercontent.com/u/1332066?v=3","gravatar_id":"","url":"https://api.github.com/users/stefanhendriks","html_url":"https://github.com/stefanhendriks","followers_url":"https://api.github.com/users/stefanhendriks/followers","following_url":"https://api.github.com/users/stefanhendriks/following{/other_user}","gists_url":"https://api.github.com/users/stefanhendriks/gists{/gist_id}","starred_url":"https://api.github.com/users/stefanhendriks/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stefanhendriks/subscriptions","organizations_url":"https://api.github.com/users/stefanhendriks/orgs","repos_url":"https://api.github.com/users/stefanhendriks/repos","events_url":"https://api.github.com/users/stefanhendriks/events{/privacy}","received_events_url":"https://api.github.com/users/stefanhendriks/received_events","type":"User","site_admin":false},"repo":{"id":6035925,"name":"dune2themaker4j","full_name":"stefanhendriks/dune2themaker4j","owner":{"login":"stefanhendriks","id":1332066,"avatar_url":"https://avatars.githubusercontent.com/u/1332066?v=3","gravatar_id":"","url":"https://api.github.com/users/stefanhendriks","html_url":"https://github.com/stefanhendriks","followers_url":"https://api.github.com/users/stefanhendriks/followers","following_url":"https://api.github.com/users/stefanhendriks/following{/other_user}","gists_url":"https://api.github.com/users/stefanhendriks/gists{/gist_id}","starred_url":"https://api.github.com/users/stefanhendriks/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stefanhendriks/subscriptions","organizations_url":"https://api.github.com/users/stefanhendriks/orgs","repos_url":"https://api.github.com/users/stefanhendriks/repos","events_url":"https://api.github.com/users/stefanhendriks/events{/privacy}","received_events_url":"https://api.github.com/users/stefanhendriks/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/stefanhendriks/dune2themaker4j","description":"Dune 2 The Maker in Java","fork":false,"url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j","forks_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/forks","keys_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/keys{/key_id}","collaborators_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/teams","hooks_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/hooks","issue_events_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/issues/events{/number}","events_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/events","assignees_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/assignees{/user}","branches_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/branches{/branch}","tags_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/tags","blobs_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/git/refs{/sha}","trees_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/git/trees{/sha}","statuses_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/statuses/{sha}","languages_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/languages","stargazers_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/stargazers","contributors_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/contributors","subscribers_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/subscribers","subscription_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/subscription","commits_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/commits{/sha}","git_commits_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/git/commits{/sha}","comments_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/comments{/number}","issue_comment_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/issues/comments/{number}","contents_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/contents/{+path}","compare_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/compare/{base}...{head}","merges_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/merges","archive_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/downloads","issues_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/issues{/number}","pulls_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/pulls{/number}","milestones_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/milestones{/number}","notifications_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/labels{/name}","releases_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/releases{/id}","created_at":"2012-10-01T20:36:52Z","updated_at":"2015-01-22T14:03:23Z","pushed_at":"2015-01-23T20:55:15Z","git_url":"git://github.com/stefanhendriks/dune2themaker4j.git","ssh_url":"git@github.com:stefanhendriks/dune2themaker4j.git","clone_url":"https://github.com/stefanhendriks/dune2themaker4j.git","svn_url":"https://github.com/stefanhendriks/dune2themaker4j","homepage":null,"size":11930,"stargazers_count":7,"watchers_count":7,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":4,"mirror_url":null,"open_issues_count":7,"forks":4,"open_issues":7,"watchers":7,"default_branch":"master"}},"base":{"label":"stefanhendriks:master","ref":"master","sha":"3dafb14562e55b39a3c1c38f7f5ae7b1188a3c59","user":{"login":"stefanhendriks","id":1332066,"avatar_url":"https://avatars.githubusercontent.com/u/1332066?v=3","gravatar_id":"","url":"https://api.github.com/users/stefanhendriks","html_url":"https://github.com/stefanhendriks","followers_url":"https://api.github.com/users/stefanhendriks/followers","following_url":"https://api.github.com/users/stefanhendriks/following{/other_user}","gists_url":"https://api.github.com/users/stefanhendriks/gists{/gist_id}","starred_url":"https://api.github.com/users/stefanhendriks/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stefanhendriks/subscriptions","organizations_url":"https://api.github.com/users/stefanhendriks/orgs","repos_url":"https://api.github.com/users/stefanhendriks/repos","events_url":"https://api.github.com/users/stefanhendriks/events{/privacy}","received_events_url":"https://api.github.com/users/stefanhendriks/received_events","type":"User","site_admin":false},"repo":{"id":6035925,"name":"dune2themaker4j","full_name":"stefanhendriks/dune2themaker4j","owner":{"login":"stefanhendriks","id":1332066,"avatar_url":"https://avatars.githubusercontent.com/u/1332066?v=3","gravatar_id":"","url":"https://api.github.com/users/stefanhendriks","html_url":"https://github.com/stefanhendriks","followers_url":"https://api.github.com/users/stefanhendriks/followers","following_url":"https://api.github.com/users/stefanhendriks/following{/other_user}","gists_url":"https://api.github.com/users/stefanhendriks/gists{/gist_id}","starred_url":"https://api.github.com/users/stefanhendriks/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stefanhendriks/subscriptions","organizations_url":"https://api.github.com/users/stefanhendriks/orgs","repos_url":"https://api.github.com/users/stefanhendriks/repos","events_url":"https://api.github.com/users/stefanhendriks/events{/privacy}","received_events_url":"https://api.github.com/users/stefanhendriks/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/stefanhendriks/dune2themaker4j","description":"Dune 2 The Maker in Java","fork":false,"url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j","forks_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/forks","keys_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/keys{/key_id}","collaborators_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/teams","hooks_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/hooks","issue_events_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/issues/events{/number}","events_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/events","assignees_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/assignees{/user}","branches_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/branches{/branch}","tags_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/tags","blobs_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/git/refs{/sha}","trees_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/git/trees{/sha}","statuses_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/statuses/{sha}","languages_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/languages","stargazers_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/stargazers","contributors_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/contributors","subscribers_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/subscribers","subscription_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/subscription","commits_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/commits{/sha}","git_commits_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/git/commits{/sha}","comments_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/comments{/number}","issue_comment_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/issues/comments/{number}","contents_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/contents/{+path}","compare_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/compare/{base}...{head}","merges_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/merges","archive_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/downloads","issues_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/issues{/number}","pulls_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/pulls{/number}","milestones_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/milestones{/number}","notifications_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/labels{/name}","releases_url":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/releases{/id}","created_at":"2012-10-01T20:36:52Z","updated_at":"2015-01-22T14:03:23Z","pushed_at":"2015-01-23T20:55:15Z","git_url":"git://github.com/stefanhendriks/dune2themaker4j.git","ssh_url":"git@github.com:stefanhendriks/dune2themaker4j.git","clone_url":"https://github.com/stefanhendriks/dune2themaker4j.git","svn_url":"https://github.com/stefanhendriks/dune2themaker4j","homepage":null,"size":11930,"stargazers_count":7,"watchers_count":7,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":4,"mirror_url":null,"open_issues_count":7,"forks":4,"open_issues":7,"watchers":7,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/pulls/11"},"html":{"href":"https://github.com/stefanhendriks/dune2themaker4j/pull/11"},"issue":{"href":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/issues/11"},"comments":{"href":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/issues/11/comments"},"review_comments":{"href":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/pulls/11/comments"},"review_comment":{"href":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/pulls/11/commits"},"statuses":{"href":"https://api.github.com/repos/stefanhendriks/dune2themaker4j/statuses/30f3966a56ae01da7202eb51db539c92cb2ae9e9"}}}}