import pytest @pytest.fixture( scope='session', params=(True, False), ids=lambda v: 'loop=' + str(v)) def loop(request): return request.param def test_remove_widget(loop): from kivy.uix.carousel import Carousel from kivy.uix.widget import Widget c = Carousel(loop=loop) assert c.index is None assert c.current_slide is None assert len(c.children) == 0 assert len(c.slides) == 0 N_SLIDES = 4 for i in range(N_SLIDES): c.add_widget(Widget()) assert c.index == 0 assert c.current_slide == c.slides[0] assert len(c.children) == 3 if loop else 2 assert len(c.slides) == N_SLIDES # test issue #6370 c.index = len(c.slides) - 1 c.remove_widget(c.slides[0]) # remove a slide(smaller index than the current_slide's). c.index = 1 old_current_slide = c.current_slide c.remove_widget(c.slides[c.index - 1]) assert c.index == 0 assert c.current_slide is old_current_slide assert len(c.children) == 2 assert len(c.slides) == 2 # remove a slide(bigger index than the current_slide's). old_current_slide = c.current_slide c.remove_widget(c.slides[c.index + 1]) assert c.index == 0 assert c.current_slide is old_current_slide assert len(c.children) == 1 assert len(c.slides) == 1 # remove the current_slide(the last one left). c.remove_widget(c.current_slide) assert c.index is None assert c.current_slide is None assert len(c.children) == 0 assert len(c.slides) == 0 @pytest.mark.parametrize( ('n_slides', 'index', 'loop', 'index_of_previous_slide', 'index_of_next_slide'), ( (1, 0, False, None, None), (1, 0, True, None, None), (2, 0, False, None, 1), (2, 0, True, 1, 1), (2, 1, False, 0, None), (2, 1, True, 0, 0), (3, 0, False, None, 1), (3, 0, True, 2, 1), (3, 1, False, 0, 2), (3, 1, True, 0, 2), (3, 2, False, 1, None), (3, 2, True, 1, 0), ) ) def test_previous_and_next( n_slides, index, loop, index_of_previous_slide, index_of_next_slide ): from kivy.uix.carousel import Carousel from kivy.uix.widget import Widget c = Carousel(loop=loop) for i in range(n_slides): c.add_widget(Widget()) c.index = index p_slide = c.previous_slide assert (p_slide and c.slides.index(p_slide)) == index_of_previous_slide n_slide = c.next_slide assert (n_slide and c.slides.index(n_slide)) == index_of_next_slide if __name__ == "__main__": pytest.main(args=[ __file__, ])