// csvimport1.js

t = new ToolTest("csvimport1");

c = t.startDB("foo");

base = [];
base.push({
    a: 1,
    b: "this is some text.\nThis text spans multiple lines, and just for fun\ncontains a comma",
    "c": "This has leading and trailing whitespace!"
});
base.push({
    a: 2,
    b: "When someone says something you \"put it in quotes\"",
    "c": "I like embedded quotes/slashes\\backslashes"
});
base.push({
    a: 3,
    b:
        "  This line contains the empty string and has leading and trailing whitespace inside the quotes!  ",
    "c": ""
});
base.push({a: 4, b: "", "c": "How are empty entries handled?"});
base.push({a: 5, b: "\"\"", c: "\"This string is in quotes and contains empty quotes (\"\")\""});
base.push({a: "a", b: "b", c: "c"});

assert.eq(0, c.count(), "setup");

t.runTool("import",
          "--file",
          "jstests/tool/data/csvimport1.csv",
          "-d",
          t.baseName,
          "-c",
          "foo",
          "--type",
          "csv",
          "-f",
          "a,b,c");
assert.soon(base.length + " == c.count()", "after import 1 ");

a = c.find().sort({a: 1}).toArray();
for (i = 0; i < base.length; i++) {
    delete a[i]._id;
    assert.docEq(base[i], a[i], "csv parse " + i);
}

c.drop();
assert.eq(0, c.count(), "after drop");

t.runTool("import",
          "--file",
          "jstests/tool/data/csvimport1.csv",
          "-d",
          t.baseName,
          "-c",
          "foo",
          "--type",
          "csv",
          "--headerline");
assert.soon("c.findOne()", "no data after sleep");
assert.eq(base.length - 1, c.count(), "after import 2");

x = c.find().sort({a: 1}).toArray();
for (i = 0; i < base.length - 1; i++) {
    delete x[i]._id;
    assert.docEq(base[i], x[i], "csv parse with headerline " + i);
}

t.stop();
