Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  test_gio_protocol.js   Sprache: JAVA

 
/* run some tests on the gvfs/gio protocol handler */

"use strict";

function inChildProcess() {
  return Services.appinfo.processType != Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT;
}

const PR_RDONLY = 0x1; // see prio.h

[
  do_test_read_data_dir,
  do_test_read_recent,
  test_read_file,
  do_test_finished,
].forEach(f => add_test(f));

function setup() {
  // Allowing some protocols to get a channel
  if (!inChildProcess()) {
    Services.prefs.setCharPref(
      "network.gio.supported-protocols",
      "localtest:,recent:"
    );
  } else {
    do_send_remote_message("gio-allow-test-protocols");
    do_await_remote_message("gio-allow-test-protocols-done");
  }
}

setup();

registerCleanupFunction(() => {
  // Resetting the protocols to None
  if (!inChildProcess()) {
    Services.prefs.clearUserPref("network.gio.supported-protocols");
  }
});

function new_file_input_stream(file, buffered) {
  var stream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(
    Ci.nsIFileInputStream
  );
  stream.init(file, PR_RDONLY, 0, 0);
  if (!buffered) {
    return stream;
  }

  var buffer = Cc[
    "@mozilla.org/network/buffered-input-stream;1"
  ].createInstance(Ci.nsIBufferedInputStream);
  buffer.init(stream, 4096);
  return buffer;
}

function new_file_channel(file) {
  var chan = NetUtil.newChannel({
    uri: file,
    loadUsingSystemPrincipal: true,
  });

  return chan;
}

/*
 * stream listener
 * this listener has some additional file-specific tests, so we can't just use
 * ChannelListener here.
 */

function FileStreamListener(closure) {
  this._closure = closure;
}
FileStreamListener.prototype = {
  _closure: null,
  _buffer: "",
  _got_onstartrequest: false,
  _got_onstoprequest: false,
  _contentLen: -1,

  QueryInterface: ChromeUtils.generateQI([
    "nsIStreamListener",
    "nsIRequestObserver",
  ]),

  onStartRequest() {
    if (this._got_onstartrequest) {
      do_throw("Got second onStartRequest event!");
    }
    this._got_onstartrequest = true;
  },

  onDataAvailable(request, stream, offset, count) {
    if (!this._got_onstartrequest) {
      do_throw("onDataAvailable without onStartRequest event!");
    }
    if (this._got_onstoprequest) {
      do_throw("onDataAvailable after onStopRequest event!");
    }
    if (!request.isPending()) {
      do_throw("request reports itself as not pending from onStartRequest!");
    }

    this._buffer = this._buffer.concat(read_stream(stream, count));
  },

  onStopRequest(request, status) {
    if (!this._got_onstartrequest) {
      do_throw("onStopRequest without onStartRequest event!");
    }
    if (this._got_onstoprequest) {
      do_throw("Got second onStopRequest event!");
    }
    this._got_onstoprequest = true;
    if (!Components.isSuccessCode(status)) {
      do_throw("Failed to load file: " + status.toString(16));
    }
    if (status != request.status) {
      do_throw("request.status does not match status arg to onStopRequest!");
    }
    if (request.isPending()) {
      do_throw("request reports itself as pending from onStopRequest!");
    }
    if (this._contentLen != -1 && this._buffer.length != this._contentLen) {
      do_throw("did not read nsIChannel.contentLength number of bytes!");
    }

    this._closure(this._buffer);
  },
};

function test_read_file() {
  dump("*** test_read_file\n");
  // Going via parent path, because this is opended from test/unit/ and test/unit_ipc/
  var file = do_get_file("../unit/data/test_readline4.txt");
  var chan = new_file_channel("localtest://" + file.path);

  function on_read_complete(data) {
    dump("*** test_read_file.on_read_complete()\n");
    /* read completed successfully.  now read data directly from file,
       and compare the result. */

    var stream = new_file_input_stream(file, false);
    var result = read_stream(stream, stream.available());
    if (result != data) {
      do_throw("Stream contents do not match with direct read!");
    }
    run_next_test();
  }

  chan.asyncOpen(new FileStreamListener(on_read_complete));
}

function do_test_read_data_dir() {
  dump('*** test_read_data_dir("../data/")\n');

  var dir = do_get_file("../unit/data/");
  var chan = new_file_channel("localtest://" + dir.path);

  function on_read_complete(data) {
    dump("*** test_read_data_dir.on_read_complete()\n");

    // The data-directory should be listed, containing a header-line and the files therein
    if (
      !(
        data.includes("200: filename content-length last-modified file-type") &&
        data.includes("201: test_readline1.txt") &&
        data.includes("201: test_readline2.txt")
      )
    ) {
      do_throw(
        "test_read_data_dir() - Bad data! Does not contain needles! Is <" +
          data +
          ">"
      );
    }
    run_next_test();
  }
  chan.asyncOpen(new FileStreamListener(on_read_complete));
}

function do_test_read_recent() {
  dump('*** test_read_recent("recent://")\n');

  var chan = new_file_channel("recent:///");

  function on_read_complete(data) {
    dump("*** test_read_recent.on_read_complete()\n");

    // The data-directory should be listed, containing a header-line and the files therein
    if (
      !data.includes("200: filename content-length last-modified file-type")
    ) {
      do_throw(
        "do_test_read_recent() - Bad data! Does not contain header! Is <" +
          data +
          ">"
      );
    }
    run_next_test();
  }
  chan.asyncOpen(new FileStreamListener(on_read_complete));
}

Messung V0.5
C=94 H=100 G=96

¤ Dauer der Verarbeitung: 0.13 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.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge