text: /* global describe, it */
  
  var assert = require('assert')
  var address = require('../src/address')
  
  var Note = require('../src/note')
  var NotePlaintext = require('../src/note_plaintext')
  
  describe('NotePlaintext', function () {
    var key = address.SpendingKey.random()
    var note = Note.dummy(key.address().a_pk)
    var notePt = new NotePlaintext(note, Buffer.from('Dummy plaintext'))
  
    describe('toBuffer/fromBuffer', function () {
      it('is unchanged by export and import', function () {
        var notePt2 = NotePlaintext.fromBuffer(notePt.toBuffer())
        assert.strictEqual(
          notePt.toBuffer().toString('hex'),
          notePt2.toBuffer().toString('hex'),
          'NotePlaintexts do not match')
      })
  
      describe('invalid lead byte', function () {
        var data = notePt.toBuffer()
        data[0] = 1
  
        it('throws', function () {
          assert.throws(function () {
            NotePlaintext.fromBuffer(data)
          }, new RegExp('lead byte of NotePlaintext is not recognized'))
        })
  
        it('throws with __noStrict = true', function () {
          assert.throws(function () {
            NotePlaintext.fromBuffer(data, true)
          }, new RegExp('lead byte of NotePlaintext is not recognized'))
        })
      })
  
      describe('insufficient data', function () {
        var data = notePt.toBuffer().slice(0, notePt.byteLength() - 1)
  
        it('throws', function () {
          assert.throws(function () {
            NotePlaintext.fromBuffer(data)
          }, new RegExp('NotePlaintext has unexpected data'))
        })
  
        it('throws with __noStrict = true', function () {
          assert.throws(function () {
            NotePlaintext.fromBuffer(data, true)
          }, new RegExp('NotePlaintext has unexpected data'))
        })
      })
  
      describe('excess data', function () {
        var data = Buffer.alloc(notePt.byteLength() + 1)
        notePt.toBuffer().copy(data)
  
        it('throws', function () {
          assert.throws(function () {
            NotePlaintext.fromBuffer(data)
          }, new RegExp('NotePlaintext has unexpected data'))
        })
  
        it('passes with __noStrict = true', function () {
          assert.doesNotThrow(function () {
            NotePlaintext.fromBuffer(data, true)
          }, new RegExp('NotePlaintext has unexpected data'))
        })
      })
    })
  
    describe('note', function () {
      it('generates the correct note', function () {
        var note2 = notePt.note(key.address().a_pk)
        assert.strictEqual(
          note.cm().toString('hex'),
          note2.cm().toString('hex'),
          'Commitments do not match')
        assert.strictEqual(
          note.nullifier(key).toString('hex'),
          note2.nullifier(key).toString('hex'),
          'Nullifiers do not match')
      })
    })
  })
  