{"action":"created","comment":{"url":"https://api.github.com/repos/unexpectedjs/unexpected/pulls/comments/45564594","id":45564594,"diff_hunk":"@@ -892,7 +895,177 @@ module.exports = function (expect) {\n         expect(subject, 'to equal', value);\n     });\n \n-    expect.addAssertion('<object> to [exhaustively] satisfy <array-like|object>', function (expect, subject, value) {\n+    expect.addAssertion('<array-like> to [exhaustively] satisfy <array-like>', function (expect, subject, value) {\n+        expect.errorMode = 'bubble';\n+        var keyPromises = new Array(value.length);\n+        var i;\n+        var valueKeys = new Array(value.length);\n+        for (i = 0 ; i < value.length ; i += 1) {\n+            valueKeys[i] = i;\n+            keyPromises[i] = expect.promise(function () {\n+                var valueKeyType = expect.findTypeOf(value[i]);\n+                if (valueKeyType.is('function')) {\n+                    return value[i](subject[i]);\n+                } else {\n+                    return expect(subject[i], 'to [exhaustively] satisfy', value[i]);\n+                }\n+            });\n+        }\n+        return expect.promise.all([\n+            expect.promise(function () {\n+                expect(subject, 'to only have keys', valueKeys);\n+            }),\n+            expect.promise.all(keyPromises)\n+        ]).caught(function () {\n+            var subjectType = expect.subjectType;\n+            return expect.promise.settle(keyPromises).then(function () {\n+                var toSatisfyMatrix = new Array(subject.length * value.length);\n+                for (i = 0 ; i < subject.length ; i += 1) {\n+                    if (i < value.length) {\n+                        toSatisfyMatrix[i + i * subject.length] = keyPromises[i].isFulfilled() || keyPromises[i].reason();\n+                    }\n+                }\n+                if (subject.length > 10 || value.length > 10) {","path":"lib/assertions.js","position":53,"original_position":53,"commit_id":"e211624ab2324f3cd9bd23533e7551ed8d4be0dd","original_commit_id":"e211624ab2324f3cd9bd23533e7551ed8d4be0dd","user":{"login":"sunesimonsen","id":90802,"avatar_url":"https://avatars.githubusercontent.com/u/90802?v=3","gravatar_id":"","url":"https://api.github.com/users/sunesimonsen","html_url":"https://github.com/sunesimonsen","followers_url":"https://api.github.com/users/sunesimonsen/followers","following_url":"https://api.github.com/users/sunesimonsen/following{/other_user}","gists_url":"https://api.github.com/users/sunesimonsen/gists{/gist_id}","starred_url":"https://api.github.com/users/sunesimonsen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sunesimonsen/subscriptions","organizations_url":"https://api.github.com/users/sunesimonsen/orgs","repos_url":"https://api.github.com/users/sunesimonsen/repos","events_url":"https://api.github.com/users/sunesimonsen/events{/privacy}","received_events_url":"https://api.github.com/users/sunesimonsen/received_events","type":"User","site_admin":false},"body":"Fair, I missed that.","created_at":"2015-11-22T21:13:08Z","updated_at":"2015-11-22T21:13:08Z","html_url":"https://github.com/unexpectedjs/unexpected/pull/231#discussion_r45564594","pull_request_url":"https://api.github.com/repos/unexpectedjs/unexpected/pulls/231","_links":{"self":{"href":"https://api.github.com/repos/unexpectedjs/unexpected/pulls/comments/45564594"},"html":{"href":"https://github.com/unexpectedjs/unexpected/pull/231#discussion_r45564594"},"pull_request":{"href":"https://api.github.com/repos/unexpectedjs/unexpected/pulls/231"}}},"pull_request":{"url":"https://api.github.com/repos/unexpectedjs/unexpected/pulls/231","id":51307500,"html_url":"https://github.com/unexpectedjs/unexpected/pull/231","diff_url":"https://github.com/unexpectedjs/unexpected/pull/231.diff","patch_url":"https://github.com/unexpectedjs/unexpected/pull/231.patch","issue_url":"https://api.github.com/repos/unexpectedjs/unexpected/issues/231","number":231,"state":"open","locked":false,"title":"Improve <array-like> to satisfy <array-like> diffs","user":{"login":"papandreou","id":373545,"avatar_url":"https://avatars.githubusercontent.com/u/373545?v=3","gravatar_id":"","url":"https://api.github.com/users/papandreou","html_url":"https://github.com/papandreou","followers_url":"https://api.github.com/users/papandreou/followers","following_url":"https://api.github.com/users/papandreou/following{/other_user}","gists_url":"https://api.github.com/users/papandreou/gists{/gist_id}","starred_url":"https://api.github.com/users/papandreou/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/papandreou/subscriptions","organizations_url":"https://api.github.com/users/papandreou/orgs","repos_url":"https://api.github.com/users/papandreou/repos","events_url":"https://api.github.com/users/papandreou/events{/privacy}","received_events_url":"https://api.github.com/users/papandreou/received_events","type":"User","site_admin":false},"body":"Takes advantage of array-changes-async in the async case.\r\n\r\nFalls back to index-by-index if either the subject or the value has more than 10 items (arbitrarily chosen).\r\n\r\nOutstanding issues:\r\n\r\n- [ ] The `structurallySimilar` function has been duplicated -- what would be a good place to put it so it can be used by this assertion and types.js?\r\n- [x] https://github.com/derbyjs/arraydiff/pull/2 needs to be merged and released\r\n- [x] https://github.com/unexpectedjs/array-changes/pull/2 needs to be merged and released\r\n- [ ] The `<object> to satisfy <object>` assertion can be simplified if this is merged. I vote for waiting until after merging this PR and https://github.com/unexpectedjs/unexpected/pull/230","created_at":"2015-11-20T01:38:57Z","updated_at":"2015-11-22T21:13:08Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d5c52dd48b1a3ee69812bd5e78ebc09588005382","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/unexpectedjs/unexpected/pulls/231/commits","review_comments_url":"https://api.github.com/repos/unexpectedjs/unexpected/pulls/231/comments","review_comment_url":"https://api.github.com/repos/unexpectedjs/unexpected/pulls/comments{/number}","comments_url":"https://api.github.com/repos/unexpectedjs/unexpected/issues/231/comments","statuses_url":"https://api.github.com/repos/unexpectedjs/unexpected/statuses/e211624ab2324f3cd9bd23533e7551ed8d4be0dd","head":{"label":"unexpectedjs:feature/arrayChangesAsync","ref":"feature/arrayChangesAsync","sha":"e211624ab2324f3cd9bd23533e7551ed8d4be0dd","user":{"login":"unexpectedjs","id":11270290,"avatar_url":"https://avatars.githubusercontent.com/u/11270290?v=3","gravatar_id":"","url":"https://api.github.com/users/unexpectedjs","html_url":"https://github.com/unexpectedjs","followers_url":"https://api.github.com/users/unexpectedjs/followers","following_url":"https://api.github.com/users/unexpectedjs/following{/other_user}","gists_url":"https://api.github.com/users/unexpectedjs/gists{/gist_id}","starred_url":"https://api.github.com/users/unexpectedjs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/unexpectedjs/subscriptions","organizations_url":"https://api.github.com/users/unexpectedjs/orgs","repos_url":"https://api.github.com/users/unexpectedjs/repos","events_url":"https://api.github.com/users/unexpectedjs/events{/privacy}","received_events_url":"https://api.github.com/users/unexpectedjs/received_events","type":"Organization","site_admin":false},"repo":{"id":9507628,"name":"unexpected","full_name":"unexpectedjs/unexpected","owner":{"login":"unexpectedjs","id":11270290,"avatar_url":"https://avatars.githubusercontent.com/u/11270290?v=3","gravatar_id":"","url":"https://api.github.com/users/unexpectedjs","html_url":"https://github.com/unexpectedjs","followers_url":"https://api.github.com/users/unexpectedjs/followers","following_url":"https://api.github.com/users/unexpectedjs/following{/other_user}","gists_url":"https://api.github.com/users/unexpectedjs/gists{/gist_id}","starred_url":"https://api.github.com/users/unexpectedjs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/unexpectedjs/subscriptions","organizations_url":"https://api.github.com/users/unexpectedjs/orgs","repos_url":"https://api.github.com/users/unexpectedjs/repos","events_url":"https://api.github.com/users/unexpectedjs/events{/privacy}","received_events_url":"https://api.github.com/users/unexpectedjs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/unexpectedjs/unexpected","description":"The extensible BDD assertion toolkit","fork":false,"url":"https://api.github.com/repos/unexpectedjs/unexpected","forks_url":"https://api.github.com/repos/unexpectedjs/unexpected/forks","keys_url":"https://api.github.com/repos/unexpectedjs/unexpected/keys{/key_id}","collaborators_url":"https://api.github.com/repos/unexpectedjs/unexpected/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/unexpectedjs/unexpected/teams","hooks_url":"https://api.github.com/repos/unexpectedjs/unexpected/hooks","issue_events_url":"https://api.github.com/repos/unexpectedjs/unexpected/issues/events{/number}","events_url":"https://api.github.com/repos/unexpectedjs/unexpected/events","assignees_url":"https://api.github.com/repos/unexpectedjs/unexpected/assignees{/user}","branches_url":"https://api.github.com/repos/unexpectedjs/unexpected/branches{/branch}","tags_url":"https://api.github.com/repos/unexpectedjs/unexpected/tags","blobs_url":"https://api.github.com/repos/unexpectedjs/unexpected/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/unexpectedjs/unexpected/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/unexpectedjs/unexpected/git/refs{/sha}","trees_url":"https://api.github.com/repos/unexpectedjs/unexpected/git/trees{/sha}","statuses_url":"https://api.github.com/repos/unexpectedjs/unexpected/statuses/{sha}","languages_url":"https://api.github.com/repos/unexpectedjs/unexpected/languages","stargazers_url":"https://api.github.com/repos/unexpectedjs/unexpected/stargazers","contributors_url":"https://api.github.com/repos/unexpectedjs/unexpected/contributors","subscribers_url":"https://api.github.com/repos/unexpectedjs/unexpected/subscribers","subscription_url":"https://api.github.com/repos/unexpectedjs/unexpected/subscription","commits_url":"https://api.github.com/repos/unexpectedjs/unexpected/commits{/sha}","git_commits_url":"https://api.github.com/repos/unexpectedjs/unexpected/git/commits{/sha}","comments_url":"https://api.github.com/repos/unexpectedjs/unexpected/comments{/number}","issue_comment_url":"https://api.github.com/repos/unexpectedjs/unexpected/issues/comments{/number}","contents_url":"https://api.github.com/repos/unexpectedjs/unexpected/contents/{+path}","compare_url":"https://api.github.com/repos/unexpectedjs/unexpected/compare/{base}...{head}","merges_url":"https://api.github.com/repos/unexpectedjs/unexpected/merges","archive_url":"https://api.github.com/repos/unexpectedjs/unexpected/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/unexpectedjs/unexpected/downloads","issues_url":"https://api.github.com/repos/unexpectedjs/unexpected/issues{/number}","pulls_url":"https://api.github.com/repos/unexpectedjs/unexpected/pulls{/number}","milestones_url":"https://api.github.com/repos/unexpectedjs/unexpected/milestones{/number}","notifications_url":"https://api.github.com/repos/unexpectedjs/unexpected/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/unexpectedjs/unexpected/labels{/name}","releases_url":"https://api.github.com/repos/unexpectedjs/unexpected/releases{/id}","created_at":"2013-04-17T21:08:28Z","updated_at":"2015-11-19T13:21:51Z","pushed_at":"2015-11-22T19:35:00Z","git_url":"git://github.com/unexpectedjs/unexpected.git","ssh_url":"git@github.com:unexpectedjs/unexpected.git","clone_url":"https://github.com/unexpectedjs/unexpected.git","svn_url":"https://github.com/unexpectedjs/unexpected","homepage":"http://unexpected.js.org/","size":6701,"stargazers_count":95,"watchers_count":95,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":4,"mirror_url":null,"open_issues_count":19,"forks":4,"open_issues":19,"watchers":95,"default_branch":"master"}},"base":{"label":"unexpectedjs:master","ref":"master","sha":"96f346b5d369cbdfaae622f8aee9fbe62e54e68d","user":{"login":"unexpectedjs","id":11270290,"avatar_url":"https://avatars.githubusercontent.com/u/11270290?v=3","gravatar_id":"","url":"https://api.github.com/users/unexpectedjs","html_url":"https://github.com/unexpectedjs","followers_url":"https://api.github.com/users/unexpectedjs/followers","following_url":"https://api.github.com/users/unexpectedjs/following{/other_user}","gists_url":"https://api.github.com/users/unexpectedjs/gists{/gist_id}","starred_url":"https://api.github.com/users/unexpectedjs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/unexpectedjs/subscriptions","organizations_url":"https://api.github.com/users/unexpectedjs/orgs","repos_url":"https://api.github.com/users/unexpectedjs/repos","events_url":"https://api.github.com/users/unexpectedjs/events{/privacy}","received_events_url":"https://api.github.com/users/unexpectedjs/received_events","type":"Organization","site_admin":false},"repo":{"id":9507628,"name":"unexpected","full_name":"unexpectedjs/unexpected","owner":{"login":"unexpectedjs","id":11270290,"avatar_url":"https://avatars.githubusercontent.com/u/11270290?v=3","gravatar_id":"","url":"https://api.github.com/users/unexpectedjs","html_url":"https://github.com/unexpectedjs","followers_url":"https://api.github.com/users/unexpectedjs/followers","following_url":"https://api.github.com/users/unexpectedjs/following{/other_user}","gists_url":"https://api.github.com/users/unexpectedjs/gists{/gist_id}","starred_url":"https://api.github.com/users/unexpectedjs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/unexpectedjs/subscriptions","organizations_url":"https://api.github.com/users/unexpectedjs/orgs","repos_url":"https://api.github.com/users/unexpectedjs/repos","events_url":"https://api.github.com/users/unexpectedjs/events{/privacy}","received_events_url":"https://api.github.com/users/unexpectedjs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/unexpectedjs/unexpected","description":"The extensible BDD assertion toolkit","fork":false,"url":"https://api.github.com/repos/unexpectedjs/unexpected","forks_url":"https://api.github.com/repos/unexpectedjs/unexpected/forks","keys_url":"https://api.github.com/repos/unexpectedjs/unexpected/keys{/key_id}","collaborators_url":"https://api.github.com/repos/unexpectedjs/unexpected/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/unexpectedjs/unexpected/teams","hooks_url":"https://api.github.com/repos/unexpectedjs/unexpected/hooks","issue_events_url":"https://api.github.com/repos/unexpectedjs/unexpected/issues/events{/number}","events_url":"https://api.github.com/repos/unexpectedjs/unexpected/events","assignees_url":"https://api.github.com/repos/unexpectedjs/unexpected/assignees{/user}","branches_url":"https://api.github.com/repos/unexpectedjs/unexpected/branches{/branch}","tags_url":"https://api.github.com/repos/unexpectedjs/unexpected/tags","blobs_url":"https://api.github.com/repos/unexpectedjs/unexpected/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/unexpectedjs/unexpected/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/unexpectedjs/unexpected/git/refs{/sha}","trees_url":"https://api.github.com/repos/unexpectedjs/unexpected/git/trees{/sha}","statuses_url":"https://api.github.com/repos/unexpectedjs/unexpected/statuses/{sha}","languages_url":"https://api.github.com/repos/unexpectedjs/unexpected/languages","stargazers_url":"https://api.github.com/repos/unexpectedjs/unexpected/stargazers","contributors_url":"https://api.github.com/repos/unexpectedjs/unexpected/contributors","subscribers_url":"https://api.github.com/repos/unexpectedjs/unexpected/subscribers","subscription_url":"https://api.github.com/repos/unexpectedjs/unexpected/subscription","commits_url":"https://api.github.com/repos/unexpectedjs/unexpected/commits{/sha}","git_commits_url":"https://api.github.com/repos/unexpectedjs/unexpected/git/commits{/sha}","comments_url":"https://api.github.com/repos/unexpectedjs/unexpected/comments{/number}","issue_comment_url":"https://api.github.com/repos/unexpectedjs/unexpected/issues/comments{/number}","contents_url":"https://api.github.com/repos/unexpectedjs/unexpected/contents/{+path}","compare_url":"https://api.github.com/repos/unexpectedjs/unexpected/compare/{base}...{head}","merges_url":"https://api.github.com/repos/unexpectedjs/unexpected/merges","archive_url":"https://api.github.com/repos/unexpectedjs/unexpected/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/unexpectedjs/unexpected/downloads","issues_url":"https://api.github.com/repos/unexpectedjs/unexpected/issues{/number}","pulls_url":"https://api.github.com/repos/unexpectedjs/unexpected/pulls{/number}","milestones_url":"https://api.github.com/repos/unexpectedjs/unexpected/milestones{/number}","notifications_url":"https://api.github.com/repos/unexpectedjs/unexpected/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/unexpectedjs/unexpected/labels{/name}","releases_url":"https://api.github.com/repos/unexpectedjs/unexpected/releases{/id}","created_at":"2013-04-17T21:08:28Z","updated_at":"2015-11-19T13:21:51Z","pushed_at":"2015-11-22T19:35:00Z","git_url":"git://github.com/unexpectedjs/unexpected.git","ssh_url":"git@github.com:unexpectedjs/unexpected.git","clone_url":"https://github.com/unexpectedjs/unexpected.git","svn_url":"https://github.com/unexpectedjs/unexpected","homepage":"http://unexpected.js.org/","size":6701,"stargazers_count":95,"watchers_count":95,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":4,"mirror_url":null,"open_issues_count":19,"forks":4,"open_issues":19,"watchers":95,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/unexpectedjs/unexpected/pulls/231"},"html":{"href":"https://github.com/unexpectedjs/unexpected/pull/231"},"issue":{"href":"https://api.github.com/repos/unexpectedjs/unexpected/issues/231"},"comments":{"href":"https://api.github.com/repos/unexpectedjs/unexpected/issues/231/comments"},"review_comments":{"href":"https://api.github.com/repos/unexpectedjs/unexpected/pulls/231/comments"},"review_comment":{"href":"https://api.github.com/repos/unexpectedjs/unexpected/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/unexpectedjs/unexpected/pulls/231/commits"},"statuses":{"href":"https://api.github.com/repos/unexpectedjs/unexpected/statuses/e211624ab2324f3cd9bd23533e7551ed8d4be0dd"}}}}