diff --git a/src/main/java/BordComputer.java b/src/main/java/BordComputer.java index 7563899..2eb7168 100644 --- a/src/main/java/BordComputer.java +++ b/src/main/java/BordComputer.java @@ -1,4 +1,12 @@ import device.Device; +import device.cdPlayer.CD; +import device.cdPlayer.CDPlayer; +import device.cdPlayer.CD; +import device.cdPlayer.CDPlayer; +import device.radioPlayer.RadioPlayer; +import device.usbPlayer.USB_Stick; +import device.usbPlayer.UsbPlayer; +import exception.NoItemEvenAllPreconditionAreMet; import java.io.FileReader; import java.lang.reflect.InvocationTargetException; @@ -35,4 +43,81 @@ public class BordComputer { installedDevices[i] = (Device) c.getConstructor().newInstance(); } } + + public String changeDevice() { + Device[] tempDevices = new Device[installedDevices.length]; + tempDevices[0] = installedDevices[1]; + tempDevices[1] = installedDevices[2]; + tempDevices[2] = installedDevices[0]; + //replaces the lists + installedDevices = tempDevices; + //setting activeDevice + activeDevice = installedDevices[0]; + + String infoText=""; + if(activeDevice instanceof CDPlayer){ + CDPlayer cdPlayer=(CDPlayer) activeDevice; + String[] audioPlayList=new String[]{"Audio 01","Audio 02","Audio 03","Audio 04","Audio 05"}; + //some CDs + CD audioCD1=new CD("Audio",audioPlayList); + audioCD1.setAlbumName("Love Songs"); + + cdPlayer.tapOnCdFlap(); + cdPlayer.setCD(audioCD1); + cdPlayer.tapOnCdFlap(); + cdPlayer.setInfoText(); + infoText = cdPlayer.getInfoText(); + }else{ + infoText=activeDevice.getInfoText()+" ist activate"; + } + return infoText; + } + + public String play(){ + String itemToPlay=null; + try { + itemToPlay=activeDevice.play(); + }catch (RuntimeException exception) { + throw new NoItemEvenAllPreconditionAreMet(); + } + + return itemToPlay; + } + + //===== Hilf-Funktionen ====== + + public Device getInstanceByName(String deviceName){ + for (int i = 0; i > Folders = new ArrayList<>(); int currentAlbum ; - USB_Stick() { + public USB_Stick() { ArrayList a1 = new ArrayList(); a1.add("Musik 01.mp3"); a1.add("Musik 02.mp3"); diff --git a/src/main/java/device/usbPlayer/UsbPlayer.java b/src/main/java/device/usbPlayer/UsbPlayer.java index acf923b..391d563 100644 --- a/src/main/java/device/usbPlayer/UsbPlayer.java +++ b/src/main/java/device/usbPlayer/UsbPlayer.java @@ -70,10 +70,7 @@ public class UsbPlayer implements Device { super(); isDefect = false; isConnected = true; - /*Playlist.add("Musik 01.mp3"); - Playlist.add("Musik 02.mp3"); - Playlist.add("Musik 03.mp3"); - playTrack = Playlist.get(0);*/ + try { Playlist = stick.getAlbum(); } catch (NoFolderFound e) { diff --git a/src/main/java/exception/NoItemEvenAllPreconditionAreMet.java b/src/main/java/exception/NoItemEvenAllPreconditionAreMet.java new file mode 100644 index 0000000..ec1be23 --- /dev/null +++ b/src/main/java/exception/NoItemEvenAllPreconditionAreMet.java @@ -0,0 +1,7 @@ +package exception; + +public class NoItemEvenAllPreconditionAreMet extends RuntimeException{ + public NoItemEvenAllPreconditionAreMet(){ + super("No Item returned even all preconditions are met."); + } +} diff --git a/src/test/java/BordComputerTest.java b/src/test/java/BordComputerTest.java index 6772d99..2708ecc 100644 --- a/src/test/java/BordComputerTest.java +++ b/src/test/java/BordComputerTest.java @@ -1,7 +1,9 @@ import device.Device; import device.cdPlayer.CDPlayer; +import device.cdPlayer.exceptions.NegativeInputException; import device.radioPlayer.RadioPlayer; import device.usbPlayer.UsbPlayer; +import exception.NoItemEvenAllPreconditionAreMet; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; @@ -81,4 +83,156 @@ class BordComputerTest { } return count; } + + //// + @ParameterizedTest + @MethodSource("changeDeviceOptions") + void changeDeviceTest(String testName, BordComputer inputBC, Device[] oldDevices,Device prvDevice,String message ,int caseNr) { + Device[] newDevicesList = inputBC.installedDevices.clone(); + if (caseNr == 1 ) { + assertThat(newDevicesList).describedAs(testName).isNotEqualTo(oldDevices); + }else if (caseNr == 2) { + Device currentDevice = inputBC.activeDevice; + assertThat(currentDevice).describedAs(testName).isNotEqualTo(prvDevice); + }else if (caseNr == 3) { + assertThat(inputBC.changeDevice()).describedAs(testName).isNotNull(); + }else if (caseNr == 4) { + assertThat(inputBC.changeDevice()).describedAs(testName).isNotNull(); + }else if (caseNr == 5) { + assertThat(inputBC.changeDevice()).describedAs(testName).isNotNull(); + }else if (caseNr == 6) { + assertThat(inputBC.changeDevice()).describedAs(testName).contains("USB Player"); + }else if (caseNr == 7) { + assertThat(inputBC.changeDevice()).describedAs(testName).contains("CDPlayer"); + }else if (caseNr == 8) { + assertThat(inputBC.changeDevice()).describedAs(testName).contains("playlist"); + } + } + + static Stream changeDeviceOptions() throws ClassNotFoundException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { + + //first case + BordComputer bc = new BordComputer(); + bc.readConfig(); + bc.setDevices(); + Device[] currentDevices = new Device[bc.installedDevices.length]; + currentDevices = bc.installedDevices.clone(); + String m = bc.changeDevice(); + + //second case + BordComputer bc1 = new BordComputer(); + bc1.readConfig(); + bc1.setDevices(); + Device prvDevice = bc1.activeDevice; + m =bc1.changeDevice(); + + //third case + BordComputer bc2 = new BordComputer(); + bc2.readConfig(); + bc2.setDevices(); + m =bc2.changeDevice(); + + //forth case + BordComputer bc3 = new BordComputer(); + bc3.readConfig(); + bc3.setDevices(); + m =bc3.changeDevice(); + m =bc3.changeDevice(); //CDPlayer + + //fifth case + BordComputer bc4 = new BordComputer(); + bc4.readConfig(); + bc4.setDevices(); + m =bc4.changeDevice(); + m =bc4.changeDevice(); //CDPlayer + m =bc4.changeDevice(); + + //sixth case + BordComputer bc5 = new BordComputer(); + bc5.readConfig(); + bc5.setDevices(); + m =bc5.changeDevice(); + + //seventh case + BordComputer bc6 = new BordComputer(); + bc6.readConfig(); + bc6.setDevices(); + m =bc6.changeDevice(); + m =bc6.changeDevice(); + + //eighth case + BordComputer bc7 = new BordComputer(); + bc7.readConfig(); + bc7.setDevices(); + m =bc7.changeDevice(); + m =bc7.changeDevice(); + m =bc7.changeDevice(); + + return Stream.of( + Arguments.of("The order of the installedDevices should be changed ", bc,currentDevices,null,"",1), + Arguments.of("The active Device should be changed ", bc1,null,prvDevice,"",2), + Arguments.of("The new Device returns a String ", bc2,null,prvDevice,bc2.activeDevice.toString(),3), + Arguments.of("The new Device returns a String ", bc3,null,prvDevice,null,4), + Arguments.of("The new Device returns a String ", bc4,null,prvDevice,null,5), + Arguments.of("The new Device returns Info ", bc5,null,prvDevice,null,6), + Arguments.of("The new Device returns Info ", bc6,null,prvDevice,null,7), + Arguments.of("The new Device returns Info ", bc6,null,prvDevice,null,8) + ); + } + + @ParameterizedTest + @MethodSource("playDate") + void playTest(String testName, String testCase,BordComputer bordComputer,String instanceName) { + if(testCase.equals("Case1")) { + bordComputer.meetAllPreconditionForPlay(); + assertThat(bordComputer.play()).describedAs(testName).isNotEqualTo(null); + } + if(testCase.equals("Case2")) { + Device radioPlayer=bordComputer.getInstanceByName(instanceName); + bordComputer.setActiveDevice(radioPlayer); + assertThat(bordComputer.play()).describedAs(testName).isNotEqualTo(null); + } + if(testCase.equals("Case3")) { + Device usbPlayer=bordComputer.getInstanceByName(instanceName); + bordComputer.setActiveDevice(usbPlayer); + bordComputer.meetAllPreconditionForPlay(); + assertThat(bordComputer.play()).describedAs(testName).isNotEqualTo(null); + } + if(testCase.equals("Case4")) { + Exception newException = assertThrows(NoItemEvenAllPreconditionAreMet.class, () -> bordComputer.play()); + assertEquals(NoItemEvenAllPreconditionAreMet.class, newException.getClass()); + assertEquals(newException.getMessage(), "No Item returned even all preconditions are met."); + } + if(testCase.equals("Case5")) { + Device usbPlayer=bordComputer.getInstanceByName(instanceName); + bordComputer.setActiveDevice(usbPlayer); + Exception newException = assertThrows(NoItemEvenAllPreconditionAreMet.class, () -> bordComputer.play()); + assertEquals(NoItemEvenAllPreconditionAreMet.class, newException.getClass()); + assertEquals(newException.getMessage(), "No Item returned even all preconditions are met."); + } + if(testCase.equals("Case6")) { + Device radioPlayer=bordComputer.getInstanceByName(instanceName); + bordComputer.setActiveDevice(radioPlayer); + assertDoesNotThrow(() -> bordComputer.play()); + } + } + + static Stream playDate()throws ClassNotFoundException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { + BordComputer bordComputer = new BordComputer(); + bordComputer.readConfig(); + + BordComputer bordComputer2 = new BordComputer(); + bordComputer2.readConfig(); + + return Stream.of( + Arguments.of("[CDPlayer-> play(): after all preconditions are met] => ShouldReturnAnItemToPlay","Case1",bordComputer,"CDPlayer"), + Arguments.of("[RadioPlayer-> play(): after all preconditions are met] => ShouldReturnAnItemToPlay","Case2",bordComputer,"RadioPlayer"), + Arguments.of("[UsbPlayer-> play(): after all preconditions are met] => ShouldReturnAnItemToPlay","Case3",bordComputer,"UsbPlayer"), + Arguments.of("[CDPlayer-> play(): without fulfilling preconditions] => ShouldReturnAnException","Case4",bordComputer2,"CDPlayer"), + Arguments.of("[UsbPlayer-> play(): without fulfilling preconditions] => ShouldReturnAnException","Case5",bordComputer2,"UsbPlayer"), + Arguments.of("[RadioPlayer-> play(): without fulfilling preconditions] => ShouldWorkWell","Case6",bordComputer2,"RadioPlayer") + ); + } + + } \ No newline at end of file diff --git a/src/test/java/device/cdPlayer/CDPlayerTest.java b/src/test/java/device/cdPlayer/CDPlayerTest.java index 06cdff8..d45992d 100644 --- a/src/test/java/device/cdPlayer/CDPlayerTest.java +++ b/src/test/java/device/cdPlayer/CDPlayerTest.java @@ -30,7 +30,8 @@ class CDPlayerTest { Exception newException=assertThrows(exception.getClass(),()->_cdPlayer.play()); assertEquals(expectedResult, newException.getMessage()); }else{ - assertThat(_cdPlayer.play()).describedAs(testName).isEqualTo(expectedResult); + _cdPlayer.play(); + assertThat(_cdPlayer.getStatus()).describedAs(testName).isEqualTo(expectedResult); } } static Stream playTestData () {