{"action":"created","comment":{"url":"https://api.github.com/repos/Polymer/web-component-tester/pulls/comments/64784742","id":64784742,"diff_hunk":"@@ -0,0 +1,304 @@\n+/**\n+ * @license\n+ * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n+ * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n+ * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n+ * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n+ * Code distributed by Google as part of the polymer project is also\n+ * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n+ */\n+import * as _ from 'lodash';\n+import * as chalk from 'chalk';\n+import * as cleankill from 'cleankill';\n+import * as stacky from 'stacky';\n+import * as util from 'util';\n+import * as events from 'events';\n+import * as config from './config';\n+import {BrowserDef, Stats} from './browserrunner';\n+import * as context from './context';\n+import * as tty from 'tty';\n+\n+const STACKY_CONFIG = {\n+  indent: '    ',\n+  locationStrip: [\n+    /^https?:\\/\\/[^\\/]+/,\n+    /\\?[\\d\\.]+$/,\n+  ],\n+  unimportantLocation: [\n+    /^\\/web-component-tester\\//,\n+  ]\n+};\n+\n+type State = 'passing' | 'pending' | 'failing' | 'unknown' | 'error';\n+type Formatter = (value: string) => string;\n+\n+const STATE_ICONS = {\n+  passing: '✓',\n+  pending: '✖',\n+  failing: '✖',\n+  unknown: '?',\n+};\n+\n+const STATE_COLORS: {[state: string]: Formatter} = {\n+  passing: chalk.green,\n+  pending: chalk.yellow,\n+  failing: chalk.red,\n+  unknown: chalk.red,\n+  error:   chalk.red,\n+};\n+\n+\n+const SHORT = {\n+  'internet explorer': 'IE',\n+};\n+\n+const BROWSER_PAD = 24;\n+const STATUS_PAD  = 38;\n+\n+interface TestEndData {\n+  state: 'passing'|'failing'|'pending'|'unknown';\n+  test: string[];\n+  duration: number;\n+  error: any;\n+}\n+\n+export class CliReporter {\n+  prettyBrowsers: {[id: number]: string} = {};\n+  browserStats: {[id: number]: Stats} = {};\n+\n+  /**\n+   * The number of lines written the last time writeLines was called.\n+   */\n+  private linesWritten: number;\n+\n+  constructor(public emitter: events.EventEmitter, public stream: NodeJS.WritableStream, public options: config.Config) {\n+    cleankill.onInterrupt((done) => {\n+      this.flush();\n+      done();\n+    });\n+\n+    emitter.on('log:error', this.log.bind(this, chalk.red));\n+\n+    if (!this.options.quiet) {\n+      emitter.on('log:warn',  this.log.bind(this, chalk.yellow));\n+      emitter.on('log:info',  this.log.bind(this));\n+      if (this.options.verbose) {\n+        emitter.on('log:debug', this.log.bind(this, chalk.dim));\n+      }\n+    }\n+\n+    emitter.on('browser-init', (browser: BrowserDef, stats: Stats) => {\n+      this.browserStats[browser.id] = stats;\n+      this.prettyBrowsers[browser.id] = this.prettyBrowser(browser);\n+      this.updateStatus();\n+    });\n+\n+    emitter.on('browser-start', (browser: BrowserDef, data: {url: string}, stats: Stats) => {\n+      this.browserStats[browser.id] = stats;\n+      this.log(browser, 'Beginning tests via', chalk.magenta(data.url));\n+      this.updateStatus();\n+    });\n+\n+    emitter.on('test-end', (browser: BrowserDef, data: TestEndData, stats: Stats) => {\n+      this.browserStats[browser.id] = stats;\n+      if (data.state === 'failing') {\n+        this.writeTestError(browser, data);\n+      } else if (this.options.expanded || this.options.verbose) {\n+        this.log(browser, this.stateIcon(data.state), this.prettyTest(data));\n+      }\n+\n+      this.updateStatus();\n+    });\n+\n+    emitter.on('browser-end', (browser: BrowserDef, error: any, stats: Stats) => {\n+      this.browserStats[browser.id] = stats;\n+      if (error) {\n+        this.log(chalk.red, browser, 'Tests failed:', error);\n+      } else {\n+        this.log(chalk.green, browser, 'Tests passed');\n+      }\n+    });\n+\n+    emitter.on('run-end', (error: any) => {\n+      if (error) {\n+        this.log(chalk.red, 'Test run ended in failure:', error);\n+      } else {\n+        this.log(chalk.green, 'Test run ended with great success');\n+      }\n+\n+      if (!this.options.ttyOutput) {\n+        this.updateStatus(true);\n+      }\n+    });\n+  }\n+\n+  // Specialized Reporting\n+  updateStatus(force?: boolean) {\n+    if (!this.options.ttyOutput && !force) return;\n+    // EXTREME TERMINOLOGY FAIL, but here's a glossary:\n+    //\n+    // stats:  An object containing test stats (total, passing, failing, etc).\n+    // state:  The state that the run is in (running, etc).\n+    // status: A string representation of above.\n+    const statuses = Object.keys(this.browserStats).map((browserIdStr) => {\n+      const browserId = parseInt(browserIdStr, 10);\n+      const pretty = this.prettyBrowsers[browserId];\n+      const stats  = this.browserStats[browserId];\n+\n+      let status = '';\n+      const counts = [stats.passing, stats.pending, stats.failing];\n+      if (counts[0] > 0 || counts[1] > 0 || counts[2] > 0) {\n+        if (counts[0] > 0) counts[0] = <any>chalk.green(counts[0].toString());\n+        if (counts[1] > 0) counts[1] = <any>chalk.yellow(counts[1].toString());\n+        if (counts[2] > 0) counts[2] = <any>chalk.red(counts[2].toString());\n+        status = counts.join('/');\n+      }\n+      if (stats.status === 'error') {\n+        status = status + (status === '' ? '' : ' ') + chalk.red('error');\n+      }\n+\n+      return padRight(pretty + ' (' + status + ')', STATUS_PAD);\n+    });\n+\n+    this.writeWrapped(statuses, '  ');\n+  };\n+\n+  writeTestError(browser: BrowserDef, data: TestEndData) {\n+    this.log(browser, this.stateIcon(data.state), this.prettyTest(data));\n+\n+    const error = data.error || {};\n+    this.write('\\n');\n+\n+    let prettyMessage = error.message || error;\n+    if (typeof prettyMessage !== 'string') {\n+      prettyMessage = util.inspect(prettyMessage);\n+    }\n+    this.write(chalk.red('  ' + prettyMessage));\n+\n+    if (error.stack) {\n+      try {\n+        this.write(stacky.pretty(data.error.stack, STACKY_CONFIG));\n+      } catch (err) {\n+        // If we couldn't extract a stack (i.e. there was no stack), the message\n+        // is enough.\n+      }\n+    }\n+    this.write('\\n');\n+  };\n+\n+  // Object Formatting\n+\n+  stateIcon(state: State) {\n+    const color = STATE_COLORS[state] || STATE_COLORS['unknown'];\n+    return color(STATE_ICONS[state] || STATE_ICONS.unknown);\n+  };\n+\n+  prettyTest(data: TestEndData) {\n+    const color = STATE_COLORS[data.state] || STATE_COLORS['unknown'];\n+    return color(data.test.join(' » ') || '<unknown test>');\n+  };\n+\n+  prettyBrowser(browser: BrowserDef) {\n+    const parts: string[] = [];\n+\n+    if (browser.platform && !browser.deviceName) {\n+      parts.push(browser.platform);\n+    }\n+\n+    const name = browser.deviceName || browser.browserName;\n+    parts.push(SHORT[name] || name);\n+\n+    if (browser.version) {\n+      parts.push(browser.version);\n+    }\n+\n+    return chalk.blue(parts.join(' '));\n+  };\n+\n+  // General Output Formatting\n+\n+  log(...values: any[]): void;\n+  log() {\n+    let values = Array.prototype.slice.call(arguments);","path":"runner/clireporter.ts","position":222,"original_position":222,"commit_id":"f632c138f8ef60472622be6b082ae1b3ce79363b","original_commit_id":"f632c138f8ef60472622be6b082ae1b3ce79363b","user":{"login":"justinfagnani","id":522948,"avatar_url":"https://avatars.githubusercontent.com/u/522948?v=3","gravatar_id":"","url":"https://api.github.com/users/justinfagnani","html_url":"https://github.com/justinfagnani","followers_url":"https://api.github.com/users/justinfagnani/followers","following_url":"https://api.github.com/users/justinfagnani/following{/other_user}","gists_url":"https://api.github.com/users/justinfagnani/gists{/gist_id}","starred_url":"https://api.github.com/users/justinfagnani/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/justinfagnani/subscriptions","organizations_url":"https://api.github.com/users/justinfagnani/orgs","repos_url":"https://api.github.com/users/justinfagnani/repos","events_url":"https://api.github.com/users/justinfagnani/events{/privacy}","received_events_url":"https://api.github.com/users/justinfagnani/received_events","type":"User","site_admin":false},"body":"Array.from(arguments)","created_at":"2016-05-26T17:19:47Z","updated_at":"2016-05-26T17:19:47Z","html_url":"https://github.com/Polymer/web-component-tester/pull/314#discussion_r64784742","pull_request_url":"https://api.github.com/repos/Polymer/web-component-tester/pulls/314","_links":{"self":{"href":"https://api.github.com/repos/Polymer/web-component-tester/pulls/comments/64784742"},"html":{"href":"https://github.com/Polymer/web-component-tester/pull/314#discussion_r64784742"},"pull_request":{"href":"https://api.github.com/repos/Polymer/web-component-tester/pulls/314"}}},"pull_request":{"url":"https://api.github.com/repos/Polymer/web-component-tester/pulls/314","id":71337618,"html_url":"https://github.com/Polymer/web-component-tester/pull/314","diff_url":"https://github.com/Polymer/web-component-tester/pull/314.diff","patch_url":"https://github.com/Polymer/web-component-tester/pull/314.patch","issue_url":"https://api.github.com/repos/Polymer/web-component-tester/issues/314","number":314,"state":"open","locked":false,"title":"Convert node portion of WCT to typescript","user":{"login":"rictic","id":1659,"avatar_url":"https://avatars.githubusercontent.com/u/1659?v=3","gravatar_id":"","url":"https://api.github.com/users/rictic","html_url":"https://github.com/rictic","followers_url":"https://api.github.com/users/rictic/followers","following_url":"https://api.github.com/users/rictic/following{/other_user}","gists_url":"https://api.github.com/users/rictic/gists{/gist_id}","starred_url":"https://api.github.com/users/rictic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rictic/subscriptions","organizations_url":"https://api.github.com/users/rictic/orgs","repos_url":"https://api.github.com/users/rictic/repos","events_url":"https://api.github.com/users/rictic/events{/privacy}","received_events_url":"https://api.github.com/users/rictic/received_events","type":"User","site_admin":false},"body":"This is a no impact, zero-functionality-changes port. It'll be followed up by more aggressive cleanup steps, but this was easier to do as an incremental step (and also ensured that I'd actually be able to keep up with any changes that may happen on master while this PR is reviewed).\r\n\r\nI followed the conventions in https://github.com/Polymer/tools-common where possible (e.g. not changing the directory structure yet, leaving jshint for js hinting for now, as this PR can only get so large). I also didn't have luck getting noLib compilation working.","created_at":"2016-05-25T06:40:47Z","updated_at":"2016-05-26T17:19:47Z","closed_at":null,"merged_at":null,"merge_commit_sha":"89584f367bc00d18122341da6feee8d98c6c7fd8","assignee":{"login":"justinfagnani","id":522948,"avatar_url":"https://avatars.githubusercontent.com/u/522948?v=3","gravatar_id":"","url":"https://api.github.com/users/justinfagnani","html_url":"https://github.com/justinfagnani","followers_url":"https://api.github.com/users/justinfagnani/followers","following_url":"https://api.github.com/users/justinfagnani/following{/other_user}","gists_url":"https://api.github.com/users/justinfagnani/gists{/gist_id}","starred_url":"https://api.github.com/users/justinfagnani/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/justinfagnani/subscriptions","organizations_url":"https://api.github.com/users/justinfagnani/orgs","repos_url":"https://api.github.com/users/justinfagnani/repos","events_url":"https://api.github.com/users/justinfagnani/events{/privacy}","received_events_url":"https://api.github.com/users/justinfagnani/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/Polymer/web-component-tester/pulls/314/commits","review_comments_url":"https://api.github.com/repos/Polymer/web-component-tester/pulls/314/comments","review_comment_url":"https://api.github.com/repos/Polymer/web-component-tester/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Polymer/web-component-tester/issues/314/comments","statuses_url":"https://api.github.com/repos/Polymer/web-component-tester/statuses/f632c138f8ef60472622be6b082ae1b3ce79363b","head":{"label":"Polymer:typescript","ref":"typescript","sha":"f632c138f8ef60472622be6b082ae1b3ce79363b","user":{"login":"Polymer","id":2159051,"avatar_url":"https://avatars.githubusercontent.com/u/2159051?v=3","gravatar_id":"","url":"https://api.github.com/users/Polymer","html_url":"https://github.com/Polymer","followers_url":"https://api.github.com/users/Polymer/followers","following_url":"https://api.github.com/users/Polymer/following{/other_user}","gists_url":"https://api.github.com/users/Polymer/gists{/gist_id}","starred_url":"https://api.github.com/users/Polymer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Polymer/subscriptions","organizations_url":"https://api.github.com/users/Polymer/orgs","repos_url":"https://api.github.com/users/Polymer/repos","events_url":"https://api.github.com/users/Polymer/events{/privacy}","received_events_url":"https://api.github.com/users/Polymer/received_events","type":"Organization","site_admin":false},"repo":{"id":23168206,"name":"web-component-tester","full_name":"Polymer/web-component-tester","owner":{"login":"Polymer","id":2159051,"avatar_url":"https://avatars.githubusercontent.com/u/2159051?v=3","gravatar_id":"","url":"https://api.github.com/users/Polymer","html_url":"https://github.com/Polymer","followers_url":"https://api.github.com/users/Polymer/followers","following_url":"https://api.github.com/users/Polymer/following{/other_user}","gists_url":"https://api.github.com/users/Polymer/gists{/gist_id}","starred_url":"https://api.github.com/users/Polymer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Polymer/subscriptions","organizations_url":"https://api.github.com/users/Polymer/orgs","repos_url":"https://api.github.com/users/Polymer/repos","events_url":"https://api.github.com/users/Polymer/events{/privacy}","received_events_url":"https://api.github.com/users/Polymer/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Polymer/web-component-tester","description":"","fork":false,"url":"https://api.github.com/repos/Polymer/web-component-tester","forks_url":"https://api.github.com/repos/Polymer/web-component-tester/forks","keys_url":"https://api.github.com/repos/Polymer/web-component-tester/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Polymer/web-component-tester/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Polymer/web-component-tester/teams","hooks_url":"https://api.github.com/repos/Polymer/web-component-tester/hooks","issue_events_url":"https://api.github.com/repos/Polymer/web-component-tester/issues/events{/number}","events_url":"https://api.github.com/repos/Polymer/web-component-tester/events","assignees_url":"https://api.github.com/repos/Polymer/web-component-tester/assignees{/user}","branches_url":"https://api.github.com/repos/Polymer/web-component-tester/branches{/branch}","tags_url":"https://api.github.com/repos/Polymer/web-component-tester/tags","blobs_url":"https://api.github.com/repos/Polymer/web-component-tester/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Polymer/web-component-tester/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Polymer/web-component-tester/git/refs{/sha}","trees_url":"https://api.github.com/repos/Polymer/web-component-tester/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Polymer/web-component-tester/statuses/{sha}","languages_url":"https://api.github.com/repos/Polymer/web-component-tester/languages","stargazers_url":"https://api.github.com/repos/Polymer/web-component-tester/stargazers","contributors_url":"https://api.github.com/repos/Polymer/web-component-tester/contributors","subscribers_url":"https://api.github.com/repos/Polymer/web-component-tester/subscribers","subscription_url":"https://api.github.com/repos/Polymer/web-component-tester/subscription","commits_url":"https://api.github.com/repos/Polymer/web-component-tester/commits{/sha}","git_commits_url":"https://api.github.com/repos/Polymer/web-component-tester/git/commits{/sha}","comments_url":"https://api.github.com/repos/Polymer/web-component-tester/comments{/number}","issue_comment_url":"https://api.github.com/repos/Polymer/web-component-tester/issues/comments{/number}","contents_url":"https://api.github.com/repos/Polymer/web-component-tester/contents/{+path}","compare_url":"https://api.github.com/repos/Polymer/web-component-tester/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Polymer/web-component-tester/merges","archive_url":"https://api.github.com/repos/Polymer/web-component-tester/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Polymer/web-component-tester/downloads","issues_url":"https://api.github.com/repos/Polymer/web-component-tester/issues{/number}","pulls_url":"https://api.github.com/repos/Polymer/web-component-tester/pulls{/number}","milestones_url":"https://api.github.com/repos/Polymer/web-component-tester/milestones{/number}","notifications_url":"https://api.github.com/repos/Polymer/web-component-tester/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Polymer/web-component-tester/labels{/name}","releases_url":"https://api.github.com/repos/Polymer/web-component-tester/releases{/id}","deployments_url":"https://api.github.com/repos/Polymer/web-component-tester/deployments","created_at":"2014-08-20T23:59:40Z","updated_at":"2016-05-25T22:22:00Z","pushed_at":"2016-05-25T06:44:52Z","git_url":"git://github.com/Polymer/web-component-tester.git","ssh_url":"git@github.com:Polymer/web-component-tester.git","clone_url":"https://github.com/Polymer/web-component-tester.git","svn_url":"https://github.com/Polymer/web-component-tester","homepage":"","size":5597,"stargazers_count":325,"watchers_count":325,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":78,"mirror_url":null,"open_issues_count":75,"forks":78,"open_issues":75,"watchers":325,"default_branch":"master"}},"base":{"label":"Polymer:master","ref":"master","sha":"f37fc017bbabdbc40b7287bfc1f55865404355ea","user":{"login":"Polymer","id":2159051,"avatar_url":"https://avatars.githubusercontent.com/u/2159051?v=3","gravatar_id":"","url":"https://api.github.com/users/Polymer","html_url":"https://github.com/Polymer","followers_url":"https://api.github.com/users/Polymer/followers","following_url":"https://api.github.com/users/Polymer/following{/other_user}","gists_url":"https://api.github.com/users/Polymer/gists{/gist_id}","starred_url":"https://api.github.com/users/Polymer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Polymer/subscriptions","organizations_url":"https://api.github.com/users/Polymer/orgs","repos_url":"https://api.github.com/users/Polymer/repos","events_url":"https://api.github.com/users/Polymer/events{/privacy}","received_events_url":"https://api.github.com/users/Polymer/received_events","type":"Organization","site_admin":false},"repo":{"id":23168206,"name":"web-component-tester","full_name":"Polymer/web-component-tester","owner":{"login":"Polymer","id":2159051,"avatar_url":"https://avatars.githubusercontent.com/u/2159051?v=3","gravatar_id":"","url":"https://api.github.com/users/Polymer","html_url":"https://github.com/Polymer","followers_url":"https://api.github.com/users/Polymer/followers","following_url":"https://api.github.com/users/Polymer/following{/other_user}","gists_url":"https://api.github.com/users/Polymer/gists{/gist_id}","starred_url":"https://api.github.com/users/Polymer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Polymer/subscriptions","organizations_url":"https://api.github.com/users/Polymer/orgs","repos_url":"https://api.github.com/users/Polymer/repos","events_url":"https://api.github.com/users/Polymer/events{/privacy}","received_events_url":"https://api.github.com/users/Polymer/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Polymer/web-component-tester","description":"","fork":false,"url":"https://api.github.com/repos/Polymer/web-component-tester","forks_url":"https://api.github.com/repos/Polymer/web-component-tester/forks","keys_url":"https://api.github.com/repos/Polymer/web-component-tester/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Polymer/web-component-tester/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Polymer/web-component-tester/teams","hooks_url":"https://api.github.com/repos/Polymer/web-component-tester/hooks","issue_events_url":"https://api.github.com/repos/Polymer/web-component-tester/issues/events{/number}","events_url":"https://api.github.com/repos/Polymer/web-component-tester/events","assignees_url":"https://api.github.com/repos/Polymer/web-component-tester/assignees{/user}","branches_url":"https://api.github.com/repos/Polymer/web-component-tester/branches{/branch}","tags_url":"https://api.github.com/repos/Polymer/web-component-tester/tags","blobs_url":"https://api.github.com/repos/Polymer/web-component-tester/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Polymer/web-component-tester/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Polymer/web-component-tester/git/refs{/sha}","trees_url":"https://api.github.com/repos/Polymer/web-component-tester/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Polymer/web-component-tester/statuses/{sha}","languages_url":"https://api.github.com/repos/Polymer/web-component-tester/languages","stargazers_url":"https://api.github.com/repos/Polymer/web-component-tester/stargazers","contributors_url":"https://api.github.com/repos/Polymer/web-component-tester/contributors","subscribers_url":"https://api.github.com/repos/Polymer/web-component-tester/subscribers","subscription_url":"https://api.github.com/repos/Polymer/web-component-tester/subscription","commits_url":"https://api.github.com/repos/Polymer/web-component-tester/commits{/sha}","git_commits_url":"https://api.github.com/repos/Polymer/web-component-tester/git/commits{/sha}","comments_url":"https://api.github.com/repos/Polymer/web-component-tester/comments{/number}","issue_comment_url":"https://api.github.com/repos/Polymer/web-component-tester/issues/comments{/number}","contents_url":"https://api.github.com/repos/Polymer/web-component-tester/contents/{+path}","compare_url":"https://api.github.com/repos/Polymer/web-component-tester/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Polymer/web-component-tester/merges","archive_url":"https://api.github.com/repos/Polymer/web-component-tester/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Polymer/web-component-tester/downloads","issues_url":"https://api.github.com/repos/Polymer/web-component-tester/issues{/number}","pulls_url":"https://api.github.com/repos/Polymer/web-component-tester/pulls{/number}","milestones_url":"https://api.github.com/repos/Polymer/web-component-tester/milestones{/number}","notifications_url":"https://api.github.com/repos/Polymer/web-component-tester/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Polymer/web-component-tester/labels{/name}","releases_url":"https://api.github.com/repos/Polymer/web-component-tester/releases{/id}","deployments_url":"https://api.github.com/repos/Polymer/web-component-tester/deployments","created_at":"2014-08-20T23:59:40Z","updated_at":"2016-05-25T22:22:00Z","pushed_at":"2016-05-25T06:44:52Z","git_url":"git://github.com/Polymer/web-component-tester.git","ssh_url":"git@github.com:Polymer/web-component-tester.git","clone_url":"https://github.com/Polymer/web-component-tester.git","svn_url":"https://github.com/Polymer/web-component-tester","homepage":"","size":5597,"stargazers_count":325,"watchers_count":325,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":78,"mirror_url":null,"open_issues_count":75,"forks":78,"open_issues":75,"watchers":325,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Polymer/web-component-tester/pulls/314"},"html":{"href":"https://github.com/Polymer/web-component-tester/pull/314"},"issue":{"href":"https://api.github.com/repos/Polymer/web-component-tester/issues/314"},"comments":{"href":"https://api.github.com/repos/Polymer/web-component-tester/issues/314/comments"},"review_comments":{"href":"https://api.github.com/repos/Polymer/web-component-tester/pulls/314/comments"},"review_comment":{"href":"https://api.github.com/repos/Polymer/web-component-tester/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Polymer/web-component-tester/pulls/314/commits"},"statuses":{"href":"https://api.github.com/repos/Polymer/web-component-tester/statuses/f632c138f8ef60472622be6b082ae1b3ce79363b"}}}}
{"actor":{"display_login":"justinfagnani"}}