require './test/helper' require 'ludy/paginator' require 'ludy/symbol/to_proc' if RUBY_VERSION < '1.9.0' class TestPaginator < Test::Unit::TestCase def self.data; @data ||= (0..100).to_a; end def for_pager pager # assume data.size is 101, data is [0,1,2,3...] pager.per_page = 10 assert_equal 11, pager.size assert_nil pager[0] assert_equal((0..9).to_a, pager.page(1).to_a) assert_equal((10..19).to_a, pager[2].to_a) assert_equal(20, pager.page(3).first) assert_equal((90..99).to_a, pager[10].to_a) assert_equal([100], pager.page(11).to_a) assert_nil(pager.page(12)) assert_equal(pager[1], pager[2].prev) assert_equal(pager.page(11), pager[10].next) assert_nil(pager[1].prev) assert_nil(pager[10].next.next) assert_equal pager[4].data, pager[4].fetch assert_equal(pager[1], pager.pages.first) assert_equal(pager[2], pager.to_a[1]) assert_equal(5050, pager.inject(0){|r, i| r += i.inject(&:+) }) assert_equal 4, pager[4].page assert_equal 10, pager[2].begin assert_equal 19, pager[2].end assert_equal 100, pager[11].end end def test_basic pager = Ludy::Paginator.new( lambda{ |offset, per_page| # if for rails, # Data.find :all, :offset => offset, :limit => per_page TestPaginator.data[offset, per_page] }, lambda{ # if for rails, # Data.count TestPaginator.data.size }) for_pager pager end def test_offset_bug a = (0..9).to_a pager = Ludy::ArrayPaginator.new a pager.per_page = 5 assert_equal 5, pager[1].size assert_equal 5, pager[2].size assert_nil pager[3] end class Topic class << self def count opts = {} 101 end def find all, opts = {} TestPaginator.data[opts[:offset], opts[:limit]] end end end def test_for_rails for_pager Ludy::RailsPaginator.new(Topic) end def test_for_array for_pager Ludy::ArrayPaginator.new(TestPaginator.data) end def test_null_paginator nullpage = Ludy::NullPage.instance assert_equal 0, nullpage.page assert_nil nullpage.next assert_equal 0, nullpage.size assert_equal [], nullpage.data assert_equal nullpage.object_id, nullpage.pager.page(0).object_id assert_nil Ludy::Paginator.null.page(1) assert_equal nullpage.object_id, Ludy::Page.null.object_id end end