diff --git a/src/main/java/device/cdPlayer/CDPlayer.java b/src/main/java/device/cdPlayer/CDPlayer.java index 57101c8..a60009a 100644 --- a/src/main/java/device/cdPlayer/CDPlayer.java +++ b/src/main/java/device/cdPlayer/CDPlayer.java @@ -18,7 +18,10 @@ public class CDPlayer implements Device { private List supportedFormats = new ArrayList(Arrays.asList(new String[] {"Audio","MP3","WMA","AAC"})); private String actualPlayTrack=""; - private CD loadedCD; + private CD loadedCD=null; + + private CDWechseler cdWechseler=null; + private String activeSource="CDDrive";//or CDWechseler @Override public void louder() { @@ -48,9 +51,7 @@ public class CDPlayer implements Device { List playList = Arrays.asList(loadedCD.getPlayList()); int indexOfActualPlayTrack=playList.indexOf(actualPlayTrack); int indexOfNextPlayTrack=(indexOfActualPlayTrack+1)%loadedCD.getPlayList().length; - //System.out.println("actualIndex= "+indexOfActualPlayTrack); this.actualPlayTrack=playList.get(indexOfNextPlayTrack ); - //System.out.println("nextSong= "+actualPlayTrack); } @Override @@ -86,7 +87,17 @@ public class CDPlayer implements Device { @Override public String chooseItem(int itemNr) { - return null; + if(this.loadedCD==null){ + throw new ReturnValueNullException(); + } + if(itemNr<0){ + throw new NegativeInputException(); + } + if(!(itemNr>=0 && itemNr10){ + throw new MaxCapacityExceededException(); + } + cdWechseler.loadOneCD(cd,index); + System.out.println(index); + } //Getters, Setters und SupportMethods public void setCD(CD _loadedCD) { @@ -165,8 +198,11 @@ public class CDPlayer implements Device { this.infoText=this.getClass().getSimpleName()+": Item->"+actualPlayTrack+" from Album->"+this.loadedCD.getAlbumName()+" running."; } - public CD getCD() { return this.loadedCD; } + + public CDWechseler getCdWechseler() { + return cdWechseler; + } } diff --git a/src/main/java/device/cdPlayer/CDWechseler.java b/src/main/java/device/cdPlayer/CDWechseler.java new file mode 100644 index 0000000..0ae54e5 --- /dev/null +++ b/src/main/java/device/cdPlayer/CDWechseler.java @@ -0,0 +1,26 @@ +package device.cdPlayer; + +import java.util.ArrayList; +import java.util.List; + +public class CDWechseler { + private CD[]CDList=new CD[10]; + private boolean running=false; + + + public boolean isRunning() { + return running; + } + + public void activate() { + this.running = true; + } + + public CD[] getCDList() { + return CDList; + } + + public void loadOneCD(CD cd,int index){ + CDList[index]=cd; + } +} diff --git a/src/main/java/device/cdPlayer/exceptions/CDWechselerNotRunningException.java b/src/main/java/device/cdPlayer/exceptions/CDWechselerNotRunningException.java new file mode 100644 index 0000000..a2bb44d --- /dev/null +++ b/src/main/java/device/cdPlayer/exceptions/CDWechselerNotRunningException.java @@ -0,0 +1,8 @@ +package device.cdPlayer.exceptions; + +public class CDWechselerNotRunningException extends RuntimeException { + + public CDWechselerNotRunningException() { + super("CDWechseler must be active for using."); + } +} diff --git a/src/main/java/device/cdPlayer/exceptions/ItemNumberNotFoundException.java b/src/main/java/device/cdPlayer/exceptions/ItemNumberNotFoundException.java new file mode 100644 index 0000000..6491fa9 --- /dev/null +++ b/src/main/java/device/cdPlayer/exceptions/ItemNumberNotFoundException.java @@ -0,0 +1,7 @@ +package device.cdPlayer.exceptions; + +public class ItemNumberNotFoundException extends RuntimeException { + public ItemNumberNotFoundException() { + super("Given ItemNumber ist not in the Album."); + } +} diff --git a/src/main/java/device/cdPlayer/exceptions/MaxCapacityExceededException.java b/src/main/java/device/cdPlayer/exceptions/MaxCapacityExceededException.java new file mode 100644 index 0000000..163b156 --- /dev/null +++ b/src/main/java/device/cdPlayer/exceptions/MaxCapacityExceededException.java @@ -0,0 +1,7 @@ +package device.cdPlayer.exceptions; + +public class MaxCapacityExceededException extends RuntimeException{ + public MaxCapacityExceededException(){ + super("Max capacity of 10-CDs is already exceeded."); + } +} diff --git a/src/main/java/device/cdPlayer/exceptions/NegativeInputException.java b/src/main/java/device/cdPlayer/exceptions/NegativeInputException.java new file mode 100644 index 0000000..67ec2ca --- /dev/null +++ b/src/main/java/device/cdPlayer/exceptions/NegativeInputException.java @@ -0,0 +1,7 @@ +package device.cdPlayer.exceptions; + +public class NegativeInputException extends RuntimeException{ + public NegativeInputException() { + super("InputNumber must be positive."); + } +} diff --git a/src/test/java/device/cdPlayer/CDPlayerTest.java b/src/test/java/device/cdPlayer/CDPlayerTest.java index e8d8f77..1eb3043 100644 --- a/src/test/java/device/cdPlayer/CDPlayerTest.java +++ b/src/test/java/device/cdPlayer/CDPlayerTest.java @@ -327,4 +327,106 @@ class CDPlayerTest { ); } -} \ No newline at end of file + @ParameterizedTest + @MethodSource("chooseItemTestData") + void chooseItemTest(String testName,String cases, CDPlayer _cdPlayer,Exception exception ) { + if(cases.equals("Case1")) { + Exception newException = assertThrows(exception.getClass(), () -> _cdPlayer.chooseItem(1)); + assertEquals(ReturnValueNullException.class, newException.getClass()); + } + if(cases.equals("Case2")) { + Exception newException = assertThrows(exception.getClass(), () -> _cdPlayer.chooseItem(200)); + assertEquals(ItemNumberNotFoundException.class, newException.getClass()); + } + if(cases.equals("Case3")) { + Exception newException = assertThrows(exception.getClass(), () -> _cdPlayer.chooseItem(-1)); + assertEquals(NegativeInputException.class, newException.getClass()); + } + if(cases.equals("Case4")) { + assertThat(_cdPlayer.chooseItem(1).contains("2")).describedAs(testName).isEqualTo(true); + } + } + static Stream chooseItemTestData () { + CDPlayer cdPlayer1 = new CDPlayer(); + + String[] audioPlayList=new String[]{"Audio 01","Audio 02","Audio 03","Audio 04","Audio 05"}; + CD audioCD1=new CD("Audio",audioPlayList); + CDPlayer cdPlayer2 = new CDPlayer(); + cdPlayer2.tapOnCdFlap(); + cdPlayer2.setCD(audioCD1); + cdPlayer2.tapOnCdFlap(); + + return Stream.of( + Arguments.of("[chooseItem() by notSetCD ] => shouldThrowReturnValueNullException","Case1", cdPlayer1,new ReturnValueNullException()), + Arguments.of("[chooseItem() by invalidInput ] => shouldThrowItemNumberNotFoundException","Case2", cdPlayer2,new ItemNumberNotFoundException()), + Arguments.of("[chooseItem() by invalidInput:negativeNumber] => shouldThrowItemNumberNotFoundException","Case3", cdPlayer2,new NegativeInputException()), + Arguments.of("[chooseItem() by validInput] => shouldReturnMsgWithinTheItemNr","Case4", cdPlayer2,null) + ); + } + + @ParameterizedTest + @MethodSource("changePlaySourceData") + void changePlaySourceTest(String testName,String cases, CDPlayer _cdPlayer) { + + if(cases.equals("Case1")) { + String returnVal = _cdPlayer.changePlaySource(); + assertThat(returnVal).describedAs(testName).isEqualTo("CDWechseler"); + } + if(cases.equals("Case2")) { + String returnVal = _cdPlayer.changePlaySource(); + assertThat(returnVal).describedAs(testName).isEqualTo("CDDrive"); + } + } + static Stream changePlaySourceData () { + CDPlayer cdPlayer1 = new CDPlayer(); + + CDPlayer cdPlayer2 = new CDPlayer(); + cdPlayer2.changePlaySource(); + + return Stream.of( + Arguments.of("[changePlaySource() by activeSource=CDDrive ] => shouldReturnCDWechseler","Case1", cdPlayer1), + Arguments.of("[changePlaySource() by activeSource=CDWechseler ] => shouldReturnCDDrive","Case2", cdPlayer2) + ); + } + + @ParameterizedTest + @MethodSource("loadCDWechselerData") + void loadCDWechselerTest(String testName,String cases, CDPlayer _cdPlayer,CD cd,Exception exception) { + if(cases.equals("Case1")) { + Exception newException = assertThrows(exception.getClass(), () -> _cdPlayer.loadCDWechseler(cd,0)); + assertEquals(CDWechselerNotRunningException.class, newException.getClass()); + } + if(cases.equals("Case2")) { + _cdPlayer.changePlaySource(); + Exception newException = assertThrows(exception.getClass(), () -> _cdPlayer.loadCDWechseler(cd,0)); + assertEquals(FormatNotSupportedException.class, newException.getClass()); + } + if(cases.equals("Case3")) { + _cdPlayer.changePlaySource(); + _cdPlayer.loadCDWechseler(cd,0); + CD firstCD=_cdPlayer.getCdWechseler().getCDList()[0]; + assertThat(firstCD).describedAs(testName).isNotEqualTo(null); + } + if(cases.equals("Case4")) { + _cdPlayer.changePlaySource(); + Exception newException=assertThrows(exception.getClass(), () -> _cdPlayer.loadCDWechseler(cd, 12)); + assertEquals(MaxCapacityExceededException.class, newException.getClass()); + } + } + static Stream loadCDWechselerData () { + CDPlayer cdPlayer1 = new CDPlayer(); + 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"}; + + CD audioCD1=new CD("Audio",audioPlayList); + CD DVD=new CD("DVD",videoPlayList); + return Stream.of( + Arguments.of("[loadCDWechseler() by notRunning=CDWechseler ] => shouldThrowAnException", "Case1", cdPlayer1,audioCD1,new CDWechselerNotRunningException()), + Arguments.of("[loadCDWechseler() by WrongCDFormat ] => shouldThrowAnException", "Case2", cdPlayer1,DVD,new FormatNotSupportedException()), + Arguments.of("[loadCDWechseler() by leadingFirstCD ] => CDListOfCDWechselerShouldHaveLength1", "Case3", cdPlayer1,audioCD1,null), + Arguments.of("[loadCDWechseler() by MaxCapacityExceeded:Max=10 ] => shouldThrowAnException", "Case4", cdPlayer1,audioCD1,new MaxCapacityExceededException()) + ); + } + + + } \ No newline at end of file