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.
293 lines
13 KiB
293 lines
13 KiB
package device.cdPlayer;
|
|
|
|
import device.Device;
|
|
import device.cdPlayer.exceptions.*;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.junit.jupiter.api.extension.ExtendWith;
|
|
import org.junit.jupiter.params.ParameterizedTest;
|
|
import org.junit.jupiter.params.provider.Arguments;
|
|
import org.junit.jupiter.params.provider.MethodSource;
|
|
import org.mockito.Mockito;
|
|
import org.mockito.junit.jupiter.MockitoExtension;
|
|
|
|
import java.lang.reflect.Method;
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
import java.util.stream.Stream;
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
import static org.mockito.Mockito.when;
|
|
|
|
@ExtendWith(MockitoExtension.class)
|
|
class CDPlayerTest {
|
|
|
|
@ParameterizedTest
|
|
@MethodSource("playTestData")
|
|
void play(String testName, CDPlayer _cdPlayer,Exception exception , String expectedResult) {
|
|
if(exception!=null){
|
|
Exception newException=assertThrows(exception.getClass(),()->_cdPlayer.play());
|
|
assertEquals(expectedResult, newException.getMessage());
|
|
}else{
|
|
assertThat(_cdPlayer.play()).describedAs(testName).isEqualTo(expectedResult);
|
|
}
|
|
}
|
|
static Stream<Arguments> playTestData () {
|
|
//some PlayLists
|
|
String[] videoPlayList=new String[]{"Video 01","Video 02","Video 03","Video 04","Video 05"};
|
|
String[] audioPlayList=new String[]{"Audio 01","Audio 02","Audio 03","Audio 04","Audio 05"};
|
|
//some CDs
|
|
CD videoCD1=new CD("DVD",videoPlayList);
|
|
CD videoCD2=new CD("Blue-ray",videoPlayList);
|
|
CD audioCD1=new CD("Audio",audioPlayList);
|
|
CD audioCD2=new CD("MP3",audioPlayList);
|
|
CD audioCD3=new CD("WMA",audioPlayList);
|
|
CD audioCD4=new CD("AAC",audioPlayList);
|
|
|
|
//some CDPlayers
|
|
CDPlayer cdPlayer1=new CDPlayer();
|
|
|
|
CDPlayer cdPlayer2=new CDPlayer();
|
|
cdPlayer2.tapOnCdFlap();
|
|
cdPlayer2.tapOnCdFlap();
|
|
|
|
CDPlayer cdPlayer3=new CDPlayer();
|
|
cdPlayer3.tapOnCdFlap();
|
|
|
|
CDPlayer cdPlayer4=new CDPlayer();
|
|
cdPlayer4.tapOnCdFlap();
|
|
cdPlayer4.setCD(videoCD1);
|
|
|
|
//===================================
|
|
CDPlayer cdPlayer5=new CDPlayer();
|
|
cdPlayer5.tapOnCdFlap();
|
|
cdPlayer5.setCD(videoCD1);
|
|
cdPlayer5.tapOnCdFlap();
|
|
|
|
CDPlayer cdPlayer6=new CDPlayer();
|
|
cdPlayer6.tapOnCdFlap();
|
|
cdPlayer6.setCD(videoCD2);
|
|
cdPlayer6.tapOnCdFlap();
|
|
//===================================
|
|
|
|
CDPlayer cdPlayer7=new CDPlayer();
|
|
cdPlayer7.tapOnCdFlap();
|
|
cdPlayer7.setCD(audioCD1);
|
|
cdPlayer7.tapOnCdFlap();
|
|
|
|
CDPlayer cdPlayer8=new CDPlayer();
|
|
cdPlayer8.tapOnCdFlap();
|
|
cdPlayer8.setCD(audioCD2);
|
|
cdPlayer8.tapOnCdFlap();
|
|
|
|
CDPlayer cdPlayer9=new CDPlayer();
|
|
cdPlayer9.tapOnCdFlap();
|
|
cdPlayer9.setCD(audioCD3);
|
|
cdPlayer9.tapOnCdFlap();
|
|
|
|
CDPlayer cdPlayer10=new CDPlayer();
|
|
cdPlayer10.tapOnCdFlap();
|
|
cdPlayer10.setCD(audioCD4);
|
|
cdPlayer10.tapOnCdFlap();
|
|
|
|
return Stream.of(
|
|
Arguments.of("[CdFlap=isClosed , CdDriveContent=>isEmpty] => NoCD", cdPlayer1, new NoCDException(), "CD must be set."),
|
|
Arguments.of("[CdFlap has been Opened and Closed, CdDriveContent=>isEmpty] => NoCD", cdPlayer2,new NoCDException(),"CD must be set."),
|
|
Arguments.of("[CdFlap=isOpen , CdDriveContent=>isEmpty] => CdFlapIsOpen", cdPlayer3,new CdFlapIsOpenException(),"Cd Flap must be closed."),
|
|
Arguments.of("[CdFlap=isOpen , CdDriveContent=>isSet] => CdFlapIsOpen", cdPlayer4,new CdFlapIsOpenException(),"Cd Flap must be closed."),
|
|
Arguments.of("[CdFlap=isClosed , CdDriveContent=>isSet, CdFormat=>DVD] => FormatNotSupported",cdPlayer5,new FormatNotSupportedException(),"Cd-Format not supported."),
|
|
Arguments.of("[CdFlap=isClosed , CdDriveContent=>isSet, CdFormat=>Blue-ray] => FormatNotSupported",cdPlayer6, new FormatNotSupportedException(),"Cd-Format not supported."),
|
|
Arguments.of("[CdFlap=isClosed , CdDriveContent=>isSet, CdFormat=>Audio] => AllConditionsForPlayMet", cdPlayer7,null,"AllConditionsForPlayMet"),
|
|
Arguments.of("[CdFlap=isClosed , CdDriveContent=>isSet, CdFormat=>MP3] => AllConditionsForPlayMet", cdPlayer8,null,"AllConditionsForPlayMet"),
|
|
Arguments.of("[CdFlap=isClosed , CdDriveContent=>isSet, CdFormat=>WMA] => AllConditionsForPlayMet", cdPlayer9,null,"AllConditionsForPlayMet"),
|
|
Arguments.of("[CdFlap=isClosed , CdDriveContent=>isSet, CdFormat=>AAC] => AllConditionsForPlayMet", cdPlayer10,null,"AllConditionsForPlayMet")
|
|
);
|
|
}
|
|
|
|
@ParameterizedTest
|
|
@MethodSource("louderTestData")
|
|
void louderTest(String testName,String testDirection, CDPlayer _cdPlayer,int anzClicks, int expectedResult) {
|
|
for (int i = 0; i < anzClicks; i++) {
|
|
_cdPlayer.louder();
|
|
}
|
|
if(testDirection.equals("VolumeIncreased")){
|
|
assertThat(_cdPlayer.getVolume()).describedAs(testName).isEqualTo(expectedResult);
|
|
}
|
|
if(testDirection.equals("VolumeHasChanged")){
|
|
assertThat(_cdPlayer.getVolume()).describedAs(testName).isNotEqualTo(expectedResult);
|
|
}if(testDirection.equals("VolumeNotDecreased")){
|
|
assertThat(_cdPlayer.getVolume()).describedAs(testName).isNotEqualTo(expectedResult);
|
|
}
|
|
}
|
|
static Stream<Arguments> louderTestData () {
|
|
CDPlayer cdPlayer=new CDPlayer();
|
|
return Stream.of(
|
|
Arguments.of("[getVolume() after 20x louder() ] => VolumeIncreased","VolumeIncreased", cdPlayer, 20, 20),
|
|
Arguments.of("[getVolume() after 2x louder() ] => VolumeHasChanged","VolumeHasChanged" ,cdPlayer,2,0),
|
|
Arguments.of("[getVolume() after 5x louder() ] => VolumeDecreased","VolumeNotDecreased", cdPlayer,5,-5)
|
|
);
|
|
}
|
|
|
|
@ParameterizedTest
|
|
@MethodSource("quieterTestData")
|
|
void quieterTest(String testName,String testDirection, CDPlayer _cdPlayer,int anzClicks, int expectedResult) {
|
|
for (int i = 0; i < anzClicks; i++) {
|
|
_cdPlayer.quieter();
|
|
}
|
|
|
|
if(testDirection.equals("VolumeDecreased")){
|
|
for (int i = 0; i < 20; i++) {
|
|
_cdPlayer.louder();
|
|
}
|
|
for (int i = 0; i < anzClicks; i++) {
|
|
_cdPlayer.quieter();
|
|
}
|
|
assertThat(_cdPlayer.getVolume()).describedAs(testName).isEqualTo(expectedResult);
|
|
}
|
|
if(testDirection.equals("VolumeHasNotChanged")){
|
|
assertThat(_cdPlayer.getVolume()).describedAs(testName).isEqualTo(expectedResult);
|
|
}if(testDirection.equals("VolumeNotIncreased")){
|
|
|
|
assertThat(_cdPlayer.getVolume()).describedAs(testName).isNotEqualTo(expectedResult);
|
|
}
|
|
}
|
|
|
|
static Stream<Arguments> quieterTestData () {
|
|
CDPlayer cdPlayer=new CDPlayer();
|
|
return Stream.of(
|
|
Arguments.of("[getVolume() after 20x quieter() starting by 20] => VolumeHasDecreased","VolumeDecreased", cdPlayer, 19, 1),
|
|
Arguments.of("[getVolume() after 20x quieter() starting by 0] => VolumeHasNotChanged","VolumeHasNotChanged" ,cdPlayer,20,0),
|
|
Arguments.of("[getVolume() after 5x quieter() starting by 0] => VolumeNotIncreased","VolumeNotIncreased", cdPlayer,5,5)
|
|
);
|
|
}
|
|
|
|
@ParameterizedTest
|
|
@MethodSource("nextTestData")
|
|
void nextTest(String testName,String testDirection, CDPlayer _cdPlayer,int anzClicks, String expectedResult){
|
|
|
|
if(testDirection.equals("SecondSongSelected")|| testDirection.equals("ThirdSongSelected")){
|
|
for (int i = 0; i < anzClicks; i++) {
|
|
_cdPlayer.next();
|
|
}
|
|
assertThat(_cdPlayer.getActualPlayTrack()).describedAs(testName).isEqualTo(expectedResult);
|
|
}
|
|
if(testDirection.equals("FirstSongSelected")){
|
|
for (int i = 0; i <anzClicks; i++) {
|
|
_cdPlayer.next();
|
|
}
|
|
assertThat(_cdPlayer.getActualPlayTrack()).describedAs(testName).isEqualTo(expectedResult);
|
|
}
|
|
}
|
|
static Stream<Arguments> nextTestData () {
|
|
|
|
String[] audioPlayList=new String[]{"Audio 01","Audio 02","Audio 03","Audio 04","Audio 05"};
|
|
CD audioCD=new CD("Audio",audioPlayList);
|
|
|
|
CDPlayer cdPlayer1=new CDPlayer();
|
|
cdPlayer1.tapOnCdFlap();
|
|
cdPlayer1.setCD(audioCD);
|
|
cdPlayer1.tapOnCdFlap();
|
|
|
|
CDPlayer cdPlayer2=new CDPlayer();
|
|
cdPlayer2.tapOnCdFlap();
|
|
cdPlayer2.setCD(audioCD);
|
|
cdPlayer2.tapOnCdFlap();
|
|
|
|
CDPlayer cdPlayer3=new CDPlayer();
|
|
cdPlayer3.tapOnCdFlap();
|
|
cdPlayer3.setCD(audioCD);
|
|
cdPlayer3.tapOnCdFlap();
|
|
|
|
return Stream.of(
|
|
Arguments.of("[getActualPlayTrack() after 1x next() starting by firstSong] => SecondSongSelected","SecondSongSelected", cdPlayer1, 1, cdPlayer1.getSongByNumber(1)),
|
|
Arguments.of("[getActualPlayTrack() after 2x next() starting by firstSong] => ThirdSongSelected","ThirdSongSelected" ,cdPlayer2,2,cdPlayer2.getSongByNumber(2)),
|
|
Arguments.of("[getActualPlayTrack() after 1x next() starting by lastSong] => FirstSongSelected","FirstSongSelected", cdPlayer3,cdPlayer3.getItemList().length,cdPlayer3.getSongByNumber(0))
|
|
);
|
|
}
|
|
|
|
@ParameterizedTest
|
|
@MethodSource("prevTestData")
|
|
void prevTest(String testName,String testDirection, CDPlayer _cdPlayer,int anzClicks, String expectedResult){
|
|
if(testDirection.equals("StartingBySecondSong")) {
|
|
_cdPlayer.next();
|
|
}
|
|
if(testDirection.equals("StartingByThirdSong")) {
|
|
_cdPlayer.next();
|
|
_cdPlayer.next();
|
|
}
|
|
for (int i = 0; i < anzClicks; i++) {
|
|
_cdPlayer.prev();
|
|
}
|
|
assertThat(_cdPlayer.getActualPlayTrack()).describedAs(testName).isEqualTo(expectedResult);
|
|
}
|
|
static Stream<Arguments> prevTestData () {
|
|
|
|
String[] audioPlayList = new String[]{"Audio 01", "Audio 02", "Audio 03", "Audio 04", "Audio 05"};
|
|
CD audioCD = new CD("Audio", audioPlayList);
|
|
|
|
CDPlayer cdPlayer1 = new CDPlayer();
|
|
cdPlayer1.tapOnCdFlap();
|
|
cdPlayer1.setCD(audioCD);
|
|
cdPlayer1.tapOnCdFlap();
|
|
|
|
return Stream.of(
|
|
Arguments.of("[getActualPlayTrack() after 1x prev() starting by secondSong] => FirstSongSelected", "StartingBySecondSong", cdPlayer1, 1, cdPlayer1.getSongByNumber(0)),
|
|
Arguments.of("[getActualPlayTrack() after 2x prev() starting by thirdSong] => FirstSongSelected", "StartingByThirdSong", cdPlayer1, 2, cdPlayer1.getSongByNumber(0)),
|
|
Arguments.of("[getActualPlayTrack() after 1x prev() starting by firstSong] => FirstSongSelected", "StartingByFirstSong", cdPlayer1, 1, cdPlayer1.getSongByNumber(0))
|
|
);
|
|
}
|
|
|
|
@ParameterizedTest
|
|
@MethodSource("getOptionsTestData")
|
|
void getOptionsTest(String testName,String testDirection, CDPlayer _cdPlayer){
|
|
if(testDirection.equals("ReturnValueNotNull")) {
|
|
assertThat(_cdPlayer.getOptions()).describedAs(testName).isNotEqualTo(null);
|
|
}
|
|
if(testDirection.equals("ArrayLengthGreaterThen0")) {
|
|
assertThat(_cdPlayer.getOptions().length).describedAs(testName).isNotEqualTo(0);
|
|
}
|
|
if(testDirection.equals("ArrayContainsInterfaceMethods")) {
|
|
Method[]interfaceMethods=Device.class.getDeclaredMethods();
|
|
List<String> deviceMethods = new ArrayList<String>(Arrays.asList(_cdPlayer.getOptions()));
|
|
for (int i = 0; i < interfaceMethods.length; i++) {
|
|
assertThat(deviceMethods.contains(interfaceMethods[i].getName())).describedAs(testName).isEqualTo(true);
|
|
}
|
|
}
|
|
}
|
|
static Stream<Arguments> getOptionsTestData () {
|
|
CDPlayer cdPlayer1 = new CDPlayer();
|
|
return Stream.of(
|
|
Arguments.of("[getOptions(): shouldNotReturnNull] => ReturnValueNotNull", "ReturnValueNotNull", cdPlayer1),
|
|
Arguments.of("[getOptions(): shouldReturnAnArrayWithLengthGreaterThen0] => ArrayLengthGreaterThen0", "ArrayLengthGreaterThen0", cdPlayer1),
|
|
Arguments.of("[getOptions(): shouldReturnAnArrayWithInAllInterfaceMethods] => ArrayContainsInterfaceMethods", "ArrayContainsInterfaceMethods", cdPlayer1)
|
|
);
|
|
}
|
|
|
|
@Test
|
|
void getVolumeReturnValueBetween0And100(){
|
|
CDPlayer cdPlayer1 = new CDPlayer();
|
|
boolean volumeIstInValueRange=false;
|
|
int volume=cdPlayer1.getVolume();
|
|
if(volume>=0 && volume <=100){
|
|
volumeIstInValueRange=true;
|
|
}
|
|
assertThat(volumeIstInValueRange).isEqualTo(true);
|
|
}
|
|
|
|
@ParameterizedTest
|
|
@MethodSource("getInfoTestData")
|
|
void getInfoTest(String testName, CDPlayer _cdPlayer,Exception exception , String expectedResult){
|
|
Exception newException=assertThrows(exception.getClass(),()->_cdPlayer.getInfoText());
|
|
assertEquals(ReturnValueNullException.class, newException.getClass());
|
|
}
|
|
static Stream<Arguments> getInfoTestData () {
|
|
|
|
CDPlayer cdPlayer1 = new CDPlayer();
|
|
|
|
return Stream.of(
|
|
Arguments.of("[getInfoText() by infoText=null ] => shouldThrowReturnValueNullException", cdPlayer1,new ReturnValueNullException(),"")
|
|
);
|
|
}
|
|
|
|
}
|