Beispiel #1
0
 def test_retrigger_delay(self):
     d1 = StateDevice()
     d2 = StateDevice(devices=d1,
                      retrigger_delay={
                                Attribute.SECS: 2
                                },
                      name='tested')
     d3 = StateDevice(devices=d2)
     d1.off()
     self.assertEqual(d1.state, State.OFF)
     self.assertEqual(d2.state, State.OFF)
     self.assertEqual(d3.state, State.OFF)
     d1.on()
     self.assertEqual(d1.state, State.ON)
     self.assertEqual(d2.state, State.ON)
     self.assertEqual(d3.state, State.ON)
     d3.off()
     self.assertEqual(d3.state, State.OFF)
     # set on again, this time no delegation
     d1.on()
     self.assertEqual(d3.state, State.OFF)
     
     # after x amount of time allow dupes
     time.sleep(3)
     d1.on()
     self.assertEqual(d3.state, State.ON)
Beispiel #2
0
 def test_delay_multiple(self):
     d1 = StateDevice()
     d2 = StateDevice()
     d3 = StateDevice(
                       devices=(d1, d2),
                       delay=(
                                  {Attribute.COMMAND: (Command.OFF),
                                  Attribute.SOURCE: (d1),
                                  Attribute.SECS: 2,
                                  },
                                  {Attribute.COMMAND: Command.OFF,
                                  Attribute.SOURCE: d2,
                                  Attribute.SECS: 4,
                                  },
                              )
                       )
     self.assertEqual(d3.state, State.UNKNOWN)
     d3.on()
     self.assertEqual(d3.state, State.ON)
     d1.off()
     self.assertEqual(d3.state, State.ON)
     time.sleep(3)
     self.assertEqual(d3.state, State.OFF)
     
     #d2
     d3.on()
     self.assertEqual(d3.state, State.ON)
     d2.off()
     self.assertEqual(d3.state, State.ON)
     time.sleep(3)
     self.assertEqual(d3.state, State.ON)
     time.sleep(1)
     self.assertEqual(d3.state, State.OFF)
Beispiel #3
0
 def test_delay_zero_secs(self):
     d1 = StateDevice()
     d2 = StateDevice()
     d3 = StateDevice(
                      devices=(d1, d2),
                      delay=({
                             Attribute.COMMAND: Command.OFF,
                             Attribute.SECS: 2
                             },
                             {
                              Attribute.COMMAND: Command.OFF,
                              Attribute.SECS: 0,
                              Attribute.SOURCE: d2,
                              }
                             ),
                      initial=State.ON,
                      )    
     self.assertEqual(d3.state, State.ON)
     d1.off()
     self.assertEqual(d3.state, State.ON)
     time.sleep(3)
     self.assertEqual(d3.state, State.OFF)
     d3.on()
     self.assertEqual(d3.state, State.ON)
     d2.off()
     self.assertEqual(d3.state, State.OFF)
Beispiel #4
0
 def test_onStateChanged(self):
     s1 = StateDevice()
     custom = Mock()
     s1.on()
     s1.onStateChanged(custom.method)
     s1.off()
     custom.method.assert_called_with(State.OFF, source=None, prev=State.ON)
Beispiel #5
0
 def test_binding_default(self):
     d1 = StateDevice()
     d1.off()
     d2 = StateDevice(d1)
     self.assertEqual(d2.state, State.OFF)
     d1.on()
     self.assertEqual(d2.state, State.ON)
Beispiel #6
0
 def test_binding_default(self):
     d1 = StateDevice()
     d1.off()
     d2 = StateDevice(d1)
     self.assertEqual(d2.state, State.OFF)
     d1.on()
     self.assertEqual(d2.state, State.ON)
Beispiel #7
0
 def test_delay_priority(self):
     d1 = StateDevice()
     d2 = StateDevice()
     d3 = StateDevice(
         devices=(d1, d2),
         delay=(
             {
                 Attribute.COMMAND: Command.OFF,
                 Attribute.SOURCE: d1,
                 Attribute.SECS: 4,
             },
             {
                 Attribute.COMMAND: Command.OFF,
                 Attribute.SECS: 2
             },
         ),
         initial=State.ON,
     )
     self.assertEqual(d3.state, State.ON)
     d1.off()
     self.assertEqual(d3.state, State.ON)
     time.sleep(2)
     self.assertEqual(d3.state, State.ON)
     time.sleep(2)
     self.assertEqual(d3.state, State.OFF)
Beispiel #8
0
    def test_delay_multiple(self):
        d1 = StateDevice()
        d2 = StateDevice()
        d3 = StateDevice(devices=(d1, d2),
                         delay=(
                             {
                                 Attribute.COMMAND: (Command.OFF),
                                 Attribute.SOURCE: (d1),
                                 Attribute.SECS: 2,
                             },
                             {
                                 Attribute.COMMAND: Command.OFF,
                                 Attribute.SOURCE: d2,
                                 Attribute.SECS: 4,
                             },
                         ))
        self.assertEqual(d3.state, State.UNKNOWN)
        d3.on()
        self.assertEqual(d3.state, State.ON)
        d1.off()
        self.assertEqual(d3.state, State.ON)
        time.sleep(3)
        self.assertEqual(d3.state, State.OFF)

        #d2
        d3.on()
        self.assertEqual(d3.state, State.ON)
        d2.off()
        self.assertEqual(d3.state, State.ON)
        time.sleep(3)
        self.assertEqual(d3.state, State.ON)
        time.sleep(1)
        self.assertEqual(d3.state, State.OFF)
Beispiel #9
0
 def test_last_command(self):
     s1 = StateDevice()
     s1.on()
     self.assertEqual(s1.state, State.ON)
     s1.off()
     self.assertEqual(s1.state, State.OFF)
     self.assertEqual(s1.last_command, Command.OFF)
Beispiel #10
0
 def test_device_on(self):
     d=StateDevice(name='device_test_1')
     d.off()
     self.assertEqual(d.state, State.OFF)
     response = self.api.get_response(method='POST', path="device/" + str(d.type_id), data=['command=on'])
     self.assertEqual(d.state, State.ON)
     self.assertTrue('"name": "device_test_1"' in response)
Beispiel #11
0
 def test_last_command(self):
     s1 = StateDevice()
     s1.on()
     self.assertEqual(s1.state, State.ON)
     s1.off()
     self.assertEqual(s1.state, State.OFF)
     self.assertEqual(s1.last_command, Command.OFF)
Beispiel #12
0
 def test_previous_state_command(self):
     s1 = StateDevice()
     s1.on()
     self.assertEqual(s1.state, State.ON)
     s1.off()
     self.assertEqual(s1.state, State.OFF)
     s1.previous()
     self.assertEqual(s1.state, State.ON)
Beispiel #13
0
 def test_previous_state_command(self):
     s1 = StateDevice()
     s1.on()
     self.assertEqual(s1.state, State.ON)
     s1.off()
     self.assertEqual(s1.state, State.OFF)
     s1.previous()
     self.assertEqual(s1.state, State.ON)
Beispiel #14
0
 def test_onStateChangedGlobal(self):
     s1 = StateDevice()
     custom = Mock()
     s1.on()
     StateDevice.test_onStateChangedGlobal(custom.method)
     s1.off()
     custom.method.assert_called_with(State.OFF,
                                      source=None,
                                      prev=State.ON,
                                      device=s1)
Beispiel #15
0
 def test_ignore_multi_command(self):
     s1 = StateDevice()
     s2 = StateDevice(devices=s1,
                      ignore={
                              Attribute.COMMAND: (Command.ON, Command.OFF,)
                              },
                      )
     self.assertEqual(s2.state, State.UNKNOWN)
     s1.on()
     self.assertEqual(s2.state, State.UNKNOWN)
     s1.off()
     self.assertEqual(s2.state, State.UNKNOWN)
Beispiel #16
0
 def test_delay_single(self):
     d1 = StateDevice(delay={
         Attribute.COMMAND: Command.OFF,
         Attribute.SECS: 2,
     })
     self.assertEqual(d1.state, State.UNKNOWN)
     d1.on()
     self.assertEqual(d1.state, State.ON)
     d1.off()
     self.assertEqual(d1.state, State.ON)
     time.sleep(3)
     #        time.sleep(20000)
     self.assertEqual(d1.state, State.OFF)
Beispiel #17
0
 def test_ignore_multiples_state(self):
     s1 = StateDevice()
     s2 = StateDevice(
         devices=s1,
         ignore={Attribute.COMMAND: (Command.ON, Command.OFF)},
     )
     self.assertEqual(s2.state, State.UNKNOWN)
     s1.on()
     self.assertEqual(s2.state, State.UNKNOWN)
     s1.off()
     self.assertEqual(s2.state, State.UNKNOWN)
     s1.on()
     self.assertEqual(s2.state, State.UNKNOWN)
 def test_ignore_state(self):
     s1 = StateDevice()
     s2 = StateDevice(s1)
     s1.on()
     self.assertEqual(s2.state, State.ON)
     s1.off()
     self.assertEqual(s2.state, State.OFF)
     s2.ignore_on()
     s1.on()
     self.assertEqual(s2.state, State.OFF)
     s2.ignore_on(False)
     s1.on()
     self.assertEqual(s2.state, State.ON)
Beispiel #19
0
 def test_ignore_state(self):
     s1 = StateDevice()
     s2 = StateDevice(devices = s1,
                       ignore={
                               Attribute.COMMAND: Command.ON,
                               Attribute.SOURCE: s1,
                               },
                       )
     s1.on()
     self.assertEqual(s2.state, State.UNKNOWN)
     s1.off()
     self.assertEqual(s2.state, State.OFF)
     s1.on()
     self.assertEqual(s2.state, State.OFF)
Beispiel #20
0
    def test_delay_single(self):
        d1 = StateDevice(
                          delay={Attribute.COMMAND: Command.OFF,
                                 Attribute.SECS: 2,
                                 }
                          )
        self.assertEqual(d1.state, State.UNKNOWN)
        d1.on()
        self.assertEqual(d1.state, State.ON)
        d1.off()
        self.assertEqual(d1.state, State.ON)
        time.sleep(3)
#        time.sleep(20000)
        self.assertEqual(d1.state, State.OFF)
Beispiel #21
0
    def test_delay_single(self):
        d1 = StateDevice(
                          delay={'command': Command.OFF,
                                 'secs': 2,
                                 }
                          )
        self.assertEqual(d1.state, State.UNKNOWN)
        d1.on()
        self.assertEqual(d1.state, State.ON)
        d1.off()
        self.assertEqual(d1.state, State.ON)
        time.sleep(3)
#        time.sleep(20000)
        self.assertEqual(d1.state, State.OFF)
Beispiel #22
0
 def test_ignore_state(self):
     s1 = StateDevice()
     s2 = StateDevice(devices = s1,
                       ignore={
                               'command': Command.ON,
                               'source:': s1,
                               },
                       )
     s1.on()
     self.assertEqual(s2.state, State.UNKNOWN)
     s1.off()
     self.assertEqual(s2.state, State.OFF)
     s1.on()
     self.assertEqual(s2.state, State.OFF)
Beispiel #23
0
 def test_ignore_state(self):
     s1 = StateDevice()
     s2 = StateDevice(
         devices=s1,
         ignore={
             Attribute.COMMAND: Command.ON,
             Attribute.SOURCE: s1,
         },
     )
     s1.on()
     self.assertEqual(s2.state, State.UNKNOWN)
     s1.off()
     self.assertEqual(s2.state, State.OFF)
     s1.on()
     self.assertEqual(s2.state, State.OFF)
Beispiel #24
0
 def test_controlled_devices_no_delay_default(self):
     i = Mock()
     d1 = StateDevice()
     d2 = InterfaceDevice(
         devices=(i, d1),
         delay={
             Attribute.COMMAND: Command.OFF,
             Attribute.SECS: 3
         },
         initial=State.ON,
     )
     d1.off()
     self.assertEqual(d2.state, State.ON)
     d2.command(command=Command.OFF, source=i)
     self.assertEqual(d2.state, State.OFF)
Beispiel #25
0
 def test_controlled_devices_no_delay_default(self):
     i = Mock()
     d1 = StateDevice()
     d2 = InterfaceDevice(
                          devices=(i,d1),
                          delay={
                                 Attribute.COMMAND: Command.OFF,
                                 Attribute.SECS: 3
                                 },
                          initial=State.ON,
                          )
     d1.off()
     self.assertEqual(d2.state, State.ON)
     d2.command(command=Command.OFF, source=i)
     self.assertEqual(d2.state, State.OFF)
Beispiel #26
0
 def test_state_remove_device(self):
     s1 = StateDevice()
     s2 = StateDevice(devices=s1)
     s1.on()
     self.assertEqual(s2.state, State.ON)
     s2.off()
     self.assertEqual(s2.state, State.OFF)
     r = s2.remove_device(s1)
     self.assertTrue(r)
     self.assertEqual(s2.state, State.OFF)
     s1.on()
     self.assertEqual(s2.state, State.OFF)
     # remove again and not error
     r = s2.remove_device(s1)
     self.assertFalse(r)
Beispiel #27
0
 def test_state_remove_device(self):
     s1 = StateDevice()
     s2 = StateDevice(devices=s1)
     s1.on()
     self.assertEqual(s2.state, State.ON)
     s2.off()
     self.assertEqual(s2.state, State.OFF)        
     r=s2.remove_device(s1)
     self.assertTrue(r)
     self.assertEqual(s2.state, State.OFF)        
     s1.on()
     self.assertEqual(s2.state, State.OFF)     
     # remove again and not error
     r = s2.remove_device(s1)
     self.assertFalse(r)
Beispiel #28
0
    def test_delay(self):
        d1 = StateDevice()
        d2 = StateDevice(devices=d1,
                          delay={'command': Command.OFF,
                                 'mapped': (Command.LEVEL, 80),
                                 'source': d1,
                                 'secs': 2,
                                 })
        self.assertEqual(d2.state, State.UNKNOWN)
        d1.on()
        self.assertEqual(d2.state, State.ON)
        d1.off()
        self.assertEqual(d2.state, State.ON)
        time.sleep(3)
#        time.sleep(2000)
        self.assertEqual(d2.state, (State.LEVEL, 80))
Beispiel #29
0
    def test_delay(self):
        d1 = StateDevice()
        d2 = StateDevice(devices=d1,
                          delay={Attribute.COMMAND: Command.OFF,
                                 Attribute.MAPPED: (Command.LEVEL, 80),
                                 Attribute.SOURCE: d1,
                                 Attribute.SECS: 2,
                                 })
        self.assertEqual(d2.state, State.UNKNOWN)
        d1.on()
        self.assertEqual(d2.state, State.ON)
        d1.off()
        self.assertEqual(d2.state, State.ON)
        time.sleep(3)
#        time.sleep(2000)
        self.assertEqual(d2.state, (State.LEVEL, 80))
Beispiel #30
0
    def test_restriction_specific_state(self):
        # Dark = ON
        # light = OFF
        sr = StateDevice()
        s2 = StateDevice(devices=(sr),
                         restriction={
                             Attribute.SOURCE: sr,
                             Attribute.STATE: State.OFF,
                             Attribute.TARGET: Command.ON,
                         })

        # Restrict
        sr.on()
        self.assertEqual(State.ON, s2.state)
        sr.off()
        self.assertEqual(State.OFF, s2.state)
Beispiel #31
0
 def test_delay(self):
     d1 = StateDevice()
     d2 = StateDevice(devices=d1,
                      delay={
                          Attribute.COMMAND: Command.OFF,
                          Attribute.MAPPED: (Command.LEVEL, 80),
                          Attribute.SOURCE: d1,
                          Attribute.SECS: 2,
                      })
     self.assertEqual(d2.state, State.UNKNOWN)
     d1.on()
     self.assertEqual(d2.state, State.ON)
     d1.off()
     self.assertEqual(d2.state, State.ON)
     time.sleep(3)
     #        time.sleep(2000)
     self.assertEqual(d2.state, (State.LEVEL, 80))
Beispiel #32
0
 def test_delay_no_retrigger(self):
     d1 = StateDevice(trigger={
                              Attribute.COMMAND: Command.ON,
                              Attribute.MAPPED: Command.OFF,
                              Attribute.SECS: 3},
                       delay={
                              Attribute.COMMAND: Command.OFF,
                              Attribute.SECS: 3},
                       )
     d1.on()
     self.assertEqual(d1.state, State.ON)
     d1.off()
     self.assertEqual(d1.state, State.ON)
     time.sleep(2)
     d1.off()
     time.sleep(1)
     self.assertEqual(d1.state, State.OFF)
Beispiel #33
0
 def test_delay_cancel_on_other_state(self):
     d1 = StateDevice()
     d2 = StateDevice(devices=d1,
                      initial=State.OFF,
                      delay={
                             Attribute.COMMAND: Command.OFF,
                             Attribute.SECS: 2,
                             },
                      )
     self.assertEqual(d2.state, State.UNKNOWN)
     d1.on()
     self.assertEqual(d2.state, State.ON)
     d1.off()
     self.assertEqual(d2.state, State.ON)
     d1.on()
     self.assertEqual(d2.state, State.ON)
     time.sleep(3)
     self.assertEqual(d2.state, State.ON)
Beispiel #34
0
 def test_ignore_multiple_state(self):
     s1 = StateDevice()
     s2 = StateDevice(devices = s1,
                       ignore=({
                               Attribute.COMMAND: Command.ON,
                               },
                               {
                                Attribute.COMMAND: Command.OFF,
                                }
                               ),
                       )
     self.assertEqual(s2.state, State.UNKNOWN)
     s1.on()
     self.assertEqual(s2.state, State.UNKNOWN)
     s1.off()
     self.assertEqual(s2.state, State.UNKNOWN)
     s1.on()
     self.assertEqual(s2.state, State.UNKNOWN)
Beispiel #35
0
 def test_restriction_specific_state(self):
     # Dark = ON
     # light = OFF
     sr = StateDevice()
     s2 = StateDevice(
                      devices=(sr),
                      restriction={
                                   Attribute.SOURCE: sr,
                                   Attribute.STATE: State.OFF,
                                   Attribute.TARGET: Command.ON,
                                   }
                      )
                                   
     # Restrict
     sr.on()
     self.assertEqual(State.ON, s2.state)
     sr.off()
     self.assertEqual(State.OFF, s2.state)        
Beispiel #36
0
 def test_idle_source(self):
     s1 = StateDevice()
     s2 = StateDevice()
     s1.off()
     s2.off()
     s3 = StateDevice(devices=(s1, s2),
                      idle={
                          Attribute.MAPPED: State.OFF,
                          Attribute.SECS: 2,
                          Attribute.SOURCE: s2
                      })
     s1.on()
     self.assertEqual(s3.state, State.ON)
     time.sleep(3)
     self.assertEqual(s3.state, State.ON)
     s2.on()
     self.assertEqual(s3.state, State.ON)
     time.sleep(3)
     self.assertEqual(s3.state, State.OFF)
Beispiel #37
0
 def test_manual_state(self):
     d1 = StateDevice()
     d2 = StateDevice(devices=d1,
                      delay={
                             Attribute.COMMAND: Command.OFF,
                             Attribute.SECS: 2
                             },
                      )
     d2.on()
     self.assertEqual(d2.state, State.ON)
     d2.manual()
     d2.off()
     self.assertEqual(d2.state, State.OFF)
     d2.on()
     d2.automatic()
     d2.off()
     self.assertEqual(d2.state, State.ON)
     time.sleep(3)
     self.assertEqual(d2.state, State.OFF)
Beispiel #38
0
 def test_delay_cancel_on_other_state(self):
     d1 = StateDevice()
     d2 = StateDevice(
         devices=d1,
         initial=State.OFF,
         delay={
             Attribute.COMMAND: Command.OFF,
             Attribute.SECS: 2,
         },
     )
     self.assertEqual(d2.state, State.UNKNOWN)
     d1.on()
     self.assertEqual(d2.state, State.ON)
     d1.off()
     self.assertEqual(d2.state, State.ON)
     d1.on()
     self.assertEqual(d2.state, State.ON)
     time.sleep(3)
     self.assertEqual(d2.state, State.ON)
Beispiel #39
0
 def test_idle_source(self):
     s1 = StateDevice()
     s2 = StateDevice()
     s1.off()
     s2.off()
     s3 = StateDevice(devices=(s1, s2),
                       idle={
                             Attribute.MAPPED: State.OFF,
                             Attribute.SECS: 2,
                             Attribute.SOURCE: s2
                             }
                       )
     s1.on()
     self.assertEqual(s3.state, State.ON)
     time.sleep(3)
     self.assertEqual(s3.state, State.ON)
     s2.on()
     self.assertEqual(s3.state, State.ON)
     time.sleep(3)
     self.assertEqual(s3.state, State.OFF)
Beispiel #40
0
 def test_delay_no_retrigger(self):
     d1 = StateDevice(
         trigger={
             Attribute.COMMAND: Command.ON,
             Attribute.MAPPED: Command.OFF,
             Attribute.SECS: 3
         },
         delay={
             Attribute.COMMAND: Command.OFF,
             Attribute.SECS: 3
         },
     )
     d1.on()
     self.assertEqual(d1.state, State.ON)
     d1.off()
     self.assertEqual(d1.state, State.ON)
     time.sleep(2)
     d1.off()
     time.sleep(1)
     self.assertEqual(d1.state, State.OFF)
Beispiel #41
0
 def test_manual_state(self):
     d1 = StateDevice()
     d2 = StateDevice(
         devices=d1,
         delay={
             Attribute.COMMAND: Command.OFF,
             Attribute.SECS: 2
         },
     )
     d2.on()
     self.assertEqual(d2.state, State.ON)
     d2.manual()
     d2.off()
     self.assertEqual(d2.state, State.OFF)
     d2.on()
     d2.automatic()
     d2.off()
     self.assertEqual(d2.state, State.ON)
     time.sleep(3)
     self.assertEqual(d2.state, State.OFF)
Beispiel #42
0
    def test_changes_only(self):
        d1 = StateDevice()
        d2 = StateDevice(devices=d1, changes_only=True, name='tested')
        d3 = StateDevice(devices=d2)
        d1.off()
        self.assertEqual(d1.state, State.OFF)
        self.assertEqual(d2.state, State.OFF)
        self.assertEqual(d3.state, State.OFF)
        d1.on()
        self.assertEqual(d1.state, State.ON)
        self.assertEqual(d2.state, State.ON)
        self.assertEqual(d3.state, State.ON)
        d3.off()
        self.assertEqual(d3.state, State.OFF)
        # set on again, this time no delegation
        d1.on()
        self.assertEqual(d3.state, State.OFF)

        # after x amount of time still prevent dupes
        time.sleep(3)
        d1.on()
        self.assertEqual(d3.state, State.OFF)
Beispiel #43
0
    def test_delay_multiple_source(self):
        d1 = StateDevice()
        d2 = StateDevice()
        d3 = StateDevice()
        d4 = StateDevice(
                          devices=(d1, d2, d3),
                          delay={
                                 Attribute.COMMAND: Command.OFF,
                                 Attribute.SOURCE: (d1, d2),
                                 Attribute.SECS: 2,
                                },
                          )
        d1.on()
        self.assertEqual(d4.state, State.ON)
        d1.off()
        self.assertEqual(d4.state, State.ON)
        time.sleep(3)
        self.assertEqual(d4.state, State.OFF)

        d3.on()
        self.assertEqual(d4.state, State.ON)
        d3.off()
        self.assertEqual(d4.state, State.OFF)
Beispiel #44
0
    def test_delay_multiple_source(self):
        d1 = StateDevice()
        d2 = StateDevice()
        d3 = StateDevice()
        d4 = StateDevice(
            devices=(d1, d2, d3),
            delay={
                Attribute.COMMAND: Command.OFF,
                Attribute.SOURCE: (d1, d2),
                Attribute.SECS: 2,
            },
        )
        d1.on()
        self.assertEqual(d4.state, State.ON)
        d1.off()
        self.assertEqual(d4.state, State.ON)
        time.sleep(3)
        self.assertEqual(d4.state, State.OFF)

        d3.on()
        self.assertEqual(d4.state, State.ON)
        d3.off()
        self.assertEqual(d4.state, State.OFF)
Beispiel #45
0
    def test_changes_only(self):
        d1 = StateDevice()
        d2 = StateDevice(devices=d1,
                         changes_only=True,
                         name='tested')
        d3 = StateDevice(devices=d2)
        d1.off()
        self.assertEqual(d1.state, State.OFF)
        self.assertEqual(d2.state, State.OFF)
        self.assertEqual(d3.state, State.OFF)
        d1.on()
        self.assertEqual(d1.state, State.ON)
        self.assertEqual(d2.state, State.ON)
        self.assertEqual(d3.state, State.ON)
        d3.off()
        self.assertEqual(d3.state, State.OFF)
        # set on again, this time no delegation
        d1.on()
        self.assertEqual(d3.state, State.OFF)

        # after x amount of time still prevent dupes
        time.sleep(3)
        d1.on()
        self.assertEqual(d3.state, State.OFF)
Beispiel #46
0
    def test_retrigger_delay(self):
        d1 = StateDevice()
        d2 = StateDevice(devices=d1,
                         retrigger_delay={Attribute.SECS: 2},
                         name='tested')
        d3 = StateDevice(devices=d2)
        d1.off()
        self.assertEqual(d1.state, State.OFF)
        self.assertEqual(d2.state, State.OFF)
        self.assertEqual(d3.state, State.OFF)
        d1.on()
        self.assertEqual(d1.state, State.ON)
        self.assertEqual(d2.state, State.ON)
        self.assertEqual(d3.state, State.ON)
        d3.off()
        self.assertEqual(d3.state, State.OFF)
        # set on again, this time no delegation
        d1.on()
        self.assertEqual(d3.state, State.OFF)

        # after x amount of time allow dupes
        time.sleep(3)
        d1.on()
        self.assertEqual(d3.state, State.ON)
Beispiel #47
0
 def test_delay_zero_secs(self):
     d1 = StateDevice()
     d2 = StateDevice()
     d3 = StateDevice(
         devices=(d1, d2),
         delay=({
             Attribute.COMMAND: Command.OFF,
             Attribute.SECS: 2
         }, {
             Attribute.COMMAND: Command.OFF,
             Attribute.SECS: 0,
             Attribute.SOURCE: d2,
         }),
         initial=State.ON,
     )
     self.assertEqual(d3.state, State.ON)
     d1.off()
     self.assertEqual(d3.state, State.ON)
     time.sleep(3)
     self.assertEqual(d3.state, State.OFF)
     d3.on()
     self.assertEqual(d3.state, State.ON)
     d2.off()
     self.assertEqual(d3.state, State.OFF)
Beispiel #48
0
 def test_delay_priority(self):
     d1 = StateDevice()
     d2 = StateDevice()
     d3 = StateDevice(
                      devices=(d1,d2),
                      delay=({
                             Attribute.COMMAND: Command.OFF,
                             Attribute.SOURCE: d1,
                             Attribute.SECS: 4,
                             },
                             {
                              Attribute.COMMAND: Command.OFF,
                              Attribute.SECS: 2
                              },
                             ),
                      initial=State.ON,
                      )
     self.assertEqual(d3.state, State.ON)
     d1.off()
     self.assertEqual(d3.state, State.ON)
     time.sleep(2)
     self.assertEqual(d3.state, State.ON)
     time.sleep(2)
     self.assertEqual(d3.state, State.OFF)
Beispiel #49
0
 def test_restriction(self):
     sr = StateDevice()
     s1 = StateDevice()
     s2 = StateDevice(devices=(s1),
                      restriction={
                          Attribute.SOURCE: sr,
                          Attribute.STATE: State.ON,
                      })
     self.assertEqual(State.UNKNOWN, s2.state)
     s1.on()
     self.assertEqual(State.ON, s2.state)
     s1.off()
     self.assertEqual(State.OFF, s2.state)
     # Restrict
     sr.on()
     s1.on()
     self.assertEqual(State.OFF, s2.state)
     s1.off()
     sr.off()
     s1.on()
     self.assertEqual(State.ON, s2.state)
Beispiel #50
0
 def test_restriction(self):
     sr = StateDevice()
     s1 = StateDevice()
     s2 = StateDevice(
                      devices=(s1),
                      restriction={
                                   Attribute.SOURCE: sr,
                                   Attribute.STATE: State.ON,
                                   }
                                   
                      )
     self.assertEqual(State.UNKNOWN, s2.state)
     s1.on()
     self.assertEqual(State.ON, s2.state)
     s1.off()
     self.assertEqual(State.OFF, s2.state)
     # Restrict
     sr.on()
     s1.on()
     self.assertEqual(State.OFF, s2.state)
     s1.off()
     sr.off()
     s1.on()
     self.assertEqual(State.ON, s2.state)
class StateDevice_Tests(TestCase):
    
    def setUp(self):
        self.interface = Mock()
        self.device = StateDevice()
        
    def test_instantiation(self):
        self.assertIsNotNone(self.device,
                             'HADevice could not be instantiated')

    def test_instances(self):
        prev = len(self.device.instances)
        device = StateDevice()
        self.assertTrue(len(device.instances) > prev)
                
    def test_idle_property(self):
        self.device.on()
        time.sleep(2)
        self.assertTrue(self.device.idle >= 2)

    def test_on(self):
        self.assertEqual(self.device.state, self.device.UNKNOWN)
        self.device.on()
        self.assertEqual(self.device.state, self.device.ON)
        
    def test_on_off(self):
        callback_obj = Mock()
        self.device.on_off(callback_obj.callback)
        self.device.off()
        self.assertTrue(callback_obj.callback.called)
        callback_obj.callback.assert_called_once_with(state=self.device.OFF, previous_state=self.device.UNKNOWN, source=self.device)
        
#    def test_time_on(self):
#        now = datetime.now()
#        hours, mins, secs = now.timetuple()[3:6]
#        secs = (secs + 2) % 60
#        mins += (secs + 2) / 60
#        trigger_time = '{h}:{m}:{s}'.format(
#                                             h=hours,
#                                             m=mins,
#                                             s=secs,
#                                                 )
#        print 'Trigger Time' + trigger_time
#        self.device.time_on(trigger_time)
#        time.sleep(4)
#        self.assertEqual(self.device.state, self.device.ON)

    def test_time_on_multiple(self):
        now = datetime.now()
        hours, mins, secs = now.timetuple()[3:6]
        secs = (secs + 2) % 60
        mins += (secs + 2) / 60
        trigger_time = '{h}:{m}:{s}'.format(
                                             h=hours,
                                             m=mins,
                                             s=secs,
                                                 )
        print 'Trigger Time' + trigger_time
        self.device.time_on(trigger_time)
        hours, mins, secs = now.timetuple()[3:6]
        secs = (secs + 5) % 60
        mins += (secs + 5) / 60
        trigger_time = '{h}:{m}:{s}'.format(
                                             h=hours,
                                             m=mins,
                                             s=secs,
                                                 )
        print 'Trigger Time2' + trigger_time
        self.device.time_on(trigger_time)
        time.sleep(4)
        print datetime.now()
        self.assertEqual(self.device.state, self.device.ON)
        self.device.off()
        self.assertEqual(self.device.state, self.device.OFF)
        time.sleep(3)
        print datetime.now()
        self.assertEqual(self.device.state, self.device.ON)
        

    def test_bind_devices(self):
        s2 = StateDevice(self.device)
        self.device.on()
        self.assertIsNotNone(s2)

    def test_bind_devices_initial_state(self):
        s1 = StateDevice()
        self.assertEqual(s1.state, State.UNKNOWN)
        s1.on()
        self.assertEqual(s1.state, State.ON)
        s2 = StateDevice(s1)
        self.assertEqual(s2.state, State.ON)
        s3 = StateDevice(s1, initial_state=State.OFF)
        self.assertEqual(s3.state, State.OFF)
    
    def test_invalid_state(self):
        try:
            self.device.invalid_state()
        except AttributeError, ex:
            return
        except TypeError, ex:
            return