Sha256: 2af635025cf0d05d045e932a9165c5c777da2aa4de3acc34a8c405b54d88ccf9

Contents?: true

Size: 1.42 KB

Versions: 3

Compression:

Stored size: 1.42 KB

Contents

# -*- encoding: utf-8 -*-

require 'test_helper'
require 'hexapdf/document'
require 'hexapdf/task/dereference'

describe HexaPDF::Task::Dereference do
  before do
    @doc = HexaPDF::Document.new(io: StringIO.new(MINIMAL_PDF))
  end

  it "dereferences all references to objects" do
    obj = @doc.add(:test)
    len = @doc.add(5)
    str = @doc.add(@doc.wrap({Length: len}, stream: ''))
    @doc.trailer[:Test] = str
    pages = @doc.wrap(Type: :Pages)
    pages.add_page(@doc.wrap(Type: :Page))
    @doc.trailer[:Test2] = pages

    checker = lambda do |val, done = {}|
      case val
      when Array then val.all? {|v| checker.call(v, done)}
      when Hash then val.all? {|_, v| checker.call(v, done)}
      when HexaPDF::Reference
        false
      when HexaPDF::Object
        if done.key?(val)
          true
        else
          done[val] = true
          checker.call(val.value, done)
        end
      else
        true
      end
    end
    refute(checker.call(@doc.trailer))
    assert_equal([obj, len], @doc.task(:dereference))
    assert(checker.call(@doc.trailer))
    assert_equal([obj, len], @doc.task(:dereference))
    assert(checker.call(@doc.trailer))
  end

  it "dereferences only a single object" do
    assert(@doc.object(5).value[:Font][:F1].kind_of?(HexaPDF::Reference))
    assert_nil(@doc.task(:dereference, object: @doc.object(5)))
    refute(@doc.object(5).value[:Font][:F1].kind_of?(HexaPDF::Reference))
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
hexapdf-0.4.0 test/hexapdf/task/test_dereference.rb
hexapdf-0.3.0 test/hexapdf/task/test_dereference.rb
hexapdf-0.2.0 test/hexapdf/task/test_dereference.rb