/* */ 
(function(Buffer) {
  var common = require('../common');
  var QuerystringParser = require(common.lib + '/querystring_parser').QuerystringParser,
      Buffer = require('buffer').Buffer,
      gently,
      parser;
  function test(test) {
    gently = new Gently();
    parser = new QuerystringParser();
    test();
    gently.verify(test.name);
  }
  test(function constructor() {
    assert.equal(parser.buffer, '');
    assert.equal(parser.constructor.name, 'QuerystringParser');
  });
  test(function write() {
    var a = new Buffer('a=1');
    assert.equal(parser.write(a), a.length);
    var b = new Buffer('&b=2');
    parser.write(b);
    assert.equal(parser.buffer, a + b);
  });
  test(function end() {
    var FIELDS = {
      a: ['b', {c: 'd'}],
      e: 'f'
    };
    gently.expect(GENTLY.hijacked.querystring, 'parse', function(str) {
      assert.equal(str, parser.buffer);
      return FIELDS;
    });
    gently.expect(parser, 'onField', Object.keys(FIELDS).length, function(key, val) {
      assert.deepEqual(FIELDS[key], val);
    });
    gently.expect(parser, 'onEnd');
    parser.buffer = 'my buffer';
    parser.end();
    assert.equal(parser.buffer, '');
  });
})(require('buffer').Buffer);
