diff --git a/Kirjalista.jar b/Kirjalista.jar index efec7402fef9b585d65eceb0e90b8d3e390fa6cd..97a7c33d1b7f8e0529149fc9b361a77dbc5c610a 100644 Binary files a/Kirjalista.jar and b/Kirjalista.jar differ diff --git a/src/Kirjalista/Genre.java b/src/Kirjalista/Genre.java index 6aaa9ab1f12d9b014875d7781c5bd94cb73aaa7b..998072d7b41386ff0e111d79db6a93c0c9b1997d 100644 --- a/src/Kirjalista/Genre.java +++ b/src/Kirjalista/Genre.java @@ -71,8 +71,20 @@ public class Genre { this.nimi = esim[rand.nextInt(3)]; } + /** + * Luo olion testejä varten + * @return Genre satunnaisilla arvoilla + */ + public static Genre testiGenre() { + Genre g = new Genre(); + Random rand = new Random(); + g.nimi = g.esim[rand.nextInt(3)]; + g.rekisteroi(); + return g; + } /** + * Palauttaa genren nimen * @return Genren nimi */ public String getNimi() { @@ -80,7 +92,7 @@ public class Genre { } /** - * palauttaa genren id:n + * Palauttaa genren id:n * @return Genren id */ public int getId() { diff --git a/src/Kirjalista/GenreRelaatio.java b/src/Kirjalista/GenreRelaatio.java index 8a2ef37adaf92669f47b0299c165be829bf98077..7ef0c1da3c46880fb253fddc4f0ed78495a91098 100644 --- a/src/Kirjalista/GenreRelaatio.java +++ b/src/Kirjalista/GenreRelaatio.java @@ -28,17 +28,32 @@ public class GenreRelaatio { * esim. palauttaa kaikkien kirjojen id:t, joiden genre on fantasia * @param genreId Genren id, jonka perusteella haetaan kirjojen id:itä * @return Kaikkien niiden kirjojen id:t, joiden genren id on genreId - * TODO testit * <pre name="test"> + * #import java.util.ArrayList; * GenreRelaatio gr = new GenreRelaatio(); - * gr.lisaa(new KirjanGenre(1, 2)); - * int[] t = gr.haeKirjat(2); - * t[0] === 1; - * TODO lisää testejä + * Kirja k = Kirja.testiKirja(); + * Kirja k1 = Kirja.testiKirja(); + * Kirja k2 = Kirja.testiKirja(); + * Genre g = Genre.testiGenre(); + * Genre g2 = Genre.testiGenre(); + * + * gr.lisaa(new KirjanGenre(k, g)); + * gr.lisaa(new KirjanGenre(k1, g)); + * gr.lisaa(new KirjanGenre(k2, g)); + * gr.lisaa(new KirjanGenre(k, g2)); + * ArrayList<Integer> al = gr.haeKirjat(g.getId()); + * int i = al.get(0); + * int i1 = al.get(1); + * int i2 = al.get(2); + * i === k.getId(); + * i1 === k1.getId(); + * i2 === k2.getId(); + * al.size() === 3; + * </pre> */ public ArrayList<Integer> haeKirjat(int genreId) { - //if (alkiot.length() <= 0) throw new IndexOutOfBoundsException(); + ArrayList<Integer> kirjojenIdt = new ArrayList<Integer>(); alkiot.iter = alkiot.getEka(); @@ -46,7 +61,7 @@ public class GenreRelaatio { for (int i = 0; i < alkiot.length(); i++) { KirjanGenre alkio = alkiot.iter.getSisalto(); if (alkio.getGenreId() == genreId) { - kirjojenIdt.add(alkio.getGenreId()); + kirjojenIdt.add(alkio.getKirjaId()); } alkiot.iter = alkiot.iter.getNext(); } @@ -60,10 +75,31 @@ public class GenreRelaatio { * eli toisin sanoen palauttaa tietyn kirjan kaikkien genrejen id:t * @param kirjaId Kirjan id, jonka perusteella haetaan genrejen id:itä * @return Kaikkien niiden genrejen id:t, joiden kirjan id on kirjaId - * TODO testit + * <pre name="test"> + * GenreRelaatio gr = new GenreRelaatio(); + * Kirja k = Kirja.testiKirja(); + * Kirja k2 = Kirja.testiKirja(); + * Genre g = Genre.testiGenre(); + * Genre g1 = Genre.testiGenre(); + * Genre g2 = Genre.testiGenre(); + * + * gr.lisaa(new KirjanGenre(k, g2)); + * gr.lisaa(new KirjanGenre(k, g)); + * gr.lisaa(new KirjanGenre(k, g1)); + * gr.lisaa(new KirjanGenre(k2, g)); + * ArrayList<Integer> al = gr.haeGenret(k.getId()); + * int i = al.get(0); + * int i1 = al.get(1); + * int i2 = al.get(2); + * i === g2.getId(); + * i1 === g.getId(); + * i2 === g1.getId(); + * + * al.size() === 3; + * </pre> */ public ArrayList<Integer> haeGenret(int kirjaId) { - //if (alkiot.length() <= 0) throw new IndexOutOfBoundsException(); ??? tämä ei mahdollista + ArrayList<Integer> genrejenIdt = new ArrayList<Integer>(); alkiot.iter = alkiot.getEka(); diff --git a/src/Kirjalista/Genret.java b/src/Kirjalista/Genret.java index c852475ed788d56f380795b3005d6512b14d14d7..5ffdcd4a749fe7fbc4a0a7dae1fb1f7eff4699d1 100644 --- a/src/Kirjalista/Genret.java +++ b/src/Kirjalista/Genret.java @@ -9,6 +9,34 @@ import java.util.NoSuchElementException; * - Lisää ja poistaa kirjoja * - Lukee ja kirjoittaa tiedostoon * - Etsii ja lajittelee + * <pre name="test"> + * #import java.util.NoSuchElementException; + * Genret g = new Genret(); + * Genre g1 = Genre.testiGenre(); + * Genre g2 = Genre.testiGenre(); + * Genre g3 = Genre.testiGenre(); + * + * g.lisaa(g1); + * g.lisaa(g2); + * g.lisaa(g3); + * + * Genre g4 = new Genre(); + * g4.parse(g1.toString()); + * + * g.onOlemassa(g4.getNimi()) === true; + * + * g.haeIdNimella(g1.getNimi()) === g1.getId(); + * g.haeIdNimella(g2.getNimi()) === g2.getId(); + * g.haeIdNimella(g3.getNimi()) === g3.getId(); + * + * g.hae(g1.getId()).toString() === g1.getNimi(); + * g.hae(g2.getId()).toString() === g2.getNimi(); + * g.hae(g3.getId()).toString() === g3.getNimi(); + * + * int g1Id = g1.getId(); + * g.poista(g1Id); + * g.hae(g1Id); #THROWS NoSuchElementException + * </pre> */ public class Genret { private ArrayList<Genre> alkiot = new ArrayList<Genre>(); @@ -28,9 +56,14 @@ public class Genret { } - private int haeIdNimella(String nimi) { + /** + * Hakee genren id:n nimen perusteella + * @param nimi Nimi, jonka perusteella id haetaan + * @return Genren id, -1 jos ei löydy + */ + public int haeIdNimella(String nimi) { for (int i = 0; i < alkiot.size(); i++) { - if (alkiot.get(i).getNimi() == nimi) return alkiot.get(i).getId(); + if (alkiot.get(i).getNimi().toLowerCase().contentEquals(nimi.toLowerCase())) return alkiot.get(i).getId(); } return -1; } @@ -59,8 +92,9 @@ public class Genret { */ public boolean onOlemassa(String nimi) { for (int i = 0; i < alkiot.size(); i++) { - if (alkiot.get(i).getNimi() == nimi) { + if (alkiot.get(i).getNimi().toLowerCase().contentEquals(nimi.toLowerCase())) { return true; + } } return false; diff --git a/src/Kirjalista/Kirja.java b/src/Kirjalista/Kirja.java index 4028e947f01368b57a9736933d10257bb7c19871..91036ac7fc518c6e828c52130f5ff44987558457 100644 --- a/src/Kirjalista/Kirja.java +++ b/src/Kirjalista/Kirja.java @@ -83,6 +83,21 @@ public class Kirja { } + /** + * Apumetodi, jolla saadaan luotua kirjaolio testejä varten + * @return Kirja satunnaisilla arvoilla + */ + public static Kirja testiKirja() { + Kirja k = new Kirja(); + k.rekisteroi(); + Random rand = new Random(); + k.nimi = "Hobitti" + rand.nextInt(10); + k.kirjoittaja = "J.R.R. Tolkien"; + k.kirjasarja = ""; + k.sivumaara = rand.nextInt(1000); + return k; + } + /** * @return palauttaa kirjan id:n */ @@ -107,18 +122,5 @@ public class Kirja { } - /** - * Testausta varten - * @param args ei käytössä - */ - public static void main(String[] args) { - Kirja k = new Kirja(); - k.rekisteroi(); - k.esimerkkiKirja(); - k.tulosta(System.out); - Kirja k1 = new Kirja(); - k1.rekisteroi(); - k1.esimerkkiKirja(); - k1.tulosta(System.out); - } + } diff --git a/src/Kirjalista/Kirjasto.java b/src/Kirjalista/Kirjasto.java index aaca4953e65767a0a2b3384e2ef2f47ade4fb106..a523cbfe96c837647e6c4b64d03450bb3275608d 100644 --- a/src/Kirjalista/Kirjasto.java +++ b/src/Kirjalista/Kirjasto.java @@ -44,7 +44,6 @@ public class Kirjasto { } } - // TODO haku ja poisto genreRelaatioille ??? /** * @param idnro Haettavan kirjan id diff --git a/src/Kirjalista/Kirjat.java b/src/Kirjalista/Kirjat.java index 8f5695515b6808c17321114aa88f9a62b8ebe0f0..460ee4856fc8ee24b4510b60a64f061d0b719935 100644 --- a/src/Kirjalista/Kirjat.java +++ b/src/Kirjalista/Kirjat.java @@ -8,6 +8,38 @@ import java.util.NoSuchElementException; * - Lisää ja poistaa kirjoja * - Lukee ja kirjoittaa tiedostoon (sitten joskus) * - Etsii ja lajittelee (sitten joskus) + * <pre name="test"> + * #import java.util.NoSuchElementException; + * #THROWS NoSuchElementException + * Kirjat kirjat = new Kirjat(); + * + * Kirja k1 = new Kirja(); + * Kirja k2 = new Kirja(); + * Kirja k3 = new Kirja(); + * k1.parse("Hobitti1 |J.R.R. Tolkien||336"); + * k2.parse("Hobitti2 |J.R.R. Tolkien||336"); + * k3.parse("Hobitti3 |J.R.R. Tolkien||336"); + * + * + * try { + * kirjat.lisaa(k1); + * kirjat.lisaa(k2); + * kirjat.lisaa(k3); + * } catch (SailoException e) { + * e.printStackTrace(); + * } + * + * + * kirjat.hae(k1.getId()).getNimi() === "Hobitti1"; + * kirjat.hae(k3.getId()).getNimi() === "Hobitti3"; + * kirjat.hae(0); #THROWS NoSuchElementException + * kirjat.hae(5); #THROWS NoSuchElementException + * + * int k2Id = k2.getId(); + * kirjat.poista(k2Id); + * kirjat.hae(k2Id); #THROWS NoSuchElementException + * + * </pre> */ public class Kirjat { private int maxLkm = 8; @@ -18,6 +50,22 @@ public class Kirjat { /** * @param kirja Lisättävä kirja * @throws SailoException Heittää, jos lisääminen ei onnistu + * <pre name="test"> + * Kirja kirja = new Kirja(); + * Kirjat kirjat = new Kirjat(); + * try { + * for (int i = 0; i < 8; i++) { + * kirjat.lisaa(kirja); + * kirjat.getLkm() === i + 1; + * } + * kirjat.getLkm() === 8; + * } catch (SailoException e) { + * System.out.println("Comtest heittaa virheita, jos ei ole trycatchia"); + * } + * kirjat.lisaa(kirja); #THROWS SailoException + * + * + * </pre> */ public void lisaa(Kirja kirja) throws SailoException { if (this.lkm >= this.alkiot.length) throw new SailoException("Liikaa alkioita"); @@ -31,7 +79,6 @@ public class Kirjat { * Poistaa kirjan annetulla id:llä * @param id Poistettavan kirjan id * @throws NoSuchElementException Jos id:tä vastaavaa kirjaa ei löydy - * TODO testit */ public void poista(int id) throws NoSuchElementException { for (int i = 0; i < alkiot.length; i++) { @@ -39,7 +86,7 @@ public class Kirjat { for (int j = i; j < alkiot.length - 1; j++) { alkiot[j] = alkiot[j + 1]; } - alkiot[alkiot.length] = null; + alkiot[alkiot.length - 1] = null; this.lkm--; return; } @@ -51,12 +98,11 @@ public class Kirjat { * Hakee kirjan id:n perusteella * @param id Halutun kirjan id * @return Viite kirjaan halutulla id:llä - * @throws NoSuchElementException - * TODO testit + * @throws NoSuchElementException Jos Id:tä vastaavaa kirjaa ei löydy */ public Kirja hae(int id) throws NoSuchElementException { - for (int i = 0; i < alkiot.length; i++) { + for (int i = 0; i < this.lkm; i++) { if (alkiot[i].getId() == id) return alkiot[i]; } diff --git a/src/Kirjalista/test/GenreRelaatioTest.java b/src/Kirjalista/test/GenreRelaatioTest.java index e0049becadcd7d508b1305bd67f930c0b22433a6..439fae5859a7879d12f546b95e566312db2c5b97 100644 --- a/src/Kirjalista/test/GenreRelaatioTest.java +++ b/src/Kirjalista/test/GenreRelaatioTest.java @@ -1,5 +1,6 @@ package Kirjalista.test; // Generated by ComTest BEGIN +import java.util.ArrayList; import static org.junit.Assert.*; import org.junit.*; import Kirjalista.*; @@ -8,7 +9,7 @@ import tietorakenne.LinkattuLista; /** * Test class made by ComTest - * @version 2025.03.05 22:52:50 // Generated by ComTest + * @version 2025.03.13 19:08:29 // Generated by ComTest * */ @SuppressWarnings({ "all" }) @@ -17,12 +18,51 @@ public class GenreRelaatioTest { // Generated by ComTest BEGIN - /** testHaeKirjat33 */ + /** testHaeKirjat31 */ @Test - public void testHaeKirjat33() { // GenreRelaatio: 33 + public void testHaeKirjat31() { // GenreRelaatio: 31 GenreRelaatio gr = new GenreRelaatio(); - gr.lisaa(new KirjanGenre(1, 2)); - int[] t = gr.haeKirjat(2); - assertEquals("From: GenreRelaatio line: 37", 1, t[0]); + Kirja k = Kirja.testiKirja(); + Kirja k1 = Kirja.testiKirja(); + Kirja k2 = Kirja.testiKirja(); + Genre g = Genre.testiGenre(); + Genre g2 = Genre.testiGenre(); + gr.lisaa(new KirjanGenre(k, g)); + gr.lisaa(new KirjanGenre(k1, g)); + gr.lisaa(new KirjanGenre(k2, g)); + gr.lisaa(new KirjanGenre(k, g2)); + ArrayList<Integer> al = gr.haeKirjat(g.getId()); + int i = al.get(0); + int i1 = al.get(1); + int i2 = al.get(2); + assertEquals("From: GenreRelaatio line: 48", k.getId(), i); + assertEquals("From: GenreRelaatio line: 49", k1.getId(), i1); + assertEquals("From: GenreRelaatio line: 50", k2.getId(), i2); + assertEquals("From: GenreRelaatio line: 51", 3, al.size()); + } // Generated by ComTest END + + + // Generated by ComTest BEGIN + /** testHaeGenret78 */ + @Test + public void testHaeGenret78() { // GenreRelaatio: 78 + GenreRelaatio gr = new GenreRelaatio(); + Kirja k = Kirja.testiKirja(); + Kirja k2 = Kirja.testiKirja(); + Genre g = Genre.testiGenre(); + Genre g1 = Genre.testiGenre(); + Genre g2 = Genre.testiGenre(); + gr.lisaa(new KirjanGenre(k, g2)); + gr.lisaa(new KirjanGenre(k, g)); + gr.lisaa(new KirjanGenre(k, g1)); + gr.lisaa(new KirjanGenre(k2, g)); + ArrayList<Integer> al = gr.haeGenret(k.getId()); + int i = al.get(0); + int i1 = al.get(1); + int i2 = al.get(2); + assertEquals("From: GenreRelaatio line: 94", g2.getId(), i); + assertEquals("From: GenreRelaatio line: 95", g.getId(), i1); + assertEquals("From: GenreRelaatio line: 96", g1.getId(), i2); + assertEquals("From: GenreRelaatio line: 98", 3, al.size()); } // Generated by ComTest END } \ No newline at end of file diff --git a/src/Kirjalista/test/GenretTest.java b/src/Kirjalista/test/GenretTest.java new file mode 100644 index 0000000000000000000000000000000000000000..b27b7e890e70a5067ecd46e376dcf170aa8482e3 --- /dev/null +++ b/src/Kirjalista/test/GenretTest.java @@ -0,0 +1,46 @@ +package Kirjalista.test; +// Generated by ComTest BEGIN +import java.util.NoSuchElementException; +import static org.junit.Assert.*; +import org.junit.*; +import Kirjalista.*; +// Generated by ComTest END + +/** + * Test class made by ComTest + * @version 2025.03.13 19:30:50 // Generated by ComTest + * + */ +@SuppressWarnings({ "all" }) +public class GenretTest { + + + + // Generated by ComTest BEGIN + /** testGenret12 */ + @Test + public void testGenret12() { // Genret: 12 + Genret g = new Genret(); + Genre g1 = Genre.testiGenre(); + Genre g2 = Genre.testiGenre(); + Genre g3 = Genre.testiGenre(); + g.lisaa(g1); + g.lisaa(g2); + g.lisaa(g3); + Genre g4 = new Genre(); + g4.parse(g1.toString()); + assertEquals("From: Genret line: 26", true, g.onOlemassa(g4.getNimi())); + assertEquals("From: Genret line: 28", g1.getId(), g.haeIdNimella(g1.getNimi())); + assertEquals("From: Genret line: 29", g2.getId(), g.haeIdNimella(g2.getNimi())); + assertEquals("From: Genret line: 30", g3.getId(), g.haeIdNimella(g3.getNimi())); + assertEquals("From: Genret line: 32", g1.getNimi(), g.hae(g1.getId()).toString()); + assertEquals("From: Genret line: 33", g2.getNimi(), g.hae(g2.getId()).toString()); + assertEquals("From: Genret line: 34", g3.getNimi(), g.hae(g3.getId()).toString()); + int g1Id = g1.getId(); + g.poista(g1Id); + try { + g.hae(g1Id); + fail("Genret: 38 Did not throw NoSuchElementException"); + } catch(NoSuchElementException _e_){ _e_.getMessage(); } + } // Generated by ComTest END +} \ No newline at end of file diff --git a/src/Kirjalista/test/KirjanGenreTest.java b/src/Kirjalista/test/KirjanGenreTest.java deleted file mode 100644 index 67e68bcb584a6167fae63671217725ebdcc56e84..0000000000000000000000000000000000000000 --- a/src/Kirjalista/test/KirjanGenreTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package Kirjalista.test; -// Generated by ComTest BEGIN -import static org.junit.Assert.*; -import org.junit.*; -import Kirjalista.*; -// Generated by ComTest END - * @version 2025.03.10 18:15:06 // Generated by ComTest -package Kirjalista.test; - -/** - * Test class made by ComTest - * @version 2025.03.10 18:15:06 // Generated by ComTest - * - */ -@SuppressWarnings({ "all" }) -public class KirjanGenreTest { -} \ No newline at end of file diff --git a/src/Kirjalista/test/KirjatTest.java b/src/Kirjalista/test/KirjatTest.java new file mode 100644 index 0000000000000000000000000000000000000000..02e1f5cfc71f568ed75e4bfd1cf1d4e48cb0d716 --- /dev/null +++ b/src/Kirjalista/test/KirjatTest.java @@ -0,0 +1,76 @@ +package Kirjalista.test; +// Generated by ComTest BEGIN +import java.util.NoSuchElementException; +import static org.junit.Assert.*; +import org.junit.*; +import Kirjalista.*; +// Generated by ComTest END + +/** + * Test class made by ComTest + * @version 2025.03.13 19:42:50 // Generated by ComTest + * + */ +@SuppressWarnings({ "all" }) +public class KirjatTest { + + + + // Generated by ComTest BEGIN + /** testKirjat11 */ + @Test + public void testKirjat11() { // Kirjat: 11 + Kirjat kirjat = new Kirjat(); + Kirja k1 = new Kirja(); + Kirja k2 = new Kirja(); + Kirja k3 = new Kirja(); + k1.parse("Hobitti1 |J.R.R. Tolkien||336"); + k2.parse("Hobitti2 |J.R.R. Tolkien||336"); + k3.parse("Hobitti3 |J.R.R. Tolkien||336"); + try { + kirjat.lisaa(k1); + kirjat.lisaa(k2); + kirjat.lisaa(k3); + } catch (SailoException e) { + e.printStackTrace(); + } + assertEquals("From: Kirjat line: 33", "Hobitti1", kirjat.hae(k1.getId()).getNimi()); + assertEquals("From: Kirjat line: 34", "Hobitti3", kirjat.hae(k3.getId()).getNimi()); + try { + kirjat.hae(0); + fail("Kirjat: 35 Did not throw NoSuchElementException"); + } catch(NoSuchElementException _e_){ _e_.getMessage(); } + try { + kirjat.hae(5); + fail("Kirjat: 36 Did not throw NoSuchElementException"); + } catch(NoSuchElementException _e_){ _e_.getMessage(); } + int k2Id = k2.getId(); + kirjat.poista(k2Id); + try { + kirjat.hae(k2Id); + fail("Kirjat: 40 Did not throw NoSuchElementException"); + } catch(NoSuchElementException _e_){ _e_.getMessage(); } + } // Generated by ComTest END + + + // Generated by ComTest BEGIN + /** testLisaa53 */ + @Test + public void testLisaa53() { // Kirjat: 53 + Kirja kirja = new Kirja(); + Kirjat kirjat = new Kirjat(); + try { + for (int i = 0; i < 8; i++) { + kirjat.lisaa(kirja); + assertEquals("From: Kirjat line: 59", i + 1, kirjat.getLkm()); + } + assertEquals("From: Kirjat line: 61", 8, kirjat.getLkm()); + } catch (SailoException e) { + System.out.println("Comtest heittaa virheita, jos ei ole trycatchia"); + } + try { + kirjat.lisaa(kirja); + fail("Kirjat: 65 Did not throw SailoException"); + } catch(SailoException _e_){ _e_.getMessage(); } + } // Generated by ComTest END +} \ No newline at end of file