1   /*
2    * ControladorAmostragemTest.java
3    * JUnit based test
4    *
5    * Created on 11 de Abril de 2007, 11:40
6    */
7   
8   package tempcontroller.base;
9   
10  import java.util.Iterator;
11  import junit.framework.*;
12  import java.io.File;
13  import java.io.IOException;
14  import tempcontroller.dummy.ControladorTemperatura;
15  import tempcontroller.dummy.LeitorEspectro;
16  
17  /**
18   *
19   * @author alapolli
20   */
21  public class ControladorAmostragemTest extends TestCase {
22      
23      public ControladorAmostragemTest(String testName) {
24          super(testName);
25      }
26  
27      private IControladorAmostragem controladorAmostragem;
28      private ControladorTemperatura controladorTemperatura;
29      private LeitorEspectro leitorEspectro;
30      private TestTimer timer;
31      
32      protected void setUp() throws Exception {
33          controladorAmostragem = new ControladorAmostragem();
34          controladorTemperatura = new ControladorTemperatura();
35          leitorEspectro = new LeitorEspectro();
36          timer = new TestTimer();
37      }
38  
39      protected void tearDown() throws Exception {
40          controladorAmostragem = null;
41          controladorTemperatura = null;
42          leitorEspectro = null;
43          timer = null;
44      }
45      
46      public void testLoadAndSave() throws IOException, ClassNotFoundException {
47          // Grava um arquivo, renomeia este e lê novamente.
48          // As programações devem ser iguais.
49          File f = null;
50          File f2 = null;
51          try {
52              f = File.createTempFile("tst", ".tmp");
53              controladorAmostragem.gravaProgramacao(getProgramacao(), f);
54              f2 = File.createTempFile("tst2", ".tmp");
55              f2.delete(); // Só quero um nome único. Arquivo criado pode se deletado.
56              f.renameTo(f2);
57              IProgramacaoAmostragem prog = controladorAmostragem.carregaProgramacao(f2);
58              assertEquals(getProgramacao(), prog);
59          } finally {
60              if (f != null) { 
61                  f.delete();
62              }
63              if (f2 != null) {
64                  f2.delete();
65              }
66          }
67      }
68      
69      public void testAceita() {
70          controladorTemperatura.setAceita(false);
71          TestTimer timer = new TestTimer();
72          assertFalse(controladorAmostragem.aceita(getProgramacao(), controladorTemperatura, leitorEspectro, timer));
73          controladorTemperatura.setAceita(true);
74          assertTrue(controladorAmostragem.aceita(getProgramacao(), controladorTemperatura, leitorEspectro, timer));
75      }
76      
77      private IProgramacaoAmostragem programacao;
78      private IProgramacaoAmostragem getProgramacao() {
79          if(programacao == null) {
80              programacao = new ProgramacaoAmostragemSimples();
81              programacao.setDiretorioGravacao(new File(System.getProperty("java.io.tmpdir")));
82  
83              IAmostragem amostragem = new AmostragemSimples();
84              amostragem.setNome("Amostra 1");
85              amostragem.setDuracao(10 * 1000); // dez segundos
86              amostragem.setTemperatura(25.0); // 25 kelvin
87              programacao.addAmostragem(amostragem);
88              
89              amostragem = new AmostragemSimples();
90              amostragem.setNome("Amostra 2");
91              amostragem.setDuracao(3600 * 1000); // uma hora
92              amostragem.setTemperatura(250.0); // 250 kelvin
93              programacao.addAmostragem(amostragem);
94  
95              amostragem = new AmostragemSimples();
96              amostragem.setNome("Amostra 3");
97              amostragem.setDuracao(48 * 3600 * 1000); // 48 horas
98              amostragem.setTemperatura(32.0); // 32 kelvin
99              programacao.addAmostragem(amostragem);
100         }
101         
102         return programacao;
103     }
104     public void testControleTempo() {
105         controladorTemperatura.setAceita(true);
106         assertTrue(controladorAmostragem.aceita(getProgramacao(), controladorTemperatura, leitorEspectro, timer));
107         Iterator<IAmostragem> iterator = getProgramacao().getAmostragens().iterator();
108         IAmostragem amostragem;
109         controladorAmostragem.start();
110         
111         while(iterator.hasNext()) {
112             timer.setCurrentTime(0);
113             amostragem = iterator.next();
114             controladorTemperatura.setTemperatura(amostragem.getTemperatura());
115             controladorTemperatura.fireTemperaturaAlvoAlcancada();
116             assertEquals(amostragem.getNome(), controladorAmostragem.getStatus().getNomeAmostragemAtual());
117             timer.setCurrentTime(amostragem.getDuracao());
118             timer.fireTempoTotalTerminado();
119         }
120         
121         assertEquals(IControladorAmostragem.Estado.PROGRAMACAO_TERMINADA, controladorAmostragem.getStatus().getEstado());
122     }
123     
124     public void testControleTemperatura() {
125         controladorTemperatura.setAceita(true);
126         assertTrue(controladorAmostragem.aceita(getProgramacao(), controladorTemperatura, leitorEspectro, timer));
127         Iterator<IAmostragem> iterator = getProgramacao().getAmostragens().iterator();
128         IAmostragem amostragem;
129         controladorAmostragem.start();
130         
131         while(iterator.hasNext()) {
132             timer.setCurrentTime(0);
133             amostragem = iterator.next();
134             controladorTemperatura.setTemperatura(amostragem.getTemperatura());
135             controladorTemperatura.fireTemperaturaAlvoAlcancada();
136             controladorTemperatura.setTemperatura(amostragem.getTemperatura() + 10.0);
137             controladorTemperatura.fireMudancaTemperatura();
138             assertEquals(amostragem.getNome(), controladorAmostragem.getStatus().getNomeAmostragemAtual());
139             assertEquals(IControladorAmostragem.Estado.ESPERANDO_RETORNO_TEMPERATURA, controladorAmostragem.getStatus().getEstado());
140             controladorTemperatura.setTemperatura(amostragem.getTemperatura());
141             controladorTemperatura.fireTemperaturaAlvoAlcancada();
142             timer.setCurrentTime(amostragem.getDuracao());
143             timer.fireTempoTotalTerminado();
144         }
145         
146         assertEquals(IControladorAmostragem.Estado.PROGRAMACAO_TERMINADA, controladorAmostragem.getStatus().getEstado());
147     }
148     
149     public static void main(String[] args) {
150         ControladorAmostragemTest tst = new ControladorAmostragemTest("tst");
151         try {
152             tst.setUp();
153             tst.testControleTempo();
154             tst.tearDown();
155         } catch (Exception ex) {
156             ex.printStackTrace();
157         }
158     }
159 }