Global Metrics

path: .metrics.mi.mi_sei
old: 29.67451221478155
new: 29.65174432412658

path: .metrics.mi.mi_original
old: 52.07678331895252
new: 52.0610018197377

path: .metrics.mi.mi_visual_studio
old: 30.45425925084943
new: 30.44503030394017

path: .metrics.halstead.volume
old: 1981.3590104863615
new: 1987.38137829939

path: .metrics.halstead.time
old: 2950.960228383942
new: 2981.072067449086

path: .metrics.halstead.N2
old: 140.0
new: 141.0

path: .metrics.halstead.level
old: 0.0373015873015873
new: 0.037037037037037035

path: .metrics.halstead.bugs
old: 0.4710163538392168
new: 0.47421512198215526

path: .metrics.halstead.difficulty
old: 26.80851063829787
new: 27.0

path: .metrics.halstead.purity_ratio
old: 1.021654486488786
new: 1.0185585638024564

path: .metrics.halstead.effort
old: 53117.284110910965
new: 53659.29721408353

path: .metrics.halstead.length
old: 329.0
new: 330.0

Spaces Data

Minimal test - lines (62, 117)

path: .spaces[1].metrics.halstead.purity_ratio
old: 1.1474343415062789
new: 1.141725712941571

path: .spaces[1].metrics.halstead.volume
old: 1122.9419688230416
new: 1128.5566786671568

path: .spaces[1].metrics.halstead.N2
old: 82.0
new: 83.0

path: .spaces[1].metrics.halstead.difficulty
old: 21.78125
new: 22.046875

path: .spaces[1].metrics.halstead.bugs
old: 0.2808700861289263
new: 0.28409201159527225

path: .spaces[1].metrics.halstead.level
old: 0.04591104734576758
new: 0.04535790219702339

path: .spaces[1].metrics.halstead.effort
old: 24459.079758426877
new: 24881.148024989972

path: .spaces[1].metrics.halstead.time
old: 1358.8377643570486
new: 1382.286001388332

path: .spaces[1].metrics.halstead.length
old: 200.0
new: 201.0

path: .spaces[1].metrics.mi.mi_original
old: 67.65602476309735
new: 67.63008954723995

path: .spaces[1].metrics.mi.mi_sei
old: 22.61889843580001
new: 22.581481828498127

path: .spaces[1].metrics.mi.mi_visual_studio
old: 39.56492676204523
new: 39.54975996914617

Code

async function testLink(
  aLinkIndexOrFunction,
  pinTab,
  expectNewTab,
  testSubFrame,
  aURL = TEST_URL
) {
  let appTab = BrowserTestUtils.addTab(gBrowser, aURL, { skipAnimation: true });
  if (pinTab) {
    gBrowser.pinTab(appTab);
  }
  gBrowser.selectedTab = appTab;

  let browser = appTab.linkedBrowser;
  await BrowserTestUtils.browserLoaded(browser);

  let promise;
  if (expectNewTab) {
    promise = BrowserTestUtils.waitForNewTab(gBrowser).then(tab => {
      let loaded = tab.linkedBrowser.documentURI.spec;
      BrowserTestUtils.removeTab(tab);
      return loaded;
    });
  } else {
    promise = BrowserTestUtils.browserLoaded(browser, testSubFrame);
  }

  let href;
  if (typeof aLinkIndexOrFunction === "function") {
    ok(!browser.isRemoteBrowser, "don't pass a function for a remote browser");
    let link = aLinkIndexOrFunction(browser.contentDocument);
    info("Clicking " + link.textContent);
    link.click();
    href = link.href;
  } else {
    href = await SpecialPowers.spawn(
      browser,
      [[testSubFrame, aLinkIndexOrFunction]],
      function([subFrame, index]) {
        let doc = subFrame
          ? content.document.querySelector("iframe").contentDocument
          : content.document;
        let link = doc.querySelectorAll("a")[index];

        info("Clicking " + link.textContent);
        link.click();
        return link.href;
      }
    );
  }

  info(`Waiting on load of ${href}`);
  let loaded = await promise;
  is(loaded, href, "loaded the right document");
  BrowserTestUtils.removeTab(appTab);
}