'use strict'

var test = require('tap').test
var Parse = require('./')

function successTests (value) {
  test('parse successfully with the function', function (t) {
    t.plan(2)
    var result = Parse(value)
    t.error(result.err)
    t.deepEqual(result.value, JSON.parse(value))
  })

  test('parse successfully with the constructor', function (t) {
    t.plan(2)
    var result = new Parse(value)
    t.error(result.err)
    t.deepEqual(result.value, JSON.parse(value))
  })
}

function failureTests (value) {
  var expectedErr
  try {
    JSON.parse(value)
  } catch (err) {
    expectedErr = err
  }

  test('parse unsuccessfully with the function', function (t) {
    t.plan(2)
    var result = Parse(value)
    t.notOk(result.value, 'no value')
    t.equal(result.err.message, expectedErr.message)
  })

  test('parse successfully with the constructor', function (t) {
    t.plan(2)
    var result = new Parse(value)
    t.notOk(result.value, 'no value')
    t.equal(result.err.message, expectedErr.message)
  })
}

successTests('{ "object": 32 }')
failureTests('{ "object": 32')