{"action":"created","comment":{"url":"https://api.github.com/repos/dotnet/corefx/pulls/comments/44930690","id":44930690,"diff_hunk":"@@ -27,18 +29,637 @@ public ClientWebSocketTest(ITestOutputHelper output)\n \n         private static bool WebSocketsSupported { get { return WebSocketHelper.WebSocketsSupported; } }\n \n+#region Connect\n         [ConditionalTheory(\"WebSocketsSupported\"), MemberData(\"EchoServers\")]\n         public async Task EchoBinaryMessage_Success(Uri server)\n         {\n-            var helper = new WebSocketHelper(server, s_TimeOutMilliseconds);\n-            await helper.TestEcho(WebSocketMessageType.Binary);\n+            await WebSocketHelper.TestEcho(server, WebSocketMessageType.Binary, TimeOutMilliseconds, _output);\n         }\n \n         [ConditionalTheory(\"WebSocketsSupported\"), MemberData(\"EchoServers\")]\n         public async Task EchoTextMessage_Success(Uri server)\n         {\n-            var helper = new WebSocketHelper(server, s_TimeOutMilliseconds);\n-            await helper.TestEcho(WebSocketMessageType.Text);\n+            await WebSocketHelper.TestEcho(server, WebSocketMessageType.Text, TimeOutMilliseconds, _output);\n+        }\n+\n+        [ConditionalTheory(\"WebSocketsSupported\"), MemberData(\"EchoHeadersServers\")]\n+        public async Task ConnectAsync_AddCustomHeaders_Success(Uri server)\n+        {\n+            using (var cws = new ClientWebSocket())\n+            {\n+                cws.Options.SetRequestHeader(\"X-CustomHeader1\", \"Value1\");\n+                cws.Options.SetRequestHeader(\"X-CustomHeader2\", \"Value2\");\n+                using (var cts = new CancellationTokenSource(TimeOutMilliseconds))\n+                {\n+                    Task taskConnect = cws.ConnectAsync(server, cts.Token);\n+                    Assert.True(\n+                        (cws.State == WebSocketState.None) ||\n+                        (cws.State == WebSocketState.Connecting) ||\n+                        (cws.State == WebSocketState.Open),\n+                        \"State immediately after ConnectAsync incorrect: \" + cws.State);\n+                    await taskConnect;\n+                }\n+\n+                Assert.Equal(WebSocketState.Open, cws.State);\n+\n+                byte[] buffer = new byte[65536];\n+                var segment = new ArraySegment<byte>(buffer, 0, buffer.Length);\n+                WebSocketReceiveResult recvResult;\n+                using (var cts = new CancellationTokenSource(TimeOutMilliseconds))\n+                {\n+                    recvResult = await cws.ReceiveAsync(segment, cts.Token);\n+                }\n+\n+                Assert.Equal(WebSocketMessageType.Text, recvResult.MessageType);\n+                string headers = WebSocketData.GetTextFromBuffer(segment);\n+                Assert.True(headers.Contains(\"X-CustomHeader1:Value1\"));\n+                Assert.True(headers.Contains(\"X-CustomHeader2:Value2\"));\n+\n+                await cws.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None);\n+            }\n+        }\n+#endregion\n+\n+#region SendReceive\n+        [ConditionalTheory(\"WebSocketsSupported\"), MemberData(\"EchoServers\")]\n+        public async Task SendReceive_PartialMessage_Success(Uri server)\n+        {\n+            var sendBuffer = new byte[1024];\n+            var sendSegment = new ArraySegment<byte>(sendBuffer);\n+\n+            var receiveBuffer = new byte[1024];\n+            var receiveSegment = new ArraySegment<byte>(receiveBuffer);\n+            \n+            using (ClientWebSocket cws = await WebSocketHelper.GetConnectedWebSocket(server, TimeOutMilliseconds, _output))\n+            {\n+                var ctsDefault = new CancellationTokenSource(TimeOutMilliseconds);\n+\n+                // The server will read buffers and aggregate it up to 64KB before echoing back a complete message.\n+                // But since this test uses a receive buffer that is small, we will get back partial message fragments\n+                // as we read them until we read the complete message payload.\n+                for (int i = 0; i < 63; i++)\n+                {\n+                    await cws.SendAsync(sendSegment, WebSocketMessageType.Binary, false, ctsDefault.Token);\n+                }\n+                await cws.SendAsync(sendSegment, WebSocketMessageType.Binary, true, ctsDefault.Token);\n+\n+                WebSocketReceiveResult recvResult = await cws.ReceiveAsync(receiveSegment, ctsDefault.Token);\n+                Assert.Equal(false, recvResult.EndOfMessage);\n+\n+                while (recvResult.EndOfMessage == false)\n+                {\n+                    recvResult = await cws.ReceiveAsync(receiveSegment, ctsDefault.Token);\n+                }\n+\n+                await cws.CloseAsync(WebSocketCloseStatus.NormalClosure, \"PartialMessageTest\", ctsDefault.Token);\n+            }\n+        }\n+\n+        [ConditionalTheory(\"WebSocketsSupported\"), MemberData(\"EchoServers\")]\n+        public async Task SendAsync_SendCloseMessageType_ThrowsArgumentExceptionWithMessage(Uri server)\n+        {\n+            using (ClientWebSocket cws = await WebSocketHelper.GetConnectedWebSocket(server, TimeOutMilliseconds, _output))\n+            {\n+                var cts = new CancellationTokenSource(TimeOutMilliseconds);\n+\n+                string expectedInnerMessage = ResourceHelper.GetExceptionMessage(\n+                        \"net_WebSockets_Argument_InvalidMessageType\",\n+                        \"Close\",\n+                        \"SendAsync\",\n+                        \"Binary\",\n+                        \"Text\",\n+                        \"CloseOutputAsync\");\n+\n+                var expectedException = new ArgumentException(expectedInnerMessage, \"messageType\");\n+                string expectedMessage = expectedException.Message;\n+\n+                Assert.Throws<ArgumentException>(() => {\n+                        Task t = cws.SendAsync(new ArraySegment<byte>(), WebSocketMessageType.Close, true, cts.Token); } );\n+\n+                Assert.Equal(WebSocketState.Open, cws.State);\n+            }\n+        }\n+        \n+        [ConditionalTheory(\"WebSocketsSupported\"), MemberData(\"EchoServers\")]\n+        public async Task SendAsync__MultipleOutstandingSendOperations_Throws(Uri server)\n+        {\n+            using (ClientWebSocket cws = await WebSocketHelper.GetConnectedWebSocket(server, TimeOutMilliseconds, _output))\n+            {\n+                var cts = new CancellationTokenSource(TimeOutMilliseconds);\n+\n+                Task [] tasks = new Task[10];\n+\n+                try\n+                {\n+                    for (int i = 0; i < tasks.Length; i++)\n+                    {\n+                        tasks[i] = cws.SendAsync(\n+                            WebSocketData.GetBufferFromText(\"hello\"), \n+                            WebSocketMessageType.Text, \n+                            true, \n+                            cts.Token);\n+                    }\n+\n+                    Task.WaitAll(tasks);\n+\n+                    Assert.Equal(WebSocketState.Open, cws.State);\n+                }\n+                catch (AggregateException ag)\n+                {\n+                    foreach (var ex in ag.InnerExceptions)\n+                    {\n+                        if (ex is InvalidOperationException)\n+                        {\n+                            Assert.Equal(\n+                                ResourceHelper.GetExceptionMessage(\n+                                    \"net_Websockets_AlreadyOneOutstandingOperation\", \n+                                    \"SendAsync\"),\n+                                ex.Message);\n+\n+                            Assert.Equal(WebSocketState.Aborted, cws.State);\n+                        }\n+                        else if (ex is WebSocketException)\n+                        {\n+                            // Multiple cases.\n+                            Assert.Equal(WebSocketState.Aborted, cws.State);\n+\n+                            WebSocketError errCode = (ex as WebSocketException).WebSocketErrorCode;\n+                            Assert.True(\n+                                (errCode == WebSocketError.InvalidState) || (errCode == WebSocketError.Success),\n+                                \"WebSocketErrorCode\");\n+                        }\n+                        else\n+                        {\n+                            Assert.True(false, \"Unexpected exception: \" + ex.Message);\n+                        }\n+                    }\n+                }\n+            }\n+        }\n+\n+        [ConditionalTheory(\"WebSocketsSupported\"), MemberData(\"EchoServers\")]\n+        public async Task ReceiveAsync_MultipleOutstandingReceiveOperations_Throws(Uri server)\n+        {\n+            using (ClientWebSocket cws = await WebSocketHelper.GetConnectedWebSocket(server, TimeOutMilliseconds, _output))\n+            {\n+                var cts = new CancellationTokenSource(TimeOutMilliseconds);\n+\n+                Task[] tasks = new Task[2];\n+\n+                await cws.SendAsync(\n+                    WebSocketData.GetBufferFromText(\".delay5sec\"), \n+                    WebSocketMessageType.Text, \n+                    true, \n+                    cts.Token);\n+\n+                var recvBuffer = new byte[100];\n+                var recvSegment = new ArraySegment<byte>(recvBuffer);\n+\n+                try\n+                {\n+                    for (int i = 0; i < tasks.Length; i++)\n+                    {\n+                        tasks[i] = cws.ReceiveAsync(recvSegment, cts.Token);\n+                    }\n+\n+                    Task.WaitAll(tasks);","path":"src/System.Net.WebSockets.Client/tests/ClientWebSocketTest.cs","position":222,"original_position":222,"commit_id":"8bedbc44c65e25e7529a2b965fa42cce83485e76","original_commit_id":"8bedbc44c65e25e7529a2b965fa42cce83485e76","user":{"login":"stephentoub","id":2642209,"avatar_url":"https://avatars.githubusercontent.com/u/2642209?v=3","gravatar_id":"","url":"https://api.github.com/users/stephentoub","html_url":"https://github.com/stephentoub","followers_url":"https://api.github.com/users/stephentoub/followers","following_url":"https://api.github.com/users/stephentoub/following{/other_user}","gists_url":"https://api.github.com/users/stephentoub/gists{/gist_id}","starred_url":"https://api.github.com/users/stephentoub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stephentoub/subscriptions","organizations_url":"https://api.github.com/users/stephentoub/orgs","repos_url":"https://api.github.com/users/stephentoub/repos","events_url":"https://api.github.com/users/stephentoub/events{/privacy}","received_events_url":"https://api.github.com/users/stephentoub/received_events","type":"User","site_admin":false},"body":"Consider:\r\n```C#\r\nawait Task.WhenAll(tasks);\r\n```","created_at":"2015-11-16T14:47:22Z","updated_at":"2015-11-16T14:47:22Z","html_url":"https://github.com/dotnet/corefx/pull/4528#discussion_r44930690","pull_request_url":"https://api.github.com/repos/dotnet/corefx/pulls/4528","_links":{"self":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/comments/44930690"},"html":{"href":"https://github.com/dotnet/corefx/pull/4528#discussion_r44930690"},"pull_request":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/4528"}}},"pull_request":{"url":"https://api.github.com/repos/dotnet/corefx/pulls/4528","id":50770038,"html_url":"https://github.com/dotnet/corefx/pull/4528","diff_url":"https://github.com/dotnet/corefx/pull/4528.diff","patch_url":"https://github.com/dotnet/corefx/pull/4528.patch","issue_url":"https://api.github.com/repos/dotnet/corefx/issues/4528","number":4528,"state":"open","locked":false,"title":"Port more System.Net.WebSockets.Client tests","user":{"login":"davidsh","id":7684835,"avatar_url":"https://avatars.githubusercontent.com/u/7684835?v=3","gravatar_id":"","url":"https://api.github.com/users/davidsh","html_url":"https://github.com/davidsh","followers_url":"https://api.github.com/users/davidsh/followers","following_url":"https://api.github.com/users/davidsh/following{/other_user}","gists_url":"https://api.github.com/users/davidsh/gists{/gist_id}","starred_url":"https://api.github.com/users/davidsh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/davidsh/subscriptions","organizations_url":"https://api.github.com/users/davidsh/orgs","repos_url":"https://api.github.com/users/davidsh/repos","events_url":"https://api.github.com/users/davidsh/events{/privacy}","received_events_url":"https://api.github.com/users/davidsh/received_events","type":"User","site_admin":false},"body":"Continued porting internal ToF tests to GitHub.\r\nModified tests to use a good dev pattern of `using` around websocket use.","created_at":"2015-11-16T04:18:52Z","updated_at":"2015-11-16T14:47:22Z","closed_at":null,"merged_at":null,"merge_commit_sha":"274c60f2c0362c587465b29c78b1866fbc566c5a","assignee":null,"milestone":{"url":"https://api.github.com/repos/dotnet/corefx/milestones/6","html_url":"https://github.com/dotnet/corefx/milestones/1.0.0-rc2","labels_url":"https://api.github.com/repos/dotnet/corefx/milestones/6/labels","id":1365455,"number":6,"title":"1.0.0-rc2","description":"","creator":{"login":"joshfree","id":1302850,"avatar_url":"https://avatars.githubusercontent.com/u/1302850?v=3","gravatar_id":"","url":"https://api.github.com/users/joshfree","html_url":"https://github.com/joshfree","followers_url":"https://api.github.com/users/joshfree/followers","following_url":"https://api.github.com/users/joshfree/following{/other_user}","gists_url":"https://api.github.com/users/joshfree/gists{/gist_id}","starred_url":"https://api.github.com/users/joshfree/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/joshfree/subscriptions","organizations_url":"https://api.github.com/users/joshfree/orgs","repos_url":"https://api.github.com/users/joshfree/repos","events_url":"https://api.github.com/users/joshfree/events{/privacy}","received_events_url":"https://api.github.com/users/joshfree/received_events","type":"User","site_admin":false},"open_issues":146,"closed_issues":75,"state":"open","created_at":"2015-10-20T04:29:15Z","updated_at":"2015-11-16T04:18:52Z","due_on":"2016-02-03T08:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/dotnet/corefx/pulls/4528/commits","review_comments_url":"https://api.github.com/repos/dotnet/corefx/pulls/4528/comments","review_comment_url":"https://api.github.com/repos/dotnet/corefx/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dotnet/corefx/issues/4528/comments","statuses_url":"https://api.github.com/repos/dotnet/corefx/statuses/8bedbc44c65e25e7529a2b965fa42cce83485e76","head":{"label":"davidsh:websocket_tests_2","ref":"websocket_tests_2","sha":"8bedbc44c65e25e7529a2b965fa42cce83485e76","user":{"login":"davidsh","id":7684835,"avatar_url":"https://avatars.githubusercontent.com/u/7684835?v=3","gravatar_id":"","url":"https://api.github.com/users/davidsh","html_url":"https://github.com/davidsh","followers_url":"https://api.github.com/users/davidsh/followers","following_url":"https://api.github.com/users/davidsh/following{/other_user}","gists_url":"https://api.github.com/users/davidsh/gists{/gist_id}","starred_url":"https://api.github.com/users/davidsh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/davidsh/subscriptions","organizations_url":"https://api.github.com/users/davidsh/orgs","repos_url":"https://api.github.com/users/davidsh/repos","events_url":"https://api.github.com/users/davidsh/events{/privacy}","received_events_url":"https://api.github.com/users/davidsh/received_events","type":"User","site_admin":false},"repo":{"id":31976766,"name":"corefx","full_name":"davidsh/corefx","owner":{"login":"davidsh","id":7684835,"avatar_url":"https://avatars.githubusercontent.com/u/7684835?v=3","gravatar_id":"","url":"https://api.github.com/users/davidsh","html_url":"https://github.com/davidsh","followers_url":"https://api.github.com/users/davidsh/followers","following_url":"https://api.github.com/users/davidsh/following{/other_user}","gists_url":"https://api.github.com/users/davidsh/gists{/gist_id}","starred_url":"https://api.github.com/users/davidsh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/davidsh/subscriptions","organizations_url":"https://api.github.com/users/davidsh/orgs","repos_url":"https://api.github.com/users/davidsh/repos","events_url":"https://api.github.com/users/davidsh/events{/privacy}","received_events_url":"https://api.github.com/users/davidsh/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/davidsh/corefx","description":"This repo contains the .NET Core foundational libraries, called CoreFX. It includes classes for collections, file systems, console, XML, async and many others.","fork":true,"url":"https://api.github.com/repos/davidsh/corefx","forks_url":"https://api.github.com/repos/davidsh/corefx/forks","keys_url":"https://api.github.com/repos/davidsh/corefx/keys{/key_id}","collaborators_url":"https://api.github.com/repos/davidsh/corefx/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/davidsh/corefx/teams","hooks_url":"https://api.github.com/repos/davidsh/corefx/hooks","issue_events_url":"https://api.github.com/repos/davidsh/corefx/issues/events{/number}","events_url":"https://api.github.com/repos/davidsh/corefx/events","assignees_url":"https://api.github.com/repos/davidsh/corefx/assignees{/user}","branches_url":"https://api.github.com/repos/davidsh/corefx/branches{/branch}","tags_url":"https://api.github.com/repos/davidsh/corefx/tags","blobs_url":"https://api.github.com/repos/davidsh/corefx/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/davidsh/corefx/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/davidsh/corefx/git/refs{/sha}","trees_url":"https://api.github.com/repos/davidsh/corefx/git/trees{/sha}","statuses_url":"https://api.github.com/repos/davidsh/corefx/statuses/{sha}","languages_url":"https://api.github.com/repos/davidsh/corefx/languages","stargazers_url":"https://api.github.com/repos/davidsh/corefx/stargazers","contributors_url":"https://api.github.com/repos/davidsh/corefx/contributors","subscribers_url":"https://api.github.com/repos/davidsh/corefx/subscribers","subscription_url":"https://api.github.com/repos/davidsh/corefx/subscription","commits_url":"https://api.github.com/repos/davidsh/corefx/commits{/sha}","git_commits_url":"https://api.github.com/repos/davidsh/corefx/git/commits{/sha}","comments_url":"https://api.github.com/repos/davidsh/corefx/comments{/number}","issue_comment_url":"https://api.github.com/repos/davidsh/corefx/issues/comments{/number}","contents_url":"https://api.github.com/repos/davidsh/corefx/contents/{+path}","compare_url":"https://api.github.com/repos/davidsh/corefx/compare/{base}...{head}","merges_url":"https://api.github.com/repos/davidsh/corefx/merges","archive_url":"https://api.github.com/repos/davidsh/corefx/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/davidsh/corefx/downloads","issues_url":"https://api.github.com/repos/davidsh/corefx/issues{/number}","pulls_url":"https://api.github.com/repos/davidsh/corefx/pulls{/number}","milestones_url":"https://api.github.com/repos/davidsh/corefx/milestones{/number}","notifications_url":"https://api.github.com/repos/davidsh/corefx/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/davidsh/corefx/labels{/name}","releases_url":"https://api.github.com/repos/davidsh/corefx/releases{/id}","created_at":"2015-03-10T19:16:38Z","updated_at":"2015-05-06T21:44:49Z","pushed_at":"2015-11-16T04:17:44Z","git_url":"git://github.com/davidsh/corefx.git","ssh_url":"git@github.com:davidsh/corefx.git","clone_url":"https://github.com/davidsh/corefx.git","svn_url":"https://github.com/davidsh/corefx","homepage":"","size":38925,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"dotnet:master","ref":"master","sha":"905a1940bcda0afdca2f14ceb2b0161ebc4d1d02","user":{"login":"dotnet","id":9141961,"avatar_url":"https://avatars.githubusercontent.com/u/9141961?v=3","gravatar_id":"","url":"https://api.github.com/users/dotnet","html_url":"https://github.com/dotnet","followers_url":"https://api.github.com/users/dotnet/followers","following_url":"https://api.github.com/users/dotnet/following{/other_user}","gists_url":"https://api.github.com/users/dotnet/gists{/gist_id}","starred_url":"https://api.github.com/users/dotnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotnet/subscriptions","organizations_url":"https://api.github.com/users/dotnet/orgs","repos_url":"https://api.github.com/users/dotnet/repos","events_url":"https://api.github.com/users/dotnet/events{/privacy}","received_events_url":"https://api.github.com/users/dotnet/received_events","type":"Organization","site_admin":false},"repo":{"id":26295345,"name":"corefx","full_name":"dotnet/corefx","owner":{"login":"dotnet","id":9141961,"avatar_url":"https://avatars.githubusercontent.com/u/9141961?v=3","gravatar_id":"","url":"https://api.github.com/users/dotnet","html_url":"https://github.com/dotnet","followers_url":"https://api.github.com/users/dotnet/followers","following_url":"https://api.github.com/users/dotnet/following{/other_user}","gists_url":"https://api.github.com/users/dotnet/gists{/gist_id}","starred_url":"https://api.github.com/users/dotnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotnet/subscriptions","organizations_url":"https://api.github.com/users/dotnet/orgs","repos_url":"https://api.github.com/users/dotnet/repos","events_url":"https://api.github.com/users/dotnet/events{/privacy}","received_events_url":"https://api.github.com/users/dotnet/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dotnet/corefx","description":"This repo contains the .NET Core foundational libraries, called CoreFX. It includes classes for collections, file systems, console, XML, async and many others.","fork":false,"url":"https://api.github.com/repos/dotnet/corefx","forks_url":"https://api.github.com/repos/dotnet/corefx/forks","keys_url":"https://api.github.com/repos/dotnet/corefx/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dotnet/corefx/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dotnet/corefx/teams","hooks_url":"https://api.github.com/repos/dotnet/corefx/hooks","issue_events_url":"https://api.github.com/repos/dotnet/corefx/issues/events{/number}","events_url":"https://api.github.com/repos/dotnet/corefx/events","assignees_url":"https://api.github.com/repos/dotnet/corefx/assignees{/user}","branches_url":"https://api.github.com/repos/dotnet/corefx/branches{/branch}","tags_url":"https://api.github.com/repos/dotnet/corefx/tags","blobs_url":"https://api.github.com/repos/dotnet/corefx/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dotnet/corefx/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dotnet/corefx/git/refs{/sha}","trees_url":"https://api.github.com/repos/dotnet/corefx/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dotnet/corefx/statuses/{sha}","languages_url":"https://api.github.com/repos/dotnet/corefx/languages","stargazers_url":"https://api.github.com/repos/dotnet/corefx/stargazers","contributors_url":"https://api.github.com/repos/dotnet/corefx/contributors","subscribers_url":"https://api.github.com/repos/dotnet/corefx/subscribers","subscription_url":"https://api.github.com/repos/dotnet/corefx/subscription","commits_url":"https://api.github.com/repos/dotnet/corefx/commits{/sha}","git_commits_url":"https://api.github.com/repos/dotnet/corefx/git/commits{/sha}","comments_url":"https://api.github.com/repos/dotnet/corefx/comments{/number}","issue_comment_url":"https://api.github.com/repos/dotnet/corefx/issues/comments{/number}","contents_url":"https://api.github.com/repos/dotnet/corefx/contents/{+path}","compare_url":"https://api.github.com/repos/dotnet/corefx/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dotnet/corefx/merges","archive_url":"https://api.github.com/repos/dotnet/corefx/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dotnet/corefx/downloads","issues_url":"https://api.github.com/repos/dotnet/corefx/issues{/number}","pulls_url":"https://api.github.com/repos/dotnet/corefx/pulls{/number}","milestones_url":"https://api.github.com/repos/dotnet/corefx/milestones{/number}","notifications_url":"https://api.github.com/repos/dotnet/corefx/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dotnet/corefx/labels{/name}","releases_url":"https://api.github.com/repos/dotnet/corefx/releases{/id}","created_at":"2014-11-06T23:42:48Z","updated_at":"2015-11-16T14:45:34Z","pushed_at":"2015-11-16T14:35:48Z","git_url":"git://github.com/dotnet/corefx.git","ssh_url":"git@github.com:dotnet/corefx.git","clone_url":"https://github.com/dotnet/corefx.git","svn_url":"https://github.com/dotnet/corefx","homepage":"http://dotnet.github.io/","size":94165,"stargazers_count":8595,"watchers_count":8595,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1923,"mirror_url":null,"open_issues_count":706,"forks":1923,"open_issues":706,"watchers":8595,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/4528"},"html":{"href":"https://github.com/dotnet/corefx/pull/4528"},"issue":{"href":"https://api.github.com/repos/dotnet/corefx/issues/4528"},"comments":{"href":"https://api.github.com/repos/dotnet/corefx/issues/4528/comments"},"review_comments":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/4528/comments"},"review_comment":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/4528/commits"},"statuses":{"href":"https://api.github.com/repos/dotnet/corefx/statuses/8bedbc44c65e25e7529a2b965fa42cce83485e76"}}}}