Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Firefox/browser/components/urlbar/tests/unit/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 11 kB image not shown  

Quelle  test_frecency.js   Sprache: JAVA

 
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */


/**
 * Test for bug 406358 to make sure frecency works for empty input/search, but
 * this also tests for non-empty inputs as well. Because the interactions among
 * DIFFERENT* visit counts and visit dates is not well defined, this test
 * holds one of the two values constant when modifying the other.
 *
 * Also test bug 419068 to make sure tagged pages don't necessarily have to be
 * first in the results.
 *
 * Also test bug 426166 to make sure that the results of autocomplete searches
 * are stable.  Note that failures of this test will be intermittent by nature
 * since we are testing to make sure that the unstable sort algorithm used
 * by SQLite is not changing the order of the results on us.
 */


testEngine_setup();

async function task_setCountDate(uri, count, date) {
  // We need visits so that frecency can be computed over multiple visits
  let visits = [];
  for (let i = 0; i < count; i++) {
    visits.push({
      uri,
      visitDate: date,
      transition: PlacesUtils.history.TRANSITION_TYPED,
    });
  }
  await PlacesTestUtils.addVisits(visits);
}

async function setBookmark(uri) {
  await PlacesUtils.bookmarks.insert({
    parentGuid: PlacesUtils.bookmarks.menuGuid,
    url: uri,
    title: "bleh",
  });
}

async function tagURI(uri, tags) {
  await PlacesUtils.bookmarks.insert({
    parentGuid: PlacesUtils.bookmarks.unfiledGuid,
    url: uri,
    title: "bleh",
  });
  PlacesUtils.tagging.tagURI(uri, tags);
}

var uri1 = Services.io.newURI("http://site.tld/1");
var uri2 = Services.io.newURI("http://site.tld/2");
var uri3 = Services.io.newURI("http://aaaaaaaaaa/1");
var uri4 = Services.io.newURI("http://aaaaaaaaaa/2");

// d1 is younger (should show up higher) than d2 (PRTime is in usecs not msec)
// Make sure the dates fall into different frecency groups
var d1 = new Date(Date.now() - 1000 * 60 * 60) * 1000;
var d2 = new Date(Date.now() - 1000 * 60 * 60 * 24 * 10) * 1000;
// c1 is larger (should show up higher) than c2
var c1 = 10;
var c2 = 1;

var tests = [
  // test things without a search term
  async function () {
    info("Test 0: same count, different date");
    await task_setCountDate(uri1, c1, d1);
    await task_setCountDate(uri2, c1, d2);
    await tagURI(uri1, ["site"]);
    let context = createContext(" ", { isPrivate: false });
    await check_results({
      context,
      matches: [
        makeSearchResult(context, {
          engineName: SUGGESTIONS_ENGINE_NAME,
          heuristic: true,
          query: " ",
        }),
        // uri1 is a visit result despite being a tagged bookmark because we
        // are searching for the empty string. By default, the empty string
        // filters to history. uri1 will be displayed as a bookmark later in the
        // test when we are searching with a non-empty string.
        makeVisitResult(context, {
          uri: uri1.spec,
          title: "bleh",
        }),
        makeVisitResult(context, {
          uri: uri2.spec,
          title: `test visit for ${uri2.spec}`,
        }),
      ],
    });
  },
  async function () {
    info("Test 1: same count, different date");
    await task_setCountDate(uri1, c1, d2);
    await task_setCountDate(uri2, c1, d1);
    await tagURI(uri1, ["site"]);
    let context = createContext(" ", { isPrivate: false });
    await check_results({
      context,
      matches: [
        makeSearchResult(context, {
          engineName: SUGGESTIONS_ENGINE_NAME,
          heuristic: true,
          query: " ",
        }),
        makeVisitResult(context, {
          uri: uri2.spec,
          title: `test visit for ${uri2.spec}`,
        }),
        makeVisitResult(context, {
          uri: uri1.spec,
          title: "bleh",
        }),
      ],
    });
  },
  async function () {
    info("Test 2: different count, same date");
    await task_setCountDate(uri1, c1, d1);
    await task_setCountDate(uri2, c2, d1);
    await tagURI(uri1, ["site"]);
    let context = createContext(" ", { isPrivate: false });
    await check_results({
      context,
      matches: [
        makeSearchResult(context, {
          engineName: SUGGESTIONS_ENGINE_NAME,
          heuristic: true,
          query: " ",
        }),
        makeVisitResult(context, {
          uri: uri1.spec,
          title: "bleh",
        }),
        makeVisitResult(context, {
          uri: uri2.spec,
          title: `test visit for ${uri2.spec}`,
        }),
      ],
    });
  },
  async function () {
    info("Test 3: different count, same date");
    await task_setCountDate(uri1, c2, d1);
    await task_setCountDate(uri2, c1, d1);
    await tagURI(uri1, ["site"]);
    let context = createContext(" ", { isPrivate: false });
    await check_results({
      context,
      matches: [
        makeSearchResult(context, {
          engineName: SUGGESTIONS_ENGINE_NAME,
          heuristic: true,
          query: " ",
        }),
        makeVisitResult(context, {
          uri: uri2.spec,
          title: `test visit for ${uri2.spec}`,
        }),
        makeVisitResult(context, {
          uri: uri1.spec,
          title: "bleh",
        }),
      ],
    });
  },

  // test things with a search term
  async function () {
    info("Test 4: same count, different date");
    await task_setCountDate(uri1, c1, d1);
    await task_setCountDate(uri2, c1, d2);
    await tagURI(uri1, ["site"]);
    let context = createContext("site", { isPrivate: false });
    await check_results({
      context,
      matches: [
        makeSearchResult(context, {
          engineName: SUGGESTIONS_ENGINE_NAME,
          heuristic: true,
        }),
        makeBookmarkResult(context, {
          uri: uri1.spec,
          title: "bleh",
          tags: ["site"],
        }),
        makeVisitResult(context, {
          uri: uri2.spec,
          title: `test visit for ${uri2.spec}`,
        }),
      ],
    });
  },
  async function () {
    info("Test 5: same count, different date");
    await task_setCountDate(uri1, c1, d2);
    await task_setCountDate(uri2, c1, d1);
    await tagURI(uri1, ["site"]);
    let context = createContext("site", { isPrivate: false });
    await check_results({
      context,
      matches: [
        makeSearchResult(context, {
          engineName: SUGGESTIONS_ENGINE_NAME,
          heuristic: true,
        }),
        makeVisitResult(context, {
          uri: uri2.spec,
          title: `test visit for ${uri2.spec}`,
        }),
        makeBookmarkResult(context, {
          uri: uri1.spec,
          title: "bleh",
          tags: ["site"],
        }),
      ],
    });
  },
  async function () {
    info("Test 6: different count, same date");
    await task_setCountDate(uri1, c1, d1);
    await task_setCountDate(uri2, c2, d1);
    await tagURI(uri1, ["site"]);
    let context = createContext("site", { isPrivate: false });
    await check_results({
      context,
      matches: [
        makeSearchResult(context, {
          engineName: SUGGESTIONS_ENGINE_NAME,
          heuristic: true,
        }),
        makeBookmarkResult(context, {
          uri: uri1.spec,
          title: "bleh",
          tags: ["site"],
        }),
        makeVisitResult(context, {
          uri: uri2.spec,
          title: `test visit for ${uri2.spec}`,
        }),
      ],
    });
  },
  async function () {
    info("Test 7: different count, same date");
    await task_setCountDate(uri1, c2, d1);
    await task_setCountDate(uri2, c1, d1);
    await tagURI(uri1, ["site"]);
    let context = createContext("site", { isPrivate: false });
    await check_results({
      context,
      matches: [
        makeSearchResult(context, {
          engineName: SUGGESTIONS_ENGINE_NAME,
          heuristic: true,
        }),
        makeVisitResult(context, {
          uri: uri2.spec,
          title: `test visit for ${uri2.spec}`,
        }),
        makeBookmarkResult(context, {
          uri: uri1.spec,
          title: "bleh",
          tags: ["site"],
        }),
      ],
    });
  },
  // There are multiple tests for 8, hence the multiple functions
  // Bug 426166 section
  async function () {
    info("Test 8.1a: same count, same date");
    await setBookmark(uri3);
    await setBookmark(uri4);
    let context = createContext("a", { isPrivate: false });
    let bookmarkResults = [
      makeBookmarkResult(context, {
        uri: uri4.spec,
        title: "bleh",
      }),
      makeBookmarkResult(context, {
        uri: uri3.spec,
        title: "bleh",
      }),
    ];
    await check_results({
      context,
      matches: [
        makeSearchResult(context, {
          engineName: SUGGESTIONS_ENGINE_NAME,
          heuristic: true,
        }),
        ...bookmarkResults,
      ],
    });

    context = createContext("aa", { isPrivate: false });
    await check_results({
      context,
      matches: [
        // We need to continuously redefine the heuristic search result because it
        // is the only one that changes with the search string.
        makeSearchResult(context, {
          engineName: SUGGESTIONS_ENGINE_NAME,
          heuristic: true,
        }),
        ...bookmarkResults,
      ],
    });

    context = createContext("aaa", { isPrivate: false });
    await check_results({
      context,
      matches: [
        makeSearchResult(context, {
          engineName: SUGGESTIONS_ENGINE_NAME,
          heuristic: true,
        }),
        ...bookmarkResults,
      ],
    });

    context = createContext("aaaa", { isPrivate: false });
    await check_results({
      context,
      matches: [
        makeSearchResult(context, {
          engineName: SUGGESTIONS_ENGINE_NAME,
          heuristic: true,
        }),
        ...bookmarkResults,
      ],
    });

    context = createContext("aaa", { isPrivate: false });
    await check_results({
      context,
      matches: [
        makeSearchResult(context, {
          engineName: SUGGESTIONS_ENGINE_NAME,
          heuristic: true,
        }),
        ...bookmarkResults,
      ],
    });

    context = createContext("aa", { isPrivate: false });
    await check_results({
      context,
      matches: [
        makeSearchResult(context, {
          engineName: SUGGESTIONS_ENGINE_NAME,
          heuristic: true,
        }),
        ...bookmarkResults,
      ],
    });

    context = createContext("a", { isPrivate: false });
    await check_results({
      context,
      matches: [
        makeSearchResult(context, {
          engineName: SUGGESTIONS_ENGINE_NAME,
          heuristic: true,
        }),
        ...bookmarkResults,
      ],
    });
  },
];

add_task(async function test_frecency() {
  Services.prefs.setBoolPref("browser.urlbar.autoFill"false);
  // always search in history + bookmarks, no matter what the default is
  Services.prefs.setBoolPref("browser.urlbar.suggest.history"true);
  Services.prefs.setBoolPref("browser.urlbar.suggest.bookmark"true);
  Services.prefs.setBoolPref("browser.urlbar.suggest.openpage"false);
  Services.prefs.setBoolPref("browser.urlbar.suggest.searches"false);
  Services.prefs.setBoolPref("browser.urlbar.suggest.engines"false);
  Services.prefs.setBoolPref("browser.urlbar.suggest.quickactions"false);
  for (let test of tests) {
    await PlacesUtils.bookmarks.eraseEverything();
    await PlacesUtils.history.clear();

    await test();
  }
  for (let type of [
    "history",
    "bookmark",
    "openpage",
    "searches",
    "engines",
    "quickactions",
  ]) {
    Services.prefs.clearUserPref("browser.urlbar.suggest." + type);
    Services.prefs.clearUserPref("browser.urlbar.autoFill");
  }
});

Messung V0.5
C=91 H=97 G=93

¤ Dauer der Verarbeitung: 0.15 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.