<html>
<import src="../resources/chai.sky" />
<import src="../resources/mocha.sky" />
<import src="/mojo/public/sky/core.sky" as="core" />
<import src="/mojo/public/sky/connection.sky" as="connection" />
<import src="/mojo/services/network/public/interfaces/network_service.mojom.sky" as="net" />
<import src="/mojo/services/network/public/interfaces/url_loader.mojom.sky" as="loader" />
<import src="/mojo/services/public/sky/application.sky" as="application" />
<script>
describe('Mojo network_service', function() {
  this.enableTimeouts(false);

  it('should be able to fetch text files', function(done) {
    var app = new application.Application(internals.passShellProxyHandle());
    var netService = app.shell.connectToService(
      "mojo:network_service", net.NetworkService);

    var urlLoader;
    netService.createURLLoader(function(urlLoaderProxy) {
      urlLoader = urlLoaderProxy;
    });

    var urlRequest = new loader.URLRequest();
    urlRequest.url = "http://127.0.0.1:8000/sky/tests/services/resources/pass.txt";
    urlRequest.method = "GET";
    urlRequest.auto_follow_redirects = true;
    var urlRequestPromise = urlLoader.start(urlRequest);
    urlRequestPromise.then(function(result) {
      console.log("url => " + result.response["url"]);
      console.log("status_line => " + result.response["status_line"]);
      console.log("mime_type => " + result.response["mime_type"]);
      var drainDataPromise = core.drainData(result.response.body);
      drainDataPromise.then(function(result) {
        console.log("read " + result.buffer.byteLength + " bytes");
        done();
      }).catch(function() {
        assert.ok(false, "core.drainData failed");
        done();
      });
    }).catch(function() {
      assert.ok(false, "start failed");
      done();
    });
  });
});
</script>
</html>
