#!/usr/bin/env node

var fs = require("fs"),
    queue = require("d3-queue").queue,
    rw = require("../");

var code = 0;

queue(1)
    .defer(testRead, "utf8", "gréén\n")
    .defer(testRead, {encoding: "utf8"}, "gréén\n")
    .defer(testRead, "ascii", "grC)C)n\n")
    .defer(testRead, {encoding: "ascii"}, "grC)C)n\n")
    .defer(testWrite, "utf8", "gréén\n")
    .defer(testWrite, {encoding: "utf8"}, "gréén\n")
    .defer(testWrite, "ascii", "gr��n\n")
    .defer(testWrite, {encoding: "ascii"}, "gr��n\n")
    .await(done);

function testRead(options, expected, callback) {
  rw.readFile("test/utf8.txt", options, function(error, actual) {
    if (error) return void callback(error);
    if (actual !== expected) console.warn(actual + " !== " + expected), code = 1;
    callback(null);
  });
}

function testWrite(options, expected, callback) {
  rw.writeFile("test/encoding-async.out", "gréén\n", options, function(error) {
    if (error) return void callback(error);
    fs.readFile("test/encoding-async.out", "utf8", function(error, actual) {
      if (error) return void callback(error);
      if (actual !== expected) console.warn(actual + " !== " + expected), code = 1;
      callback(null);
    });
  });
}

function done(error) {
  if (error) throw error;
  process.exit(code);
}