Project for Continous Integration
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

274 lines
13 KiB

  1. package device.cdPlayer;
  2. import device.Device;
  3. import device.cdPlayer.exceptions.*;
  4. import org.junit.jupiter.api.Test;
  5. import org.junit.jupiter.api.extension.ExtendWith;
  6. import org.junit.jupiter.params.ParameterizedTest;
  7. import org.junit.jupiter.params.provider.Arguments;
  8. import org.junit.jupiter.params.provider.MethodSource;
  9. import org.mockito.junit.jupiter.MockitoExtension;
  10. import java.lang.reflect.Method;
  11. import java.util.ArrayList;
  12. import java.util.Arrays;
  13. import java.util.List;
  14. import java.util.stream.Stream;
  15. import static org.assertj.core.api.Assertions.assertThat;
  16. import static org.junit.jupiter.api.Assertions.*;
  17. @ExtendWith(MockitoExtension.class)
  18. class CDPlayerTest {
  19. @ParameterizedTest
  20. @MethodSource("playTestData")
  21. void play(String testName, CDPlayer _cdPlayer,Exception exception , String expectedResult) {
  22. if(exception!=null){
  23. Exception newException=assertThrows(exception.getClass(),()->_cdPlayer.play());
  24. assertEquals(expectedResult, newException.getMessage());
  25. }else{
  26. assertThat(_cdPlayer.play()).describedAs(testName).isEqualTo(expectedResult);
  27. }
  28. }
  29. static Stream<Arguments> playTestData () {
  30. //some PlayLists
  31. String[] videoPlayList=new String[]{"Video 01","Video 02","Video 03","Video 04","Video 05"};
  32. String[] audioPlayList=new String[]{"Audio 01","Audio 02","Audio 03","Audio 04","Audio 05"};
  33. //some CDs
  34. CD videoCD1=new CD("DVD",videoPlayList);
  35. CD videoCD2=new CD("Blue-ray",videoPlayList);
  36. CD audioCD1=new CD("Audio",audioPlayList);
  37. CD audioCD2=new CD("MP3",audioPlayList);
  38. CD audioCD3=new CD("WMA",audioPlayList);
  39. CD audioCD4=new CD("AAC",audioPlayList);
  40. //some CDPlayers
  41. CDPlayer cdPlayer1=new CDPlayer();
  42. CDPlayer cdPlayer2=new CDPlayer();
  43. cdPlayer2.tapOnCdFlap();
  44. cdPlayer2.tapOnCdFlap();
  45. CDPlayer cdPlayer3=new CDPlayer();
  46. cdPlayer3.tapOnCdFlap();
  47. CDPlayer cdPlayer4=new CDPlayer();
  48. cdPlayer4.tapOnCdFlap();
  49. cdPlayer4.setCD(videoCD1);
  50. //===================================
  51. CDPlayer cdPlayer5=new CDPlayer();
  52. cdPlayer5.tapOnCdFlap();
  53. cdPlayer5.setCD(videoCD1);
  54. cdPlayer5.tapOnCdFlap();
  55. CDPlayer cdPlayer6=new CDPlayer();
  56. cdPlayer6.tapOnCdFlap();
  57. cdPlayer6.setCD(videoCD2);
  58. cdPlayer6.tapOnCdFlap();
  59. //===================================
  60. CDPlayer cdPlayer7=new CDPlayer();
  61. cdPlayer7.tapOnCdFlap();
  62. cdPlayer7.setCD(audioCD1);
  63. cdPlayer7.tapOnCdFlap();
  64. CDPlayer cdPlayer8=new CDPlayer();
  65. cdPlayer8.tapOnCdFlap();
  66. cdPlayer8.setCD(audioCD2);
  67. cdPlayer8.tapOnCdFlap();
  68. CDPlayer cdPlayer9=new CDPlayer();
  69. cdPlayer9.tapOnCdFlap();
  70. cdPlayer9.setCD(audioCD3);
  71. cdPlayer9.tapOnCdFlap();
  72. CDPlayer cdPlayer10=new CDPlayer();
  73. cdPlayer10.tapOnCdFlap();
  74. cdPlayer10.setCD(audioCD4);
  75. cdPlayer10.tapOnCdFlap();
  76. return Stream.of(
  77. Arguments.of("[CdFlap=isClosed , CdDriveContent=>isEmpty] => NoCD", cdPlayer1, new NoCDException(), "CD must be set."),
  78. Arguments.of("[CdFlap has been Opened and Closed, CdDriveContent=>isEmpty] => NoCD", cdPlayer2,new NoCDException(),"CD must be set."),
  79. Arguments.of("[CdFlap=isOpen , CdDriveContent=>isEmpty] => CdFlapIsOpen", cdPlayer3,new CdFlapIsOpenException(),"Cd Flap must be closed."),
  80. Arguments.of("[CdFlap=isOpen , CdDriveContent=>isSet] => CdFlapIsOpen", cdPlayer4,new CdFlapIsOpenException(),"Cd Flap must be closed."),
  81. Arguments.of("[CdFlap=isClosed , CdDriveContent=>isSet, CdFormat=>DVD] => FormatNotSupported",cdPlayer5,new FormatNotSupportedException(),"Cd-Format not supported."),
  82. Arguments.of("[CdFlap=isClosed , CdDriveContent=>isSet, CdFormat=>Blue-ray] => FormatNotSupported",cdPlayer6, new FormatNotSupportedException(),"Cd-Format not supported."),
  83. Arguments.of("[CdFlap=isClosed , CdDriveContent=>isSet, CdFormat=>Audio] => AllConditionsForPlayMet", cdPlayer7,null,"AllConditionsForPlayMet"),
  84. Arguments.of("[CdFlap=isClosed , CdDriveContent=>isSet, CdFormat=>MP3] => AllConditionsForPlayMet", cdPlayer8,null,"AllConditionsForPlayMet"),
  85. Arguments.of("[CdFlap=isClosed , CdDriveContent=>isSet, CdFormat=>WMA] => AllConditionsForPlayMet", cdPlayer9,null,"AllConditionsForPlayMet"),
  86. Arguments.of("[CdFlap=isClosed , CdDriveContent=>isSet, CdFormat=>AAC] => AllConditionsForPlayMet", cdPlayer10,null,"AllConditionsForPlayMet")
  87. );
  88. }
  89. @ParameterizedTest
  90. @MethodSource("louderTestData")
  91. void louderTest(String testName,String testDirection, CDPlayer _cdPlayer,int anzClicks, int expectedResult) {
  92. for (int i = 0; i < anzClicks; i++) {
  93. _cdPlayer.louder();
  94. }
  95. if(testDirection.equals("VolumeIncreased")){
  96. assertThat(_cdPlayer.getVolume()).describedAs(testName).isEqualTo(expectedResult);
  97. }
  98. if(testDirection.equals("VolumeHasChanged")){
  99. assertThat(_cdPlayer.getVolume()).describedAs(testName).isNotEqualTo(expectedResult);
  100. }if(testDirection.equals("VolumeNotDecreased")){
  101. assertThat(_cdPlayer.getVolume()).describedAs(testName).isNotEqualTo(expectedResult);
  102. }
  103. }
  104. static Stream<Arguments> louderTestData () {
  105. CDPlayer cdPlayer=new CDPlayer();
  106. return Stream.of(
  107. Arguments.of("[getVolume() after 20x louder() ] => VolumeIncreased","VolumeIncreased", cdPlayer, 20, 20),
  108. Arguments.of("[getVolume() after 2x louder() ] => VolumeHasChanged","VolumeHasChanged" ,cdPlayer,2,0),
  109. Arguments.of("[getVolume() after 5x louder() ] => VolumeDecreased","VolumeNotDecreased", cdPlayer,5,-5)
  110. );
  111. }
  112. @ParameterizedTest
  113. @MethodSource("quieterTestData")
  114. void quieterTest(String testName,String testDirection, CDPlayer _cdPlayer,int anzClicks, int expectedResult) {
  115. for (int i = 0; i < anzClicks; i++) {
  116. _cdPlayer.quieter();
  117. }
  118. if(testDirection.equals("VolumeDecreased")){
  119. for (int i = 0; i < 20; i++) {
  120. _cdPlayer.louder();
  121. }
  122. for (int i = 0; i < anzClicks; i++) {
  123. _cdPlayer.quieter();
  124. }
  125. assertThat(_cdPlayer.getVolume()).describedAs(testName).isEqualTo(expectedResult);
  126. }
  127. if(testDirection.equals("VolumeHasNotChanged")){
  128. assertThat(_cdPlayer.getVolume()).describedAs(testName).isEqualTo(expectedResult);
  129. }if(testDirection.equals("VolumeNotIncreased")){
  130. assertThat(_cdPlayer.getVolume()).describedAs(testName).isNotEqualTo(expectedResult);
  131. }
  132. }
  133. static Stream<Arguments> quieterTestData () {
  134. CDPlayer cdPlayer=new CDPlayer();
  135. return Stream.of(
  136. Arguments.of("[getVolume() after 20x quieter() starting by 20] => VolumeHasDecreased","VolumeDecreased", cdPlayer, 19, 1),
  137. Arguments.of("[getVolume() after 20x quieter() starting by 0] => VolumeHasNotChanged","VolumeHasNotChanged" ,cdPlayer,20,0),
  138. Arguments.of("[getVolume() after 5x quieter() starting by 0] => VolumeNotIncreased","VolumeNotIncreased", cdPlayer,5,5)
  139. );
  140. }
  141. @ParameterizedTest
  142. @MethodSource("nextTestData")
  143. void nextTest(String testName,String testDirection, CDPlayer _cdPlayer,int anzClicks, String expectedResult){
  144. if(testDirection.equals("SecondSongSelected")|| testDirection.equals("ThirdSongSelected")){
  145. for (int i = 0; i < anzClicks; i++) {
  146. _cdPlayer.next();
  147. }
  148. assertThat(_cdPlayer.getActualPlayTrack()).describedAs(testName).isEqualTo(expectedResult);
  149. }
  150. if(testDirection.equals("FirstSongSelected")){
  151. for (int i = 0; i <anzClicks; i++) {
  152. _cdPlayer.next();
  153. }
  154. assertThat(_cdPlayer.getActualPlayTrack()).describedAs(testName).isEqualTo(expectedResult);
  155. }
  156. }
  157. static Stream<Arguments> nextTestData () {
  158. String[] audioPlayList=new String[]{"Audio 01","Audio 02","Audio 03","Audio 04","Audio 05"};
  159. CD audioCD=new CD("Audio",audioPlayList);
  160. CDPlayer cdPlayer1=new CDPlayer();
  161. cdPlayer1.tapOnCdFlap();
  162. cdPlayer1.setCD(audioCD);
  163. cdPlayer1.tapOnCdFlap();
  164. CDPlayer cdPlayer2=new CDPlayer();
  165. cdPlayer2.tapOnCdFlap();
  166. cdPlayer2.setCD(audioCD);
  167. cdPlayer2.tapOnCdFlap();
  168. CDPlayer cdPlayer3=new CDPlayer();
  169. cdPlayer3.tapOnCdFlap();
  170. cdPlayer3.setCD(audioCD);
  171. cdPlayer3.tapOnCdFlap();
  172. return Stream.of(
  173. Arguments.of("[getActualPlayTrack() after 1x next() starting by firstSong] => SecondSongSelected","SecondSongSelected", cdPlayer1, 1, cdPlayer1.getSongByNumber(1)),
  174. Arguments.of("[getActualPlayTrack() after 2x next() starting by firstSong] => ThirdSongSelected","ThirdSongSelected" ,cdPlayer2,2,cdPlayer2.getSongByNumber(2)),
  175. Arguments.of("[getActualPlayTrack() after 1x next() starting by lastSong] => FirstSongSelected","FirstSongSelected", cdPlayer3,cdPlayer3.getItemList().length,cdPlayer3.getSongByNumber(0))
  176. );
  177. }
  178. @ParameterizedTest
  179. @MethodSource("prevTestData")
  180. void prevTest(String testName,String testDirection, CDPlayer _cdPlayer,int anzClicks, String expectedResult){
  181. if(testDirection.equals("StartingBySecondSong")) {
  182. _cdPlayer.next();
  183. }
  184. if(testDirection.equals("StartingByThirdSong")) {
  185. _cdPlayer.next();
  186. _cdPlayer.next();
  187. }
  188. for (int i = 0; i < anzClicks; i++) {
  189. _cdPlayer.prev();
  190. }
  191. assertThat(_cdPlayer.getActualPlayTrack()).describedAs(testName).isEqualTo(expectedResult);
  192. }
  193. static Stream<Arguments> prevTestData () {
  194. String[] audioPlayList = new String[]{"Audio 01", "Audio 02", "Audio 03", "Audio 04", "Audio 05"};
  195. CD audioCD = new CD("Audio", audioPlayList);
  196. CDPlayer cdPlayer1 = new CDPlayer();
  197. cdPlayer1.tapOnCdFlap();
  198. cdPlayer1.setCD(audioCD);
  199. cdPlayer1.tapOnCdFlap();
  200. return Stream.of(
  201. Arguments.of("[getActualPlayTrack() after 1x prev() starting by secondSong] => FirstSongSelected", "StartingBySecondSong", cdPlayer1, 1, cdPlayer1.getSongByNumber(0)),
  202. Arguments.of("[getActualPlayTrack() after 2x prev() starting by thirdSong] => FirstSongSelected", "StartingByThirdSong", cdPlayer1, 2, cdPlayer1.getSongByNumber(0)),
  203. Arguments.of("[getActualPlayTrack() after 1x prev() starting by firstSong] => FirstSongSelected", "StartingByFirstSong", cdPlayer1, 1, cdPlayer1.getSongByNumber(0))
  204. );
  205. }
  206. @ParameterizedTest
  207. @MethodSource("getOptionsTestData")
  208. void getOptionsTest(String testName,String testDirection, CDPlayer _cdPlayer){
  209. if(testDirection.equals("ReturnValueNotNull")) {
  210. assertThat(_cdPlayer.getOptions()).describedAs(testName).isNotEqualTo(null);
  211. }
  212. if(testDirection.equals("ArrayLengthGreaterThen0")) {
  213. assertThat(_cdPlayer.getOptions().length).describedAs(testName).isNotEqualTo(0);
  214. }
  215. if(testDirection.equals("ArrayContainsInterfaceMethods")) {
  216. Method[]interfaceMethods=Device.class.getDeclaredMethods();
  217. List<String> deviceMethods = new ArrayList<String>(Arrays.asList(_cdPlayer.getOptions()));
  218. for (int i = 0; i < interfaceMethods.length; i++) {
  219. assertThat(deviceMethods.contains(interfaceMethods[i].getName())).describedAs(testName).isEqualTo(true);
  220. }
  221. }
  222. }
  223. static Stream<Arguments> getOptionsTestData () {
  224. CDPlayer cdPlayer1 = new CDPlayer();
  225. return Stream.of(
  226. Arguments.of("[getOptions(): shouldNotReturnNull] => ReturnValueNotNull", "ReturnValueNotNull", cdPlayer1),
  227. Arguments.of("[getOptions(): shouldReturnAnArrayWithLengthGreaterThen0] => ArrayLengthGreaterThen0", "ArrayLengthGreaterThen0", cdPlayer1),
  228. Arguments.of("[getOptions(): shouldReturnAnArrayWithInAllInterfaceMethods] => ArrayContainsInterfaceMethods", "ArrayContainsInterfaceMethods", cdPlayer1)
  229. );
  230. }
  231. @Test
  232. void getVolumeReturnValueBetween0And100(){
  233. CDPlayer cdPlayer1 = new CDPlayer();
  234. boolean volumeIstInValueRange=false;
  235. int volume=cdPlayer1.getVolume();
  236. if(volume>=0 && volume <=100){
  237. volumeIstInValueRange=true;
  238. }
  239. assertThat(volumeIstInValueRange).isEqualTo(true);
  240. }
  241. }