require "test/unit"
require "phi"
class TCPageControl < Test::Unit::TestCase
  def test_ancestors
    assert_equal Phi::WinControl, Phi::PageControl.superclass
  end

  # [Delphi] function FindNextPage(CurPage: TTabSheet; GoForward: Boolean; CheckTabVisible: Boolean): TTabSheet;
  def test_find_next_page
    form = Phi::Form.new
    page = Phi::PageControl.new(form)
    tab1 = Phi::TabSheet.new(page)
    tab2 = Phi::TabSheet.new(page)

    # ---find_next_page(cur_page, go_forward = true, check_tab_visible = true): Phi::TabSheet
    # cur_page で指定したタブを基準として前後のタブを返します。
    # @param cur_page 基準とするタブ (Phi::TabSheet)
    # @param go_forward 前後どちらに進むか
    #   true: 次のタブを返します。
    #   false: 前のタブを返します。
    # @param check_tab_visible tab_sheet.tab_visible を考慮するか
    #   true: tab_visible が true に設定されている次のタブを返します。
    #   false: tab_visible が false に設定されているタブを含めた次のタブを返します。

    assert_equal tab2, page.find_next_page(tab1)
    assert_equal tab1, page.find_next_page(tab2)

    tab3 = Phi::TabSheet.new(page)
    assert_equal tab2, page.find_next_page(tab1)
    assert_equal tab3, page.find_next_page(tab2)
    assert_equal tab1, page.find_next_page(tab3)

    assert_equal tab2, page.find_next_page(tab1, true)
    assert_equal tab3, page.find_next_page(tab2, true)
    assert_equal tab1, page.find_next_page(tab3, true)

    assert_equal tab3, page.find_next_page(tab1, false)
    assert_equal tab1, page.find_next_page(tab2, false)
    assert_equal tab2, page.find_next_page(tab3, false)
    
    tab3.tab_visible = false
    assert !tab3.tab_visible

    assert_equal tab2, page.find_next_page(tab1, true)
    assert_equal tab1, page.find_next_page(tab2, true)
    assert_equal tab1, page.find_next_page(tab3, true)

    assert_equal tab2, page.find_next_page(tab1, false)
    assert_equal tab1, page.find_next_page(tab2, false)
    assert_equal tab2, page.find_next_page(tab3, false)
    
    assert_equal tab2, page.find_next_page(tab1, true, false)
    assert_equal tab3, page.find_next_page(tab2, true, false)
    assert_equal tab1, page.find_next_page(tab3, true, false)

    assert_equal tab3, page.find_next_page(tab1, false, false)
    assert_equal tab1, page.find_next_page(tab2, false, false)
    assert_equal tab2, page.find_next_page(tab3, false, false)
  end
end
