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.

180 lines
8.1 KiB

  1. package device.cdPlayer;
  2. import device.cdPlayer.exceptions.*;
  3. import org.junit.jupiter.api.extension.ExtendWith;
  4. import org.junit.jupiter.params.ParameterizedTest;
  5. import org.junit.jupiter.params.provider.Arguments;
  6. import org.junit.jupiter.params.provider.MethodSource;
  7. import org.mockito.junit.jupiter.MockitoExtension;
  8. import java.util.stream.Stream;
  9. import static org.assertj.core.api.Assertions.assertThat;
  10. import static org.junit.jupiter.api.Assertions.*;
  11. @ExtendWith(MockitoExtension.class)
  12. class CDPlayerTest {
  13. @ParameterizedTest
  14. @MethodSource("playTestData")
  15. void play(String testName, CDPlayer _cdPlayer,Exception exception , String expectedResult) {
  16. if(exception!=null){
  17. Exception newException=assertThrows(exception.getClass(),()->_cdPlayer.play());
  18. assertEquals(expectedResult, newException.getMessage());
  19. }else{
  20. assertThat(_cdPlayer.play()).describedAs(testName).isEqualTo(expectedResult);
  21. }
  22. }
  23. static Stream<Arguments> playTestData () {
  24. //some PlayLists
  25. String[] videoPlayList=new String[]{"Video 01","Video 02","Video 03","Video 04","Video 05"};
  26. String[] audioPlayList=new String[]{"Audio 01","Audio 02","Audio 03","Audio 04","Audio 05"};
  27. //some CDs
  28. CD videoCD1=new CD("DVD",videoPlayList);
  29. CD videoCD2=new CD("Blue-ray",videoPlayList);
  30. CD audioCD1=new CD("Audio",audioPlayList);
  31. CD audioCD2=new CD("MP3",audioPlayList);
  32. CD audioCD3=new CD("WMA",audioPlayList);
  33. CD audioCD4=new CD("AAC",audioPlayList);
  34. //some CDPlayers
  35. CDPlayer cdPlayer1=new CDPlayer();
  36. CDPlayer cdPlayer2=new CDPlayer();
  37. cdPlayer2.tapOnCdFlap();
  38. cdPlayer2.tapOnCdFlap();
  39. CDPlayer cdPlayer3=new CDPlayer();
  40. cdPlayer3.tapOnCdFlap();
  41. CDPlayer cdPlayer4=new CDPlayer();
  42. cdPlayer4.tapOnCdFlap();
  43. cdPlayer4.setCD(videoCD1);
  44. //===================================
  45. CDPlayer cdPlayer5=new CDPlayer();
  46. cdPlayer5.tapOnCdFlap();
  47. cdPlayer5.setCD(videoCD1);
  48. cdPlayer5.tapOnCdFlap();
  49. CDPlayer cdPlayer6=new CDPlayer();
  50. cdPlayer6.tapOnCdFlap();
  51. cdPlayer6.setCD(videoCD2);
  52. cdPlayer6.tapOnCdFlap();
  53. //===================================
  54. CDPlayer cdPlayer7=new CDPlayer();
  55. cdPlayer7.tapOnCdFlap();
  56. cdPlayer7.setCD(audioCD1);
  57. cdPlayer7.tapOnCdFlap();
  58. CDPlayer cdPlayer8=new CDPlayer();
  59. cdPlayer8.tapOnCdFlap();
  60. cdPlayer8.setCD(audioCD2);
  61. cdPlayer8.tapOnCdFlap();
  62. CDPlayer cdPlayer9=new CDPlayer();
  63. cdPlayer9.tapOnCdFlap();
  64. cdPlayer9.setCD(audioCD3);
  65. cdPlayer9.tapOnCdFlap();
  66. CDPlayer cdPlayer10=new CDPlayer();
  67. cdPlayer10.tapOnCdFlap();
  68. cdPlayer10.setCD(audioCD4);
  69. cdPlayer10.tapOnCdFlap();
  70. return Stream.of(
  71. Arguments.of("[CdFlap=isClosed , CdDriveContent=>isEmpty] => NoCD", cdPlayer1, new NoCDException(), "CD must be set."),
  72. Arguments.of("[CdFlap has been Opened and Closed, CdDriveContent=>isEmpty] => NoCD", cdPlayer2,new NoCDException(),"CD must be set."),
  73. Arguments.of("[CdFlap=isOpen , CdDriveContent=>isEmpty] => CdFlapIsOpen", cdPlayer3,new CdFlapIsOpenException(),"Cd Flap must be closed."),
  74. Arguments.of("[CdFlap=isOpen , CdDriveContent=>isSet] => CdFlapIsOpen", cdPlayer4,new CdFlapIsOpenException(),"Cd Flap must be closed."),
  75. Arguments.of("[CdFlap=isClosed , CdDriveContent=>isSet, CdFormat=>DVD] => FormatNotSupported",cdPlayer5,new FormatNotSupportedException(),"Cd-Format not supported."),
  76. Arguments.of("[CdFlap=isClosed , CdDriveContent=>isSet, CdFormat=>Blue-ray] => FormatNotSupported",cdPlayer6, new FormatNotSupportedException(),"Cd-Format not supported."),
  77. Arguments.of("[CdFlap=isClosed , CdDriveContent=>isSet, CdFormat=>Audio] => AllConditionsForPlayMet", cdPlayer7,null,"AllConditionsForPlayMet"),
  78. Arguments.of("[CdFlap=isClosed , CdDriveContent=>isSet, CdFormat=>MP3] => AllConditionsForPlayMet", cdPlayer8,null,"AllConditionsForPlayMet"),
  79. Arguments.of("[CdFlap=isClosed , CdDriveContent=>isSet, CdFormat=>WMA] => AllConditionsForPlayMet", cdPlayer9,null,"AllConditionsForPlayMet"),
  80. Arguments.of("[CdFlap=isClosed , CdDriveContent=>isSet, CdFormat=>AAC] => AllConditionsForPlayMet", cdPlayer10,null,"AllConditionsForPlayMet")
  81. );
  82. }
  83. @ParameterizedTest
  84. @MethodSource("louderTestData")
  85. void louderTest(String testName,String testDirection, CDPlayer _cdPlayer,int anzClicks, int expectedResult) {
  86. for (int i = 0; i < anzClicks; i++) {
  87. _cdPlayer.louder();
  88. }
  89. if(testDirection.equals("VolumeIncreased")){
  90. assertThat(_cdPlayer.getVolume()).describedAs(testName).isEqualTo(expectedResult);
  91. }
  92. if(testDirection.equals("VolumeHasChanged")){
  93. assertThat(_cdPlayer.getVolume()).describedAs(testName).isNotEqualTo(expectedResult);
  94. }if(testDirection.equals("VolumeNotDecreased")){
  95. assertThat(_cdPlayer.getVolume()).describedAs(testName).isNotEqualTo(expectedResult);
  96. }
  97. }
  98. static Stream<Arguments> louderTestData () {
  99. CDPlayer cdPlayer=new CDPlayer();
  100. return Stream.of(
  101. Arguments.of("[getVolume() after 20x louder() ] => VolumeIncreased","VolumeIncreased", cdPlayer, 20, 20),
  102. Arguments.of("[getVolume() after 2x louder() ] => VolumeHasChanged","VolumeHasChanged" ,cdPlayer,2,0),
  103. Arguments.of("[getVolume() after 5x louder() ] => VolumeDecreased","VolumeNotDecreased", cdPlayer,5,-5)
  104. );
  105. }
  106. @ParameterizedTest
  107. @MethodSource("quieterTestData")
  108. void quieterTest(String testName,String testDirection, CDPlayer _cdPlayer,int anzClicks, int expectedResult) {
  109. for (int i = 0; i < anzClicks; i++) {
  110. _cdPlayer.quieter();
  111. }
  112. if(testDirection.equals("VolumeDecreased")){
  113. for (int i = 0; i < 20; i++) {
  114. _cdPlayer.louder();
  115. }
  116. for (int i = 0; i < anzClicks; i++) {
  117. _cdPlayer.quieter();
  118. }
  119. assertThat(_cdPlayer.getVolume()).describedAs(testName).isEqualTo(expectedResult);
  120. }
  121. if(testDirection.equals("VolumeHasNotChanged")){
  122. assertThat(_cdPlayer.getVolume()).describedAs(testName).isEqualTo(expectedResult);
  123. }if(testDirection.equals("VolumeNotIncreased")){
  124. assertThat(_cdPlayer.getVolume()).describedAs(testName).isNotEqualTo(expectedResult);
  125. }
  126. }
  127. static Stream<Arguments> quieterTestData () {
  128. CDPlayer cdPlayer=new CDPlayer();
  129. return Stream.of(
  130. Arguments.of("[getVolume() after 20x quieter() starting by 20] => VolumeHasDecreased","VolumeDecreased", cdPlayer, 19, 1),
  131. Arguments.of("[getVolume() after 20x quieter() starting by 0] => VolumeHasNotChanged","VolumeHasNotChanged" ,cdPlayer,20,0),
  132. Arguments.of("[getVolume() after 5x quieter() starting by 0] => VolumeNotIncreased","VolumeNotIncreased", cdPlayer,5,5)
  133. );
  134. }
  135. @ParameterizedTest
  136. @MethodSource("nextTestData")
  137. void nextTest(String testName,String testDirection, CDPlayer _cdPlayer,int anzClicks, String expectedResult){
  138. for (int i = 0; i < anzClicks; i++) {
  139. _cdPlayer.next();
  140. }
  141. if(testDirection.equals("SecondSongSelected")){
  142. assertThat(_cdPlayer.getActualPlayTrack()).describedAs(testName).isEqualTo(expectedResult);
  143. }
  144. }
  145. static Stream<Arguments> nextTestData () {
  146. String[] audioPlayList=new String[]{"Audio 01","Audio 02","Audio 03","Audio 04","Audio 05"};
  147. CD audioCD=new CD("Audio",audioPlayList);
  148. CDPlayer cdPlayer=new CDPlayer();
  149. cdPlayer.tapOnCdFlap();
  150. cdPlayer.setCD(audioCD);
  151. cdPlayer.tapOnCdFlap();
  152. return Stream.of(
  153. Arguments.of("[getActualPlayTrack() after 1x next() starting by firstSong] => SecondSongSelected","SecondSongSelected", cdPlayer, 1, cdPlayer.getSongByNumber(1))
  154. );
  155. }
  156. }