var assert = require('assert')
var Address = require('..').Address

var b58fixtures = require('./fixtures/base58')
var fixtures = require('./fixtures/address')

describe('Address', function() {
  var bothVectors = fixtures.pubKeyHash.concat(fixtures.scriptHash)

  describe('Constructor', function() {
    it('does not mutate the input', function() {
      bothVectors.forEach(function(f) {
        var hash = new Buffer(f.hex, 'hex')
        var addr = new Address(hash, f.version)

        assert.equal(addr.version, f.version)
        assert.equal(addr.hash.toString('hex'), f.hex)
      })
    })
  })

  describe('fromBase58Check', function() {
    it('throws on invalid base58check', function() {
      b58fixtures.invalid.forEach(function(f) {
        assert.throws(function() {
          Address.fromBase58Check(f)
        })
      })
    })

    bothVectors.forEach(function(f) {
      it('imports ' + f.description + ' correctly', function() {
        var addr = Address.fromBase58Check(f.base58check)

        assert.equal(addr.version, f.version)
        assert.equal(addr.hash.toString('hex'), f.hex)
      })
    })
  })

  describe('toBase58Check', function() {
    bothVectors.forEach(function(f) {
      it('exports ' + f.description + ' correctly', function() {
        var addr = Address.fromBase58Check(f.base58check)
        var result = addr.toBase58Check()

        assert.equal(result, f.base58check)
      })
    })
  })
})