var logfmt = require('../logfmt'),
    assert = require('assert');

suite('logfmt.parse', function() {
  test("simple flag parses", function(){
    assert.deepEqual({'hello':true}, logfmt.parse('hello'));
  })

  test("simple key/value parses", function(){
    assert.deepEqual({'hello':'kitty'}, logfmt.parse('hello=kitty'));
  })

  test("simple boolean parses", function(){
    assert.deepEqual({'foo':true, 'bar':false},
      logfmt.parse('foo=true bar=false'));
  })

  test('big numbers dont lose precision', function(){
    var parsed = logfmt.parse("thing=90071992547409934");
    assert.equal(parsed.thing.toString(), '90071992547409934');
  })

  test("number parse to strings", function(){
    assert.deepEqual({'foo':'123', 'bar':'456.789'},
      logfmt.parse('foo=123 bar=456.789'));
  })

  test("string with escapes", function(){
    assert.deepEqual({'hello':"\'kitty\'"},
      logfmt.parse('hello="\'kitty\'"'));
    assert.deepEqual({'hello':"\'kitty\'"},
      logfmt.parse('hello=\'kitty\''));
  })

  test("string with equals", function(){
    assert.deepEqual({foo:"hello=kitty"}, logfmt.parse('foo="hello=kitty"'));
  })

  test("readme string parses", function(){
    var test_string = "foo=bar a=14 baz=\"hello kitty\" "
    test_string += "cool%story=bro f %^asdf ";
    test_string += "code=H12 path=/hello/user@foo.com/close";
    var result = logfmt.parse(test_string)
    assert.equal( "H12", result["code"])
    assert.equal( "bar", result["foo"])
    assert.equal(14, result.a)
    assert.equal("hello kitty", result['baz'])
    assert.equal('bro', result['cool%story'])
    assert.equal(true, result.f)
    assert.equal(true, result['%^asdf'])
    assert.equal('/hello/user@foo.com/close', result['path'])
  })
})