Clover Coverage Report - ali Coverage Report
Coverage timestamp: su marras 1 2009 19:10:37 EET
../../../../img/srcFileCovDistChart10.png 0% of files have more coverage
45   446   25   2,37
10   125   0,56   2,71
19     1,32  
7    
This report was generated with an evaluation server license. Purchase Clover or configure your license.
 
  Suuntaaja       Line # 18 11 3 100% 1.0
  Suuntaaja.ISuuntaaja       Line # 27 0 0 - -1.0
  Suuntaaja.Input       Line # 72 7 5 100% 1.0
  Suuntaaja.Output       Line # 127 6 4 100% 1.0
  Suuntaaja.StringInput       Line # 193 5 3 100% 1.0
  Suuntaaja.StringOutput       Line # 245 12 8 100% 1.0
  Suuntaaja.InOut       Line # 378 4 2 100% 1.0
 
  (8)
 
1    package fi.jyu.mit.ohj2;
2   
3    import java.io.ByteArrayInputStream;
4    import java.io.ByteArrayOutputStream;
5    import java.io.FileInputStream;
6    import java.io.FileNotFoundException;
7    import java.io.FileOutputStream;
8    import java.io.IOException;
9    import java.io.InputStream;
10    import java.io.OutputStream;
11    import java.io.PrintStream;
12   
13    /**
14    * Luokka tietovirtojen uudelleen suuntaamiseksi
15    * @author vesal
16    *
17    */
 
18    public class Suuntaaja { // NOPMD -luokkakirjasto
19    // #STATICIMPORT
20    // #import fi.jyu.mit.ohj2.*;
21   
22    /**
23    * Rajapinta suuntajalle
24    * @author vesal
25    *
26    */
 
27    public interface ISuuntaaja {
28   
29    /**
30    * Palauttaa suuntauksen alkuperäiseen tilaan.
31    */
32    void palauta();
33    }
34   
35    /**
36    * Käytössä olevan systeemin rivinvahdon merkkkijono
37    */
38    private static String NL = getNL(); // NOPMD - tarkoituksella lyhyt nimi
39   
40   
41    /**
42    * Palauttaa systeemin käytössä olevan newline jonon
43    * @return rivinvaihdon merkkiyhdistelmä käytetyssä järjestelmässä
44    */
 
45  2 toggle public static String getNL() {
46  2 if ( NL != null ) return NL;
47  1 NL = "";
48  1 StringOutput so = new StringOutput();
49  1 System.out.println();
50  1 NL = so.toString();
51  1 so.palauta();
52  1 return NL;
53    }
54   
55   
56    /**
57    * Suuntaa inputin uudelleen ja kertoo Syotto-luokalle
58    * @param is uusi tietovirta syötölle
59    *
60    */
 
61  10 toggle protected static void setIn(InputStream is) {
62  10 System.setIn(is);
63  10 Syotto.alusta();
64  10 Readkey.init();
65    }
66   
67    /**
68    * Luokka jolla System.in otetaan tiedostosta
69    * @author vesal
70    * @version 11.3.2007
71    */
 
72    public static class Input implements ISuuntaaja {
73    private static final InputStream origIn = System.in; // NOPMD - ei ole vakio
74    private InputStream stdin = null;
75   
76    /**
77    * Asetetaan peruslukuvirta eri tiedostoon.
78    * Jos nimi on null, niin sitä virtaa ei suunnata uudelleen
79    * @param inNimi mistä tiedostosta System.in luetaan
80    * @throws FileNotFoundException jos tiedostoa ei saada käyttöön
81    * @example
82    * <pre name="test">
83    * #THROWS IOException
84    * #import java.io.*;
85    * #import java.util.*;
86    * #import static fi.jyu.mit.ohj2.VertaaTiedosto.*;
87    * kirjoitaTiedosto("hiljaa1.txt", "33 hiljaa 1 hiipii\nhyvä 33 tulee\n");
88    * Input in = new Input("hiljaa1.txt");
89    * Scanner sc = new Scanner(System.in);
90    * sc.nextLine() === "33 hiljaa 1 hiipii";
91    * sc.nextLine() === "hyvä 33 tulee";
92    * sc.hasNextLine() === false;
93    * in.palauta();
94    * tuhoaTiedosto("hiljaa1.txt");
95    * in = new Input(null);
96    * in.palauta();
97    * </pre>
98    */
 
99  3 toggle public Input(String inNimi) throws FileNotFoundException {
100    // getNL();
101  3 if ( inNimi != null ) {
102  2 stdin = new FileInputStream(inNimi);
103  2 setIn(stdin);
104    }
105    }
106   
107    /**
108    * Palautetaan tietovirta takaisin alkuperäiseen tilaan
109    */
 
110  3 toggle public void palauta() {
111  3 if ( stdin != null ) {
112  2 try {
113  2 stdin.close();
114    } catch (IOException e) { // NOPMD
115    }
116  2 setIn(origIn);
117    }
118    }
119   
120    }
121   
122    /**
123    * Luokka jolla System.out suunnataan toiseen tiedostoon
124    * @author vesal
125    * @version 11.3.2007
126    */
 
127    public static class Output implements ISuuntaaja {
128    private static final PrintStream origOut = System.out; // NOPMD - ei ole vakio
129    private PrintStream stdout = null;
130   
131    /**
132    * Asetetaan perustulostusvirta eri tiedostoon.
133    * Jos nimi on null, niin sitä virtaa ei suunnata uudelleen
134    * @param outNimi mihin System.out kirjoitetaan
135    * @throws FileNotFoundException jos tiedostoa ei saada käyttöön
136    * @example
137    * <pre name="test">
138    * #THROWS IOException
139    * #import java.io.*;
140    * #import java.util.*;
141    * #import static fi.jyu.mit.ohj2.VertaaTiedosto.*;
142    * Output out = new Output("hiljaa1.txt");
143    * System.out.println("eka");
144    * System.out.println("toka");
145    * out.palauta();
146    * vertaaFileString("hiljaa1.txt","eka\ntoka\n") === null;
147    * tuhoaTiedosto("hiljaa1.txt");
148    *
149    * out = new Output(null);
150    * out.palauta();
151    * </pre>
152    */
 
153  3 toggle public Output(String outNimi) throws FileNotFoundException {
154    // getNL();
155  3 if ( outNimi != null ) {
156  2 stdout = new PrintStream(new FileOutputStream(outNimi));
157  2 System.setOut(stdout);
158    }
159    }
160   
161    /**
162    * Palautetaan tietovirta takaisin alkuperäiseen tilaan
163    */
 
164  3 toggle public void palauta() {
165  3 if (stdout != null ) {
166  2 stdout.close();
167  2 System.setOut(origOut);
168    }
169    }
170   
171    }
172   
173    /**
174    * Luokka syötön lukemiseksi merkkijonosta
175    * @author vesal
176    * @version 2.2.2008
177    * @example
178    * <pre name="test">
179    * StringInput si = new StringInput("kissa\nkoira");
180    * StringOutput so = new StringOutput();
181    * Syotto.kysy("Mikä") === "kissa";
182    * Syotto.kysy("Mikä") === "koira";
183    * Syotto.kysy("Mikä") === "";
184    * si = new StringInput("12\n13");
185    * Syotto.kysy("Luku",0) === 12;
186    * Syotto.kysy("Luku",0) === 13;
187    * Syotto.kysy("Luku",0) === 0;
188    * si.palauta();
189    * so.palauta();
190    * </pre>
191    *
192    */
 
193    public static class StringInput implements ISuuntaaja {
194    private static final InputStream origIn = System.in; // NOPMD ei ole vakio
195    private ByteArrayInputStream byteinput;
196   
197   
198    /**
199    * Alustetataan lukutietovirta
200    * @param inputString
201    */
 
202  3 toggle public StringInput(String inputString) {
203  3 byteinput = new ByteArrayInputStream(inputString.getBytes());
204  3 setIn(byteinput);
205    }
206   
207    /**
208    * Palautetaan tietovirta takaisin alkuperäiseen tilaan
209    */
 
210  2 toggle public void palauta() {
211  2 setIn(origIn);
212    }
213   
214    /**
215    * Laitetaan syöttöön uusi merkkijono jota luetaan-
216    * @param inputString
217    * @example
218    * <pre name="test">
219    * StringInput si = new StringInput("kissa\nkoira");
220    * StringOutput so = new StringOutput();
221    * Syotto.kysy("Mikä") === "kissa";
222    * Syotto.kysy("Mikä") === "koira";
223    * Syotto.kysy("Mikä") === "";
224    * si.input("12\n13");
225    * Syotto.kysy("Luku",0) === 12;
226    * Syotto.kysy("Luku",0) === 13;
227    * Syotto.kysy("Luku",0) === 0;
228    * si.palauta();
229    * so.palauta();
230    * </pre>
231    */
 
232  1 toggle public void input(String inputString) {
233  1 byteinput = new ByteArrayInputStream(inputString.getBytes());
234  1 setIn(byteinput);
235    }
236    }
237   
238   
239    /**
240    * Luokka tulostuksen siirtämiseksi merkkijonoon
241    * @author vesal
242    * @version 2.2.2008
243    *
244    */
 
245    public static class StringOutput implements ISuuntaaja {
246    private static final PrintStream origOut = System.out; // NOPMD - ei ole vakio
247    private final ByteArrayOutputStream byteoutput;
248   
249    /**
250    * Alutetataan kirjoitustietovirta
251    */
 
252  6 toggle public StringOutput() {
253    // if ( NL != null ) getNL();
254  6 byteoutput = new ByteArrayOutputStream();
255  6 PrintStream ps = new PrintStream(byteoutput);
256  6 System.setOut(ps);
257    }
258   
259    /**
260    * Palautetaan tietovirta takaisin alkuperäiseen tilaan
261    */
 
262  6 toggle public void palauta() {
263  6 System.setOut(origOut);
264    }
265   
266    /**
267    * Palautetaan toistaiseksi tulostettu tieto merkkijonona
268    * @return tulostettu tieto
269    * @example
270    * <pre name="test">
271    * String NL = getNL();
272    * StringOutput so = new StringOutput();
273    * System.out.println("eka");
274    * System.out.println("toka");
275    * so.toString() === "eka"+NL+"toka"+NL;
276    * System.out.println("kolmas");
277    * so.toStringReset() === "eka"+NL+"toka"+NL+"kolmas"+NL;
278    * so.toString() === "";
279    * System.out.println("neljäs");
280    * so.toStringReset() === "neljäs"+NL;
281    * System.out.print("viides\nkuudes");
282    * so.toStringReset() === "viides\nkuudes";
283    * System.out.printf("viides%nkuudes");
284    * so.toStringReset() === "viides"+NL+"kuudes";
285    * so.palauta();
286    * </pre>
287    */
 
288  4 toggle @Override
289    public String toString() {
290  4 return byteoutput.toString();
291    }
292   
293    /**
294    * Palautetaan toistaiseksi tulostettu tieto merkkijonona
295    * ja tyhjennetään tietovirta
296    * @return tulostettu tieto
297    */
 
298  9 toggle public String toStringReset() {
299  9 String result = byteoutput.toString();
300  9 reset();
301  9 return result;
302    }
303   
304    /**
305    * Tyhjentää toistaiseksi tulostetun osan
306    */
 
307  9 toggle public void reset() {
308  9 byteoutput.reset();
309    }
310   
311    /**
312    * Kirjoittaa sisällön tietovirtaan
313    * @param out virta johon kirjoitetaan
314    * @throws IOException jos joku menee pieleen
315    * @example
316    * <pre name="test">
317    * #THROWS IOException
318    * PrintStream fs = Tiedosto.avaa_kirjoittamista_varten_stream("hiljaa1.txt");
319    * StringOutput so = new StringOutput();
320    * System.out.println("eka");
321    * System.out.println("toka");
322    * so.writeTo(fs);
323    * fs.close();
324    * so.palauta();
325    * vertaaFileString("hiljaa1.txt","eka\ntoka\n") === null;
326    * tuhoaTiedosto("hiljaa1.txt");
327    * </pre>
328    */
 
329  1 toggle public void writeTo(OutputStream out) throws IOException {
330  1 byteoutput.writeTo(out);
331    }
332   
333    /**
334    * Palauttaa alkuperäisen tietovirran
335    * @return alkuperäinen tietovirta
336    */
 
337  1 toggle public PrintStream getOrigOut() {
338  1 return origOut;
339    }
340   
341    /**
342    * Vertaa tuloksen sisältöä jonoon ja palauttaa eron
343    * tai null jos samat. Tyhjentää tulosteen.
344    * @param verrattava
345    * @return null jos samat, muuten 1. ero
346    * @example
347    * <pre name="test">
348    * StringOutput so = new StringOutput();
349    * System.out.println("eka");
350    * System.out.println("toka");
351    * so.ero("eka\ntoka\n") === null;
352    * System.out.println("kolmas");
353    * so.ero("eka\ntoka\nkolmas\n") === "Ero riveissä 1: kolmas ja eka";
354    * so.toString() === "";
355    * System.out.println("neljäs");
356    * so.ero("neljäs\n") === null;
357    * System.out.print("viides\nkuudes");
358    * so.ero("viides\nkuudes") === null;
359    * System.out.printf("viides%nkuudes");
360    * so.ero("viides\nkuudes") === null;
361    * so.palauta();
362    * so.getOrigOut() == System.out === true;
363    * </pre>
364    */
 
365  5 toggle public String ero(String verrattava) {
366  5 return VertaaTiedosto.vertaaString(toStringReset(), verrattava);
367    }
368   
369    }
370   
371   
372   
373    /**
374    * Luokka jolla System.in ja System.out suunnataan toiseen tiedostoon
375    * @author vesal
376    * @version 11.3.2007
377    */
 
378    public static class InOut implements ISuuntaaja {
379    private final Input in;
380    private final Output out;
381   
382    /**
383    * Asetetaan perusluku- ja tulostusvirta eri tiedostoon.
384    * Jos jompikumpi nimi on null, niin sitä virtaa ei suunnata uudelleen
385    * @param inNimi mistä tiedostosta System.in luetaan
386    * @param outNimi mihin System.out kirjoitetaan
387    * @throws FileNotFoundException jos tiedostoa ei saada käyttöön
388    * @example
389    * <pre name="test">
390    * #THROWS IOException
391    * kirjoitaTiedosto("hiljaa1.txt", "eka\ntoka\n");
392    * InOut io = new InOut("hiljaa1.txt","hiljaa2.txt");
393    * Syotto.kysy("1.") === "eka";
394    * Syotto.kysy("2.") === "toka";
395    * Syotto.kysy("3.") === "";
396    * io.palauta();
397    * tuhoaTiedosto("hiljaa1.txt");
398    * vertaaFileString("hiljaa2.txt","1. >2. >3. >") === null;
399    * tuhoaTiedosto("hiljaa2.txt");
400    * </pre>
401    */
 
402  1 toggle public InOut(String inNimi, String outNimi) throws FileNotFoundException {
403  1 in = new Input(inNimi);
404  1 out = new Output(outNimi);
405    }
406   
407    /**
408    * Palautetaan tietovirrat takaisin alkuperäiseen tilaan
409    */
 
410  1 toggle public void palauta() {
411  1 in.palauta();
412  1 out.palauta();
413    }
414   
415    }
416   
417    /**
418    * Testataan suuntaamista
419    * @param args ei käytössä
420    */
421    /*
422    public static void main(String[] args) {
423    StringInput si = new StringInput("kissa\nkoira\nkana");
424    StringOutput so = new StringOutput();
425    String s1 = Syotto.kysy("Mikä");
426    String so1 = so.toString();
427    so.getOrigOut().println("so1=" + so1);
428    si = new StringInput("12\n13\n15\n16\n17");
429    String s2 = Syotto.kysy("Kuka");
430    //si.palauta();
431    String s3 = Syotto.kysy("Mikä");
432    so.reset();
433    so.getOrigOut().println(s1 + "|" + s2 + "|" + s3);
434    String s4 = Syotto.kysy("Kuis");
435    System.out.println(s4);
436    si = new StringInput("12\n13\n15\n16\n17");
437    Scanner sc = new Scanner(System.in);
438    String s5 = sc.nextLine();
439    String s6 = Syotto.kysy("No");
440    si.palauta();
441    String so2 = so.toString();
442    so.palauta();
443    System.out.println(so1 + "|" + so2 + "|" + s5 + "|" + s6);
444    }
445    */
446    }