| /* |
| * Copyright 2015-2022 the original author or authors. |
| * |
| * All rights reserved. This program and the accompanying materials are |
| * made available under the terms of the Eclipse Public License v2.0 which |
| * accompanies this distribution and is available at |
| * |
| * https://www.eclipse.org/legal/epl-v20.html |
| */ |
| |
| package example; |
| |
| // tag::user_guide[] |
| import static org.junit.jupiter.api.Assertions.assertEquals; |
| import static org.junit.jupiter.api.Assertions.assertFalse; |
| import static org.junit.jupiter.api.Assertions.assertThrows; |
| import static org.junit.jupiter.api.Assertions.assertTrue; |
| |
| import java.util.EmptyStackException; |
| import java.util.Stack; |
| |
| import org.junit.jupiter.api.BeforeEach; |
| import org.junit.jupiter.api.DisplayName; |
| import org.junit.jupiter.api.Nested; |
| import org.junit.jupiter.api.Test; |
| |
| @DisplayName("A stack") |
| class TestingAStackDemo { |
| |
| Stack<Object> stack; |
| |
| @Test |
| @DisplayName("is instantiated with new Stack()") |
| void isInstantiatedWithNew() { |
| new Stack<>(); |
| } |
| |
| @Nested |
| @DisplayName("when new") |
| class WhenNew { |
| |
| @BeforeEach |
| void createNewStack() { |
| stack = new Stack<>(); |
| } |
| |
| @Test |
| @DisplayName("is empty") |
| void isEmpty() { |
| assertTrue(stack.isEmpty()); |
| } |
| |
| @Test |
| @DisplayName("throws EmptyStackException when popped") |
| void throwsExceptionWhenPopped() { |
| assertThrows(EmptyStackException.class, stack::pop); |
| } |
| |
| @Test |
| @DisplayName("throws EmptyStackException when peeked") |
| void throwsExceptionWhenPeeked() { |
| assertThrows(EmptyStackException.class, stack::peek); |
| } |
| |
| @Nested |
| @DisplayName("after pushing an element") |
| class AfterPushing { |
| |
| String anElement = "an element"; |
| |
| @BeforeEach |
| void pushAnElement() { |
| stack.push(anElement); |
| } |
| |
| @Test |
| @DisplayName("it is no longer empty") |
| void isNotEmpty() { |
| assertFalse(stack.isEmpty()); |
| } |
| |
| @Test |
| @DisplayName("returns the element when popped and is empty") |
| void returnElementWhenPopped() { |
| assertEquals(anElement, stack.pop()); |
| assertTrue(stack.isEmpty()); |
| } |
| |
| @Test |
| @DisplayName("returns the element when peeked but remains not empty") |
| void returnElementWhenPeeked() { |
| assertEquals(anElement, stack.peek()); |
| assertFalse(stack.isEmpty()); |
| } |
| } |
| } |
| } |
| // end::user_guide[] |