| /** |
| * @license |
| * Copyright 2021 The Go Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style |
| * license that can be found in the LICENSE file. |
| */ |
| |
| import { parse } from '../../markdown'; |
| import { CarouselController } from './carousel'; |
| |
| describe('Tooltip', () => { |
| let carousel: HTMLDetailsElement; |
| let prevArrow: HTMLButtonElement; |
| let nextArrow: HTMLButtonElement; |
| let dots: HTMLElement[]; |
| let slides: HTMLElement[]; |
| let liveRegion: HTMLElement; |
| |
| beforeEach(async () => { |
| document.body.innerHTML = await parse(__dirname + '/carousel.md'); |
| carousel = document.querySelector('.js-carousel'); |
| new CarouselController(carousel); |
| prevArrow = carousel.querySelector('.go-Carousel-prevSlide'); |
| nextArrow = carousel.querySelector('.go-Carousel-nextSlide'); |
| dots = Array.from(carousel.querySelectorAll('.go-Carousel-dot')); |
| slides = Array.from(carousel.querySelectorAll('.go-Carousel-slide')); |
| liveRegion = carousel.querySelector('[aria-live]'); |
| }); |
| |
| afterEach(() => { |
| document.body.innerHTML = ''; |
| }); |
| |
| it('generates arrows, dots, and live region', () => { |
| expect(prevArrow).toBeDefined(); |
| expect(nextArrow).toBeDefined(); |
| expect(dots).toBeDefined(); |
| expect(liveRegion).toBeDefined(); |
| }); |
| |
| it('shows only the first slide', () => { |
| expect(slides[0].getAttribute('aria-hidden')).toBeFalsy(); |
| expect(slides[1].getAttribute('aria-hidden')).toBeTruthy(); |
| expect(slides[2].getAttribute('aria-hidden')).toBeTruthy(); |
| }); |
| |
| it('shows next slide on next arrow click', () => { |
| nextArrow.click(); |
| expect(slides[0].getAttribute('aria-hidden')).toBeTruthy(); |
| expect(slides[1].getAttribute('aria-hidden')).toBeFalsy(); |
| expect(slides[2].getAttribute('aria-hidden')).toBeTruthy(); |
| }); |
| |
| it('shows prev slide on prev arrow click', () => { |
| prevArrow.click(); |
| expect(slides[0].getAttribute('aria-hidden')).toBeTruthy(); |
| expect(slides[1].getAttribute('aria-hidden')).toBeTruthy(); |
| expect(slides[2].getAttribute('aria-hidden')).toBeFalsy(); |
| }); |
| |
| it('sets active slide on dot click', () => { |
| dots[1].click(); |
| expect(slides[0].getAttribute('aria-hidden')).toBeTruthy(); |
| expect(slides[1].getAttribute('aria-hidden')).toBeFalsy(); |
| expect(slides[2].getAttribute('aria-hidden')).toBeTruthy(); |
| }); |
| |
| it('updates live region', () => { |
| expect(liveRegion.textContent).toContain('Slide 1 of 3'); |
| dots[1].click(); |
| expect(liveRegion.textContent).toContain('Slide 2 of 3'); |
| }); |
| }); |