EMMA Coverage Report (generated Fri Feb 13 16:33:40 BRST 2009)
[all classes][br.org.agilcoop.cursos.testes.unidade.timer]

COVERAGE SUMMARY FOR SOURCE FILE [Timer.java]

nameclass, %method, %block, %line, %
Timer.java0%   (0/4)0%   (0/30)0%   (0/427)0%   (0/88)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class Timer0%   (0/1)0%   (0/20)0%   (0/296)0%   (0/65)
Timer (): void 0%   (0/1)0%   (0/6)0%   (0/2)
Timer (int, int, int): void 0%   (0/1)0%   (0/27)0%   (0/7)
access$0 (Timer): void 0%   (0/1)0%   (0/3)0%   (0/1)
addEvent (Event): void 0%   (0/1)0%   (0/8)0%   (0/3)
adjust (int, int, int): void 0%   (0/1)0%   (0/14)0%   (0/4)
elapsed (): long 0%   (0/1)0%   (0/14)0%   (0/3)
elapsedFormatted (): String 0%   (0/1)0%   (0/7)0%   (0/1)
finalizou (): void 0%   (0/1)0%   (0/36)0%   (0/9)
finished (): boolean 0%   (0/1)0%   (0/8)0%   (0/1)
metodoDaRefatoracao (int, int, int): long 0%   (0/1)0%   (0/11)0%   (0/1)
pause (): void 0%   (0/1)0%   (0/19)0%   (0/5)
removeEvent (Event): void 0%   (0/1)0%   (0/8)0%   (0/3)
running (): boolean 0%   (0/1)0%   (0/8)0%   (0/1)
start (): void 0%   (0/1)0%   (0/23)0%   (0/5)
state (): Timer$TimerState 0%   (0/1)0%   (0/3)0%   (0/1)
stop (): void 0%   (0/1)0%   (0/14)0%   (0/4)
stopped (): boolean 0%   (0/1)0%   (0/7)0%   (0/1)
timerDefaultFormat (int): String 0%   (0/1)0%   (0/70)0%   (0/11)
total (): long 0%   (0/1)0%   (0/3)0%   (0/1)
totalFormatted (): String 0%   (0/1)0%   (0/7)0%   (0/1)
     
class Timer$10%   (0/1)0%   (0/2)0%   (0/18)0%   (0/4)
Timer$1 (Timer, Event, Timer): void 0%   (0/1)0%   (0/12)0%   (0/2)
run (): void 0%   (0/1)0%   (0/6)0%   (0/2)
     
class Timer$SleepingThread0%   (0/1)0%   (0/4)0%   (0/47)0%   (0/13)
Timer$SleepingThread (Timer, long): void 0%   (0/1)0%   (0/9)0%   (0/3)
Timer$SleepingThread (Timer, long, Timer$SleepingThread): void 0%   (0/1)0%   (0/5)0%   (0/1)
elapsed (): long 0%   (0/1)0%   (0/11)0%   (0/3)
run (): void 0%   (0/1)0%   (0/22)0%   (0/7)
     
class Timer$TimerState0%   (0/1)0%   (0/4)0%   (0/66)0%   (0/8)
<static initializer> 0%   (0/1)0%   (0/37)0%   (0/4)
Timer$TimerState (String, int, int): void 0%   (0/1)0%   (0/8)0%   (0/3)
valueOf (String): Timer$TimerState 0%   (0/1)0%   (0/5)0%   (0/1)
values (): Timer$TimerState [] 0%   (0/1)0%   (0/16)0%   (0/1)

1package br.org.agilcoop.cursos.testes.unidade.timer;
2 
3import java.util.ArrayList;
4import java.util.List;
5 
6public class Timer {
7        public enum TimerState {
8                RUNNING(1),
9                STOPPED(2),
10                FINISHED(3);
11                
12                int state;
13 
14                private TimerState(int state) {
15                        this.state = state;
16                }
17        }
18        
19        @SuppressWarnings("unused")
20        private class SleepingThread extends Thread {
21                private long startTime;
22                private long sleepTime;
23                private long elapsedTime;
24                
25                private SleepingThread(long sleepTime) {
26                        this.sleepTime = sleepTime;
27                }
28 
29                public void run() {
30                        startTime = System.currentTimeMillis();
31                        try {
32                                Thread.sleep(sleepTime);
33                                elapsedTime = sleepTime;
34                                // Parent
35                                finalizou();
36                        } catch (InterruptedException e) {
37                                elapsedTime = System.currentTimeMillis() - startTime;
38                        }
39                }
40                
41                public long elapsed() {
42                        if(isAlive()) 
43                                return System.currentTimeMillis() - startTime;
44                        return elapsedTime;
45                }
46 
47        }
48        
49        private long totalInMiliseconds;
50        private TimerState state = TimerState.STOPPED;
51        private SleepingThread thread;
52        private long elapsed;
53        private final List<Event> events = new ArrayList<Event>();
54        
55        public Timer(int hours, int minutes, int seconds) {
56                if(hours < 0 || minutes < 0 || seconds < 0)
57                        throw new IllegalArgumentException("must be positive");
58                adjust(hours, minutes, seconds);
59        }
60        
61        public Timer() {
62                this(0, 0, 0);
63        }
64        
65        public void adjust(int hours, int minutes, int seconds) {
66                long totalInSeconds = metodoDaRefatoracao(hours, minutes, seconds);
67                totalInMiliseconds = totalInSeconds * 1000;
68                stop();
69        }
70        
71        public long metodoDaRefatoracao(int hours, int minutes, int seconds) {
72                return (hours * 3600) + (minutes * 60) + seconds;
73        }
74        
75        private void finalizou() {
76                state = TimerState.FINISHED;
77                elapsed = totalInMiliseconds;
78                for (final Event event : events) {
79                        final Timer timer = this;
80                        try {
81                                new Thread(new Runnable() {
82                                        public void run() {
83                                                event.executa(timer);
84                                        }
85                                }).start();
86                        } catch(Exception e) {
87                                e.printStackTrace();
88                        }
89                }
90        }
91 
92        synchronized public void start() {
93                if(state == TimerState.STOPPED) {
94                        state = TimerState.RUNNING;
95                        thread = new SleepingThread(totalInMiliseconds - elapsed);
96                        thread.start();
97                }
98        }
99        
100        synchronized public void pause() {
101                if(state == TimerState.RUNNING) {
102                        state = TimerState.STOPPED;
103                        elapsed += thread.elapsed();
104                        thread.interrupt();
105                }
106        }
107        
108        synchronized public void stop() {
109                if(state == TimerState.RUNNING) thread.interrupt();
110                state = TimerState.STOPPED;
111                elapsed = 0;
112        }
113        
114        public long total() {
115                return totalInMiliseconds;
116        }
117        
118        public synchronized long elapsed() {
119                if(state == TimerState.RUNNING)
120                        return elapsed + thread.elapsed();
121                else
122                        return elapsed;
123        }
124        
125        public String elapsedFormatted() {
126                return timerDefaultFormat((int) elapsed() / 1000);
127        }
128        
129        public String totalFormatted() {
130                return timerDefaultFormat((int) total() / 1000);
131        }
132        
133        public static String timerDefaultFormat(int totalOfSeconds) {
134                int hours = totalOfSeconds / 3600;
135                int minutes = (totalOfSeconds % 3600) / 60;
136                int seconds = (totalOfSeconds % 3600) % 60;
137                StringBuilder builder = new StringBuilder();
138                if(hours < 10) builder.append("0");
139                builder.append(hours + ":");
140                if(minutes < 10) builder.append("0");
141                builder.append(minutes + ":");
142                if(seconds < 10) builder.append("0");
143                builder.append(seconds);
144                return builder.toString();
145        }
146        
147        public TimerState state() {
148                return state;
149        }
150 
151        public boolean running() {
152                return state == TimerState.RUNNING;
153        }
154 
155        public boolean stopped() {
156                return ! running();
157        }
158        
159        public boolean finished() {
160                return state == TimerState.FINISHED;
161        }
162        
163        public void addEvent(Event event) {
164                if(event != null)
165                        events.add(event);
166        }
167        
168        public void removeEvent(Event event) {
169                if(event != null)
170                        events.remove(event);
171        }
172        
173}

[all classes][br.org.agilcoop.cursos.testes.unidade.timer]
EMMA 2.0.5312 (C) Vladimir Roubtsov