{"action":"created","comment":{"url":"https://api.github.com/repos/dotnet/corefx/pulls/comments/26954671","id":26954671,"diff_hunk":"@@ -0,0 +1,1692 @@\n+// Copyright (c) Microsoft. All rights reserved.\n+// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n+\n+using System;\n+using System.Linq;\n+using System.Collections;\n+using System.Collections.Generic;\n+using Xunit;\n+// ReSharper disable InconsistentNaming\n+\n+namespace Tests.Collections\n+{\n+    public enum CollectionOrder\n+    {\n+        Unspecified,\n+        Sequential\n+    }\n+\n+    public static class CollectionAssert\n+    {\n+        public static void Equal(IEnumerable expected, IEnumerable actual)\n+        {\n+            Assert.Equal(expected.OfType<object>(), actual.OfType<object>());\n+        }\n+\n+        public static void Equal(IList expected, IList actual)\n+        {\n+            Equal((IEnumerable)expected, actual);\n+            Assert.Equal(expected.Count, actual.Count);\n+            for (int i = 0; i < expected.Count; i++)\n+            {\n+                var expectedArray = expected as Array;\n+                var actualArray = expected as Array;\n+                var expectedLowerBound = expectedArray == null\n+                                             ? 0\n+                                             : expectedArray\n+                                                   .GetLowerBound(0);\n+                var actualLowerBound = actualArray == null\n+                                           ? 0 : actualArray.GetLowerBound(\n+                                               0);\n+                Assert.Equal(expected[i + expectedLowerBound], actual[i + actualLowerBound]);\n+            }\n+        }\n+    }\n+\n+    public static class IListExtensions\n+    {\n+        public static void AddRange(this IList list, IEnumerable items)\n+        {\n+            foreach (var item in items)\n+                list.Add(item);\n+        }\n+\n+        public static void InsertRange(this IList list, object[] items)\n+        {\n+            for (int i = 0; i < items.Length; i++)\n+                list.Insert(i, items[i]);\n+        }\n+\n+        public static void InsertRange(this IList list, int listStartIndex, object[] items, int startIndex, int count)\n+        {\n+            var numToInsert = items.Length - startIndex;\n+            if (count < numToInsert)\n+                numToInsert = count;\n+            for (int i = 0; i < numToInsert; i++)\n+                list.Insert(listStartIndex + i, items[startIndex + i]);\n+        }\n+\n+        public static void AddRange(this IList list, object[] items, int startIndex, int count)\n+        {\n+            var numToAdd = items.Length - startIndex;\n+            if (count < numToAdd)\n+                numToAdd = count;\n+            for (int i = 0; i < numToAdd; i++)\n+                list.Add(items[startIndex + i]);\n+        }\n+    }\n+\n+    public abstract class IListTest<T> : ICollectionTest<T>\n+    {\n+        protected bool ExpectedIsReadOnly { get; private set; }\n+        protected bool ExpectedIsFixedSize { get; private set; }\n+        protected bool SearchingThrowsFromInvalidValue { get; set; }\n+        protected IListTest(bool isSynchronized, bool isReadOnly, bool isFixedSize) : base(isSynchronized)\n+        {\n+            ExpectedIsReadOnly = isReadOnly;\n+            ExpectedIsFixedSize = isFixedSize;\n+            SearchingThrowsFromInvalidValue = false; // This SHOULD be false but this is the current behavior\n+        }\n+\n+        [Fact]\n+        public void IsFixedSize()\n+        {\n+            Assert.Equal(ExpectedIsFixedSize, GetList(null).IsFixedSize);\n+        }\n+\n+        [Fact]\n+        public void IsReadOnly()\n+        {\n+            Assert.Equal(ExpectedIsReadOnly, GetList(null).IsReadOnly);\n+        }\n+\n+        [Theory]\n+        [InlineData(int.MinValue)]\n+        [InlineData(-1)]\n+        [InlineData(0)]\n+        public void GetItemArgumentOutOfRange(int index)\n+        {\n+            IList list = GetList(null);\n+            Assert.Throws<ArgumentOutOfRangeException>(\n+                () => list[index]);\n+            CollectionAssert.Equal(Array.Empty<object>(), list);\n+        }\n+\n+        [Fact]\n+        public void GetItemArgumentOutOfRangeFilledCollection()\n+        {\n+            var items = GenerateItems(32);\n+            IList list = GetList(items);\n+            Assert.Throws<ArgumentOutOfRangeException>(\n+                () => list[list.Count]);\n+            CollectionAssert.Equal(items, list);\n+        }\n+\n+        [Fact]\n+        public void GetItemEmpty()\n+        {\n+            var items = new object[0];\n+            var list = GetList(items);\n+            if (ExpectedIsFixedSize || ExpectedIsReadOnly)\n+            {\n+                CollectionAssert.Equal(items, list);\n+            }\n+            else\n+            {\n+                list.Clear();\n+                items = GenerateItems(1);\n+                list.AddRange(items);\n+                CollectionAssert.Equal(items, list);\n+\n+                list.Clear();\n+                items = GenerateItems(1024);\n+                list.AddRange(items);\n+                CollectionAssert.Equal(items, list);\n+            }\n+        }\n+\n+        [Fact]\n+        public void SetItemNotSupported()\n+        {\n+            if (ExpectedIsReadOnly)\n+            {\n+                var items = GenerateItems(10);\n+                var list = GetList(items);\n+                Assert.Throws<NotSupportedException>(\n+                    () => list[0] = GenerateItem());\n+                CollectionAssert.Equal(items, list);\n+\n+\n+                Assert.Throws<NotSupportedException>(\n+                    () => list[list.Count - 1] = GenerateItem());\n+                CollectionAssert.Equal(items, list);\n+            }\n+        }\n+\n+        [Fact]\n+        public void SetItemArgumentException()\n+        {\n+            Type[] expectedExceptions;\n+            if (ExpectedIsReadOnly)\n+            {\n+                expectedExceptions = new[]\n+                {\n+                    typeof (ArgumentOutOfRangeException),\n+                    typeof (NotSupportedException)\n+                };\n+            }\n+            else\n+            {\n+                expectedExceptions = new[]\n+                {\n+                    typeof (ArgumentOutOfRangeException)\n+                };\n+            }\n+            {\n+                var items = GenerateItems(10);\n+                var list = GetList(items);\n+                AssertThrows(\n+                    expectedExceptions,\n+                    () => list[int.MinValue] = GenerateItem());\n+                CollectionAssert.Equal(items, list);\n+\n+\n+                AssertThrows(\n+                    expectedExceptions,\n+                    () => list[-1] = GenerateItem());\n+                CollectionAssert.Equal(items, list);\n+            }\n+\n+            {\n+                var items = GenerateItems(0);\n+                var list = GetList(items);\n+                AssertThrows(expectedExceptions, () => list[0] = GenerateItem());\n+                CollectionAssert.Equal(items, list);\n+\n+                if (!ExpectedIsFixedSize && !ExpectedIsReadOnly)\n+                {\n+                    items = GenerateItems(32);\n+                    list.AddRange(items);\n+                    AssertThrows(expectedExceptions, () => list[list.Count] = GenerateItem());\n+                    CollectionAssert.Equal(items, list);\n+                }\n+            }\n+        }\n+\n+        [Fact]\n+        public void SetItemInvalidValue()\n+        {\n+            var items = GenerateItems(32);\n+            var list = GetList(items);\n+            if (IsGenericCompatibility)\n+            {\n+                foreach (var invalid in GetInvalidValues())\n+                {\n+                    Type[] expectedExceptions;\n+                    if (invalid == null)\n+                        if (ExpectedIsReadOnly)\n+                            expectedExceptions = new[]\n+                            {\n+                                typeof (ArgumentNullException),\n+                                typeof (NotSupportedException)\n+                            };\n+                        else\n+                            expectedExceptions = new[]\n+                            {\n+                                typeof (ArgumentNullException)\n+                            };\n+                    else\n+                        if (ExpectedIsReadOnly)\n+                            expectedExceptions = new[]\n+                            {\n+                                typeof (ArgumentException),\n+                                typeof (NotSupportedException)\n+                            };\n+                        else\n+                            expectedExceptions = new[]\n+                            {\n+                                typeof (ArgumentException)\n+                            };\n+\n+                    object invalid1 = invalid;\n+                    AssertThrows(expectedExceptions, () => list[0] = invalid1);\n+                    CollectionAssert.Equal(items, list);\n+                }\n+            }\n+        }\n+\n+        [Fact]\n+        public void SetItem()\n+        {\n+            if (!ExpectedIsReadOnly)\n+            {\n+                if (ItemsMustBeNonNull)\n+                {\n+                    var items = GenerateItems(32);\n+                    var list = GetList(items);\n+                    Assert.Throws<ArgumentNullException>(\n+                        () => list[0] = null);\n+                    CollectionAssert.Equal(items, list);\n+                }\n+                else\n+                {\n+                    var items = GenerateItems(32);\n+                    var list = GetList(items);\n+                    list[0] = null;\n+                    items[0] = null;\n+                    CollectionAssert.Equal(items, list);\n+\n+                    items = GenerateItems(32);\n+                    list = GetList(items);\n+                    list[list.Count - 1] = null;\n+                    items[items.Length - 1] = null;\n+                    CollectionAssert.Equal(items, list);\n+                }\n+\n+                if (ItemsMustBeUnique)\n+                {\n+                    var items = GenerateItems(32);\n+                    var list = GetList(items);\n+                    Assert.Throws<ArgumentException>(\n+                        () => list[0] = items[1]);\n+                    CollectionAssert.Equal(items, list);\n+                }\n+                else\n+                {\n+                    var items = GenerateItems(32);\n+                    var list = GetList(items);\n+                    for (int i = 0; i < items.Length; i++)\n+                    {\n+                        list[i] = items[items.Length - i - 1];\n+                    }\n+                    Array.Reverse(items);\n+                    CollectionAssert.Equal(items, list);\n+                }\n+\n+                {\n+                    var items = GenerateItems(32);\n+                    var origItems = (object[]) items.Clone();\n+                    var list = GetList(items);\n+\n+                    // verify setting every item\n+                    for (int i = 0; i < items.Length; i++)\n+                    {\n+                        if (i < items.Length/2)\n+                        {\n+                            list[items.Length - i - 1] = GenerateItem();\n+                        }\n+                        list[i] = items[items.Length - i - 1];\n+                    }\n+\n+                    Array.Reverse(items);\n+                    CollectionAssert.Equal(items, list);\n+\n+                    // verify setting items back to the original\n+                    items = origItems;\n+                    if (ItemsMustBeUnique)\n+                    {\n+                        for (int i = 0; i < items.Length; i++)\n+                            list[i] = GenerateItem();\n+                    }\n+\n+                    for (int i = 0; i < items.Length; i++)\n+                    {\n+                        list[i] = items[i];\n+                    }\n+\n+                    CollectionAssert.Equal(items, list);\n+                }\n+            }\n+        }\n+\n+        [Fact]\n+        public void AddFixedSizeOrReadonlyThrows()\n+        {\n+            if (ExpectedIsFixedSize || ExpectedIsReadOnly)\n+            {\n+                var items = GenerateItems(10);\n+                var list = GetList(items);\n+                Assert.Throws<NotSupportedException>(\n+                    () => list.Add(GenerateItem()));\n+                CollectionAssert.Equal(items, list);\n+            }\n+        }\n+\n+        [Fact]\n+        public void AddWithNullValueInMiddle()\n+        {\n+            if (!ExpectedIsFixedSize && !ExpectedIsReadOnly)\n+            {\n+                object[] items;\n+                var list = GetList(null);\n+                var tempItems = GenerateItems(32);\n+                for (int i = 0; i < tempItems.Length/2; i++)\n+                {\n+                    list.Add(tempItems[i]);\n+                }\n+\n+                if (ItemsMustBeNonNull)\n+                {\n+                    items = tempItems;\n+                    Assert.Throws<ArgumentNullException>(\n+                        () => list.Add(null));\n+                }\n+                else\n+                {\n+                    items = new object[33];\n+                    list.Add(null);\n+                    items[16] = null;\n+                    Array.Copy(tempItems, 0, items, 0, 16);\n+                    Array.Copy(tempItems, 16, items, 17, 16);\n+                }\n+                for (int i = 0; i < 16; i++)\n+                {\n+                    list.Add(tempItems[16 + i]);\n+                }\n+                CollectionAssert.Equal(items, list);\n+            }\n+        }\n+\n+        [Fact]\n+        public void AddWithNullValueAtBeginning()\n+        {\n+            if (!ExpectedIsFixedSize && !ExpectedIsReadOnly)\n+            {\n+                var list = GetList(null);\n+                object[] items;\n+                if (ItemsMustBeNonNull)\n+                {\n+                    Assert.Throws<ArgumentNullException>(\n+                        () => list.Add(null));\n+                    items = GenerateItems(16);\n+                    list.AddRange(items);\n+                }\n+                else\n+                {\n+                    items = new object[17];\n+                    list.Add(null);\n+                    items[0] = null;\n+                    var tempItems = GenerateItems(16);\n+                    list.AddRange(tempItems);\n+                    Array.Copy(tempItems, 0, items, 1, 16);\n+                }\n+\n+                CollectionAssert.Equal(items, list);\n+            }\n+        }\n+\n+        [Fact]\n+        public void AddWithNullValueAtEnd()","path":"src/Common/tests/Collections/IListTest.cs","position":419,"original_position":419,"commit_id":"d66bd670d4c0c04779880aea38a86dc3ffc8f19e","original_commit_id":"d66bd670d4c0c04779880aea38a86dc3ffc8f19e","user":{"login":"bartonjs","id":10642668,"avatar_url":"https://avatars.githubusercontent.com/u/10642668?v=3","gravatar_id":"","url":"https://api.github.com/users/bartonjs","html_url":"https://github.com/bartonjs","followers_url":"https://api.github.com/users/bartonjs/followers","following_url":"https://api.github.com/users/bartonjs/following{/other_user}","gists_url":"https://api.github.com/users/bartonjs/gists{/gist_id}","starred_url":"https://api.github.com/users/bartonjs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bartonjs/subscriptions","organizations_url":"https://api.github.com/users/bartonjs/orgs","repos_url":"https://api.github.com/users/bartonjs/repos","events_url":"https://api.github.com/users/bartonjs/events{/privacy}","received_events_url":"https://api.github.com/users/bartonjs/received_events","type":"User","site_admin":false},"body":"There are three methods which are testing that Add throws when it's given an unexpected null (beginning, middle, end).  Why are three different cases called for? They feel pretty much the same to me.  The list doesn't really know whether you're going to call Add any more after the time you gave it null.","created_at":"2015-03-23T16:48:52Z","updated_at":"2015-03-23T16:48:52Z","html_url":"https://github.com/dotnet/corefx/pull/1171#discussion_r26954671","pull_request_url":"https://api.github.com/repos/dotnet/corefx/pulls/1171","_links":{"self":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/comments/26954671"},"html":{"href":"https://github.com/dotnet/corefx/pull/1171#discussion_r26954671"},"pull_request":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/1171"}}},"pull_request":{"url":"https://api.github.com/repos/dotnet/corefx/pulls/1171","id":31474832,"html_url":"https://github.com/dotnet/corefx/pull/1171","diff_url":"https://github.com/dotnet/corefx/pull/1171.diff","patch_url":"https://github.com/dotnet/corefx/pull/1171.patch","issue_url":"https://api.github.com/repos/dotnet/corefx/issues/1171","number":1171,"state":"open","locked":false,"title":"Add tests for KeyedCollection. Issue #867","user":{"login":"alexperovich","id":10565410,"avatar_url":"https://avatars.githubusercontent.com/u/10565410?v=3","gravatar_id":"","url":"https://api.github.com/users/alexperovich","html_url":"https://github.com/alexperovich","followers_url":"https://api.github.com/users/alexperovich/followers","following_url":"https://api.github.com/users/alexperovich/following{/other_user}","gists_url":"https://api.github.com/users/alexperovich/gists{/gist_id}","starred_url":"https://api.github.com/users/alexperovich/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alexperovich/subscriptions","organizations_url":"https://api.github.com/users/alexperovich/orgs","repos_url":"https://api.github.com/users/alexperovich/repos","events_url":"https://api.github.com/users/alexperovich/events{/privacy}","received_events_url":"https://api.github.com/users/alexperovich/received_events","type":"User","site_admin":false},"body":"This change adds tests for `KeyedCollection<TKey, TValue>` ported from internal test assets, bringing test coverage from 0 to 96%\r\nThis also includes tests for `IList`, `ICollection`, and `IEnumerable` that can be used across all tests involving collections.\r\nI will be bringing over tests for `IList<T>`, `ICollection<T>`, and `IEnumerable<T>` in a future PR.","created_at":"2015-03-18T21:35:51Z","updated_at":"2015-03-23T16:48:52Z","closed_at":null,"merged_at":null,"merge_commit_sha":"efe466f0fcc5a318af8a2a30b672d3afe80ce014","assignee":{"login":"alexperovich","id":10565410,"avatar_url":"https://avatars.githubusercontent.com/u/10565410?v=3","gravatar_id":"","url":"https://api.github.com/users/alexperovich","html_url":"https://github.com/alexperovich","followers_url":"https://api.github.com/users/alexperovich/followers","following_url":"https://api.github.com/users/alexperovich/following{/other_user}","gists_url":"https://api.github.com/users/alexperovich/gists{/gist_id}","starred_url":"https://api.github.com/users/alexperovich/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alexperovich/subscriptions","organizations_url":"https://api.github.com/users/alexperovich/orgs","repos_url":"https://api.github.com/users/alexperovich/repos","events_url":"https://api.github.com/users/alexperovich/events{/privacy}","received_events_url":"https://api.github.com/users/alexperovich/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/dotnet/corefx/pulls/1171/commits","review_comments_url":"https://api.github.com/repos/dotnet/corefx/pulls/1171/comments","review_comment_url":"https://api.github.com/repos/dotnet/corefx/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dotnet/corefx/issues/1171/comments","statuses_url":"https://api.github.com/repos/dotnet/corefx/statuses/d66bd670d4c0c04779880aea38a86dc3ffc8f19e","head":{"label":"alexperovich:improveObjectModelCodeCoverage","ref":"improveObjectModelCodeCoverage","sha":"d66bd670d4c0c04779880aea38a86dc3ffc8f19e","user":{"login":"alexperovich","id":10565410,"avatar_url":"https://avatars.githubusercontent.com/u/10565410?v=3","gravatar_id":"","url":"https://api.github.com/users/alexperovich","html_url":"https://github.com/alexperovich","followers_url":"https://api.github.com/users/alexperovich/followers","following_url":"https://api.github.com/users/alexperovich/following{/other_user}","gists_url":"https://api.github.com/users/alexperovich/gists{/gist_id}","starred_url":"https://api.github.com/users/alexperovich/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alexperovich/subscriptions","organizations_url":"https://api.github.com/users/alexperovich/orgs","repos_url":"https://api.github.com/users/alexperovich/repos","events_url":"https://api.github.com/users/alexperovich/events{/privacy}","received_events_url":"https://api.github.com/users/alexperovich/received_events","type":"User","site_admin":false},"repo":{"id":29363919,"name":"corefx","full_name":"alexperovich/corefx","owner":{"login":"alexperovich","id":10565410,"avatar_url":"https://avatars.githubusercontent.com/u/10565410?v=3","gravatar_id":"","url":"https://api.github.com/users/alexperovich","html_url":"https://github.com/alexperovich","followers_url":"https://api.github.com/users/alexperovich/followers","following_url":"https://api.github.com/users/alexperovich/following{/other_user}","gists_url":"https://api.github.com/users/alexperovich/gists{/gist_id}","starred_url":"https://api.github.com/users/alexperovich/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alexperovich/subscriptions","organizations_url":"https://api.github.com/users/alexperovich/orgs","repos_url":"https://api.github.com/users/alexperovich/repos","events_url":"https://api.github.com/users/alexperovich/events{/privacy}","received_events_url":"https://api.github.com/users/alexperovich/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/alexperovich/corefx","description":"This repository contains the foundational libraries that make up the .NET Core development stack.","fork":true,"url":"https://api.github.com/repos/alexperovich/corefx","forks_url":"https://api.github.com/repos/alexperovich/corefx/forks","keys_url":"https://api.github.com/repos/alexperovich/corefx/keys{/key_id}","collaborators_url":"https://api.github.com/repos/alexperovich/corefx/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/alexperovich/corefx/teams","hooks_url":"https://api.github.com/repos/alexperovich/corefx/hooks","issue_events_url":"https://api.github.com/repos/alexperovich/corefx/issues/events{/number}","events_url":"https://api.github.com/repos/alexperovich/corefx/events","assignees_url":"https://api.github.com/repos/alexperovich/corefx/assignees{/user}","branches_url":"https://api.github.com/repos/alexperovich/corefx/branches{/branch}","tags_url":"https://api.github.com/repos/alexperovich/corefx/tags","blobs_url":"https://api.github.com/repos/alexperovich/corefx/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/alexperovich/corefx/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/alexperovich/corefx/git/refs{/sha}","trees_url":"https://api.github.com/repos/alexperovich/corefx/git/trees{/sha}","statuses_url":"https://api.github.com/repos/alexperovich/corefx/statuses/{sha}","languages_url":"https://api.github.com/repos/alexperovich/corefx/languages","stargazers_url":"https://api.github.com/repos/alexperovich/corefx/stargazers","contributors_url":"https://api.github.com/repos/alexperovich/corefx/contributors","subscribers_url":"https://api.github.com/repos/alexperovich/corefx/subscribers","subscription_url":"https://api.github.com/repos/alexperovich/corefx/subscription","commits_url":"https://api.github.com/repos/alexperovich/corefx/commits{/sha}","git_commits_url":"https://api.github.com/repos/alexperovich/corefx/git/commits{/sha}","comments_url":"https://api.github.com/repos/alexperovich/corefx/comments{/number}","issue_comment_url":"https://api.github.com/repos/alexperovich/corefx/issues/comments{/number}","contents_url":"https://api.github.com/repos/alexperovich/corefx/contents/{+path}","compare_url":"https://api.github.com/repos/alexperovich/corefx/compare/{base}...{head}","merges_url":"https://api.github.com/repos/alexperovich/corefx/merges","archive_url":"https://api.github.com/repos/alexperovich/corefx/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/alexperovich/corefx/downloads","issues_url":"https://api.github.com/repos/alexperovich/corefx/issues{/number}","pulls_url":"https://api.github.com/repos/alexperovich/corefx/pulls{/number}","milestones_url":"https://api.github.com/repos/alexperovich/corefx/milestones{/number}","notifications_url":"https://api.github.com/repos/alexperovich/corefx/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/alexperovich/corefx/labels{/name}","releases_url":"https://api.github.com/repos/alexperovich/corefx/releases{/id}","created_at":"2015-01-16T19:21:49Z","updated_at":"2015-03-18T20:08:49Z","pushed_at":"2015-03-18T23:05:45Z","git_url":"git://github.com/alexperovich/corefx.git","ssh_url":"git@github.com:alexperovich/corefx.git","clone_url":"https://github.com/alexperovich/corefx.git","svn_url":"https://github.com/alexperovich/corefx","homepage":"","size":12365,"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":"c6615d0a604970aceea1f7d548387ab6a6e33c39","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-03-23T13:15:38Z","pushed_at":"2015-03-23T11:32:10Z","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":"","size":28356,"stargazers_count":7287,"watchers_count":7287,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1398,"mirror_url":null,"open_issues_count":321,"forks":1398,"open_issues":321,"watchers":7287,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/1171"},"html":{"href":"https://github.com/dotnet/corefx/pull/1171"},"issue":{"href":"https://api.github.com/repos/dotnet/corefx/issues/1171"},"comments":{"href":"https://api.github.com/repos/dotnet/corefx/issues/1171/comments"},"review_comments":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/1171/comments"},"review_comment":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/1171/commits"},"statuses":{"href":"https://api.github.com/repos/dotnet/corefx/statuses/d66bd670d4c0c04779880aea38a86dc3ffc8f19e"}}}}