54SCENARIO( 
"outletController Configuration", 
"[outletController]" ) 
 
   56   GIVEN(
"a config file with 4 channels for 4 outlets")
 
   58      WHEN(
"using outlet keyword, only outlet specified")
 
   60         mx::app::writeConfigFile( 
"/tmp/outletController_test.conf", {
"channel1", 
"channel2",     
"channel3",      
"channel4"},
 
   61                                                        {
"outlet",   
"outlet",       
"outlet",          
"outlet"},
 
   62                                                        {
"0",         
"1",             
"2",                
"3"} );
 
   64         mx::app::appConfigurator config;
 
   65         config.readConfig(
"/tmp/outletController_test.conf");
 
   76         std::vector<size_t> outlets, onOrder, offOrder;
 
   77         std::vector<unsigned> onDelays, offDelays;
 
   79         REQUIRE( outlets.size() == 1);
 
   80         REQUIRE( outlets[0] == 0 );
 
   83         REQUIRE( onOrder.size() == 0);
 
   85         REQUIRE( offOrder.size() == 0);
 
   87         REQUIRE( onDelays.size() == 0);
 
   89         REQUIRE( offDelays.size() == 0);
 
   92         REQUIRE( outlets.size() == 1);
 
   93         REQUIRE( outlets[0] == 1 );
 
   96         REQUIRE( onOrder.size() == 0);
 
   98         REQUIRE( offOrder.size() == 0);
 
  100         REQUIRE( onDelays.size() == 0);
 
  102         REQUIRE( offDelays.size() == 0);
 
  105         REQUIRE( outlets.size() == 1);
 
  106         REQUIRE( outlets[0] == 2 );
 
  109         REQUIRE( onOrder.size() == 0);
 
  111         REQUIRE( offOrder.size() == 0);
 
  113         REQUIRE( onDelays.size() == 0);
 
  115         REQUIRE( offDelays.size() == 0);
 
  118         REQUIRE( outlets.size() == 1);
 
  119         REQUIRE( outlets[0] == 3 );
 
  122         REQUIRE( onOrder.size() == 0);
 
  124         REQUIRE( offOrder.size() == 0);
 
  126         REQUIRE( onDelays.size() == 0);
 
  128         REQUIRE( offDelays.size() == 0);
 
  132      WHEN(
"using outlet keyword, all specified")
 
  134         mx::app::writeConfigFile( 
"/tmp/outletController_test.conf", {
"channel1", 
"channel1", 
"channel1", 
"channel1", 
"channel1",  
"channel2",  
"channel2", 
"channel2", 
"channel2", 
"channel2",  
"channel3", 
"channel3", 
"channel3", 
"channel3", 
"channel3",   
"channel4",  
"channel4", 
"channel4", 
"channel4", 
"channel4"  },
 
  135                                                        {
"outlet",   
"onOrder",  
"offOrder", 
"onDelays", 
"offDelays", 
"outlet",    
"onOrder",  
"offOrder", 
"onDelays", 
"offDelays", 
"outlet",   
"onOrder",  
"offOrder", 
"onDelays", 
"offDelays",  
"outlet",   
"onOrder",  
"offOrder", 
"onDelays", 
"offDelays"  },
 
  136                                                        {
"0",        
"0",        
"0",        
"100",      
"120",       
"1",         
"0",        
"0",        
"105",      
"130",       
"2",        
"0",        
"0",        
"107",      
"132",        
"3",      
"0",        
"0",        
"108",      
"133"});      
 
  138         mx::app::appConfigurator config;
 
  139         config.readConfig(
"/tmp/outletController_test.conf");
 
  150         std::vector<size_t> outlets, onOrder, offOrder;
 
  151         std::vector<unsigned> onDelays, offDelays;
 
  154         REQUIRE( outlets.size() == 1);
 
  155         REQUIRE( outlets[0] == 0 );
 
  158         REQUIRE( onOrder.size() == 1);
 
  159         REQUIRE( onOrder[0] == 0);
 
  161         REQUIRE( offOrder.size() == 1);
 
  162         REQUIRE( offOrder[0] == 0);
 
  164         REQUIRE( onDelays.size() == 1);
 
  165         REQUIRE( onDelays[0] == 100);
 
  167         REQUIRE( offDelays.size() == 1);
 
  168         REQUIRE( offDelays[0] == 120);
 
  171         REQUIRE( outlets.size() == 1);
 
  172         REQUIRE( outlets[0] == 1 );
 
  175         REQUIRE( onOrder.size() == 1);
 
  176         REQUIRE( onOrder[0] == 0);
 
  178         REQUIRE( offOrder.size() == 1);
 
  179         REQUIRE( offOrder[0] == 0);
 
  181         REQUIRE( onDelays.size() == 1);
 
  182         REQUIRE( onDelays[0] == 105);
 
  184         REQUIRE( offDelays.size() == 1);
 
  185         REQUIRE( offDelays[0] == 130);
 
  188         REQUIRE( outlets.size() == 1);
 
  189         REQUIRE( outlets[0] == 2 );
 
  192         REQUIRE( onOrder.size() == 1);
 
  193         REQUIRE( onOrder[0] == 0);
 
  195         REQUIRE( offOrder.size() == 1);
 
  196         REQUIRE( offOrder[0] == 0);
 
  198         REQUIRE( onDelays.size() == 1);
 
  199         REQUIRE( onDelays[0] == 107);
 
  201         REQUIRE( offDelays.size() == 1);
 
  202         REQUIRE( offDelays[0] == 132);
 
  205         REQUIRE( outlets.size() == 1);
 
  206         REQUIRE( outlets[0] == 3 );
 
  209         REQUIRE( onOrder.size() == 1);
 
  210         REQUIRE( onOrder[0] == 0);
 
  212         REQUIRE( offOrder.size() == 1);
 
  213         REQUIRE( offOrder[0] == 0);
 
  215         REQUIRE( onDelays.size() == 1);
 
  216         REQUIRE( onDelays[0] == 108);
 
  218         REQUIRE( offDelays.size() == 1);
 
  219         REQUIRE( offDelays[0] == 133);
 
  222      WHEN(
"using outlets keyword, only outlet specified")
 
  224         mx::app::writeConfigFile( 
"/tmp/outletController_test.conf", {
"channel1",     
"channel2",     
"channel3",      
"channel4"},
 
  225                                                        {
"outlets",       
"outlets",       
"outlets",          
"outlets"},
 
  226                                                        {
"0",             
"1",             
"2",                
"3"} );
 
  228         mx::app::appConfigurator config;
 
  229         config.readConfig(
"/tmp/outletController_test.conf");
 
  240         std::vector<size_t> outlets, onOrder, offOrder;
 
  241         std::vector<unsigned> onDelays, offDelays;
 
  243         REQUIRE( outlets.size() == 1);
 
  244         REQUIRE( outlets[0] == 0 );
 
  247         REQUIRE( onOrder.size() == 0);
 
  249         REQUIRE( offOrder.size() == 0);
 
  251         REQUIRE( onDelays.size() == 0);
 
  253         REQUIRE( offDelays.size() == 0);
 
  256         REQUIRE( outlets.size() == 1);
 
  257         REQUIRE( outlets[0] == 1 );
 
  260         REQUIRE( onOrder.size() == 0);
 
  262         REQUIRE( offOrder.size() == 0);
 
  264         REQUIRE( onDelays.size() == 0);
 
  266         REQUIRE( offDelays.size() == 0);
 
  269         REQUIRE( outlets.size() == 1);
 
  270         REQUIRE( outlets[0] == 2 );
 
  273         REQUIRE( onOrder.size() == 0);
 
  275         REQUIRE( offOrder.size() == 0);
 
  277         REQUIRE( onDelays.size() == 0);
 
  279         REQUIRE( offDelays.size() == 0);
 
  282         REQUIRE( outlets.size() == 1);
 
  283         REQUIRE( outlets[0] == 3 );
 
  286         REQUIRE( onOrder.size() == 0);
 
  288         REQUIRE( offOrder.size() == 0);
 
  290         REQUIRE( onDelays.size() == 0);
 
  292         REQUIRE( offDelays.size() == 0);
 
  295      WHEN(
"using outlets keyword, all specified")
 
  297         mx::app::writeConfigFile( 
"/tmp/outletController_test.conf", {
"channel1", 
"channel1", 
"channel1", 
"channel1", 
"channel1",  
"channel2", 
"channel2", 
"channel2", 
"channel2", 
"channel2",  
"channel3", 
"channel3", 
"channel3", 
"channel3", 
"channel3",   
"channel4",  
"channel4", 
"channel4", 
"channel4", 
"channel4"  },
 
  298                                                        {
"outlets",  
"onOrder",  
"offOrder", 
"onDelays", 
"offDelays", 
"outlets",  
"onOrder",  
"offOrder", 
"onDelays", 
"offDelays", 
"outlets",  
"onOrder",  
"offOrder", 
"onDelays", 
"offDelays",  
"outlets",   
"onOrder",  
"offOrder", 
"onDelays", 
"offDelays"  },
 
  299                                                        {
"0",        
"0",        
"0",        
"100",      
"120",       
"1",        
"0",        
"0",        
"105",      
"130",       
"2",        
"0",        
"0",        
"107",      
"132",        
"3",          
"0",        
"0",        
"108",      
"133"});      
 
  301         mx::app::appConfigurator config;
 
  302         config.readConfig(
"/tmp/outletController_test.conf");
 
  313         std::vector<size_t> outlets, onOrder, offOrder;
 
  314         std::vector<unsigned> onDelays, offDelays;
 
  317         REQUIRE( outlets.size() == 1);
 
  318         REQUIRE( outlets[0] == 0 );
 
  321         REQUIRE( onOrder.size() == 1);
 
  322         REQUIRE( onOrder[0] == 0);
 
  324         REQUIRE( offOrder.size() == 1);
 
  325         REQUIRE( offOrder[0] == 0);
 
  327         REQUIRE( onDelays.size() == 1);
 
  328         REQUIRE( onDelays[0] == 100);
 
  330         REQUIRE( offDelays.size() == 1);
 
  331         REQUIRE( offDelays[0] == 120);
 
  334         REQUIRE( outlets.size() == 1);
 
  335         REQUIRE( outlets[0] == 1 );
 
  338         REQUIRE( onOrder.size() == 1);
 
  339         REQUIRE( onOrder[0] == 0);
 
  341         REQUIRE( offOrder.size() == 1);
 
  342         REQUIRE( offOrder[0] == 0);
 
  344         REQUIRE( onDelays.size() == 1);
 
  345         REQUIRE( onDelays[0] == 105);
 
  347         REQUIRE( offDelays.size() == 1);
 
  348         REQUIRE( offDelays[0] == 130);
 
  351         REQUIRE( outlets.size() == 1);
 
  352         REQUIRE( outlets[0] == 2 );
 
  355         REQUIRE( onOrder.size() == 1);
 
  356         REQUIRE( onOrder[0] == 0);
 
  358         REQUIRE( offOrder.size() == 1);
 
  359         REQUIRE( offOrder[0] == 0);
 
  361         REQUIRE( onDelays.size() == 1);
 
  362         REQUIRE( onDelays[0] == 107);
 
  364         REQUIRE( offDelays.size() == 1);
 
  365         REQUIRE( offDelays[0] == 132);
 
  368         REQUIRE( outlets.size() == 1);
 
  369         REQUIRE( outlets[0] == 3 );
 
  372         REQUIRE( onOrder.size() == 1);
 
  373         REQUIRE( onOrder[0] == 0);
 
  375         REQUIRE( offOrder.size() == 1);
 
  376         REQUIRE( offOrder[0] == 0);
 
  378         REQUIRE( onDelays.size() == 1);
 
  379         REQUIRE( onDelays[0] == 108);
 
  381         REQUIRE( offDelays.size() == 1);
 
  382         REQUIRE( offDelays[0] == 133);
 
  386   GIVEN(
"a config file with 2 channels for 4 outlets")
 
  388      WHEN(
"using outlet keyword, only outlet specified")
 
  390         mx::app::writeConfigFile( 
"/tmp/outletController_test.conf", {
"channel1",     
"channel2" },
 
  391                                                        {
"outlet",       
"outlet"   },
 
  394         mx::app::appConfigurator config;
 
  395         config.readConfig(
"/tmp/outletController_test.conf");
 
  406         std::vector<size_t> outlets, onOrder, offOrder;
 
  407         std::vector<unsigned> onDelays, offDelays;
 
  409         REQUIRE( outlets.size() == 2);
 
  410         REQUIRE( outlets[0] == 0 );
 
  411         REQUIRE( outlets[1] == 1 );
 
  414         REQUIRE( onOrder.size() == 0);
 
  416         REQUIRE( offOrder.size() == 0);
 
  418         REQUIRE( onDelays.size() == 0);
 
  420         REQUIRE( offDelays.size() == 0);
 
  423         REQUIRE( outlets.size() == 2);
 
  424         REQUIRE( outlets[0] == 2 );
 
  425         REQUIRE( outlets[1] == 3 );
 
  428         REQUIRE( onOrder.size() == 0);
 
  430         REQUIRE( offOrder.size() == 0);
 
  432         REQUIRE( onDelays.size() == 0);
 
  434         REQUIRE( offDelays.size() == 0);
 
  439      WHEN(
"using outlet keyword, all specified")
 
  441         mx::app::writeConfigFile( 
"/tmp/outletController_test.conf", {
"channel1",
"channel1", 
"channel1", 
"channel1", 
"channel1",  
"channel2", 
"channel2", 
"channel2", 
"channel2", 
"channel2"   },
 
  442                                                        {
"outlet",  
"onOrder",  
"offOrder", 
"onDelays", 
"offDelays", 
"outlet",   
"onOrder",  
"offOrder", 
"onDelays", 
"offDelays"  },
 
  443                                                        {
"0,1",     
"0,1",      
"1,0",      
"0,105",    
"0,107",     
"2,3",      
"1,0",      
"0,1",      
"0,106",    
"0,108"      } );
 
  445         mx::app::appConfigurator config;
 
  446         config.readConfig(
"/tmp/outletController_test.conf");
 
  457         std::vector<size_t> outlets, onOrder, offOrder;
 
  458         std::vector<unsigned> onDelays, offDelays;
 
  460         REQUIRE( outlets.size() == 2);
 
  461         REQUIRE( outlets[0] == 0 );
 
  462         REQUIRE( outlets[1] == 1 );
 
  465         REQUIRE( onOrder.size() == 2);
 
  466         REQUIRE( onOrder[0] == 0 );
 
  467         REQUIRE( onOrder[1] == 1 );
 
  469         REQUIRE( offOrder.size() == 2);
 
  470         REQUIRE( offOrder[0] == 1 );
 
  471         REQUIRE( offOrder[1] == 0 );
 
  473         REQUIRE( onDelays.size() == 2);
 
  474         REQUIRE( onDelays[0] == 0 );
 
  475         REQUIRE( onDelays[1] == 105 );
 
  477         REQUIRE( offDelays.size() == 2);
 
  478         REQUIRE( offDelays[0] == 0 );
 
  479         REQUIRE( offDelays[1] == 107 );
 
  482         REQUIRE( outlets.size() == 2);
 
  483         REQUIRE( outlets[0] == 2 );
 
  484         REQUIRE( outlets[1] == 3 );
 
  487         REQUIRE( onOrder.size() == 2);
 
  488         REQUIRE( onOrder[0] == 1 );
 
  489         REQUIRE( onOrder[1] == 0 );
 
  491         REQUIRE( offOrder.size() == 2);
 
  492         REQUIRE( offOrder[0] == 0 );
 
  493         REQUIRE( offOrder[1] == 1 );
 
  495         REQUIRE( onDelays.size() == 2);
 
  496         REQUIRE( onDelays[0] == 0 );
 
  497         REQUIRE( onDelays[1] == 106 );
 
  499         REQUIRE( offDelays.size() == 2);
 
  500         REQUIRE( offDelays[0] == 0 );
 
  501         REQUIRE( offDelays[1] == 108 );
 
  504      WHEN(
"using outlets keyword, only outlet specified")
 
  506         mx::app::writeConfigFile( 
"/tmp/outletController_test.conf", {
"channel1",     
"channel2" },
 
  507                                                        {
"outlets",       
"outlets"   },
 
  510         mx::app::appConfigurator config;
 
  511         config.readConfig(
"/tmp/outletController_test.conf");
 
  522         std::vector<size_t> outlets, onOrder, offOrder;
 
  523         std::vector<unsigned> onDelays, offDelays;
 
  525         REQUIRE( outlets.size() == 2);
 
  526         REQUIRE( outlets[0] == 0 );
 
  527         REQUIRE( outlets[1] == 1 );
 
  530         REQUIRE( onOrder.size() == 0);
 
  532         REQUIRE( offOrder.size() == 0);
 
  534         REQUIRE( onDelays.size() == 0);
 
  536         REQUIRE( offDelays.size() == 0);
 
  540         REQUIRE( outlets.size() == 2);
 
  541         REQUIRE( outlets[0] == 2 );
 
  542         REQUIRE( outlets[1] == 3 );
 
  545         REQUIRE( onOrder.size() == 0);
 
  547         REQUIRE( offOrder.size() == 0);
 
  549         REQUIRE( onDelays.size() == 0);
 
  551         REQUIRE( offDelays.size() == 0);
 
  554      WHEN(
"using outlets keyword, all specified")
 
  556         mx::app::writeConfigFile( 
"/tmp/outletController_test.conf", {
"channel1",
"channel1", 
"channel1", 
"channel1", 
"channel1",  
"channel2", 
"channel2", 
"channel2", 
"channel2", 
"channel2"   },
 
  557                                                        {
"outlets",  
"onOrder",  
"offOrder", 
"onDelays", 
"offDelays", 
"outlets",   
"onOrder",  
"offOrder", 
"onDelays", 
"offDelays"  },
 
  558                                                        {
"0,2",     
"0,1",      
"1,0",      
"0,105",    
"0,107",     
"1,3",      
"1,0",      
"0,1",      
"0,106",    
"0,108"      } );
 
  560         mx::app::appConfigurator config;
 
  561         config.readConfig(
"/tmp/outletController_test.conf");
 
  572         std::vector<size_t> outlets, onOrder, offOrder;
 
  573         std::vector<unsigned> onDelays, offDelays;
 
  575         REQUIRE( outlets.size() == 2);
 
  576         REQUIRE( outlets[0] == 0 );
 
  577         REQUIRE( outlets[1] == 2 );
 
  580         REQUIRE( onOrder.size() == 2);
 
  581         REQUIRE( onOrder[0] == 0 );
 
  582         REQUIRE( onOrder[1] == 1 );
 
  584         REQUIRE( offOrder.size() == 2);
 
  585         REQUIRE( offOrder[0] == 1 );
 
  586         REQUIRE( offOrder[1] == 0 );
 
  588         REQUIRE( onDelays.size() == 2);
 
  589         REQUIRE( onDelays[0] == 0 );
 
  590         REQUIRE( onDelays[1] == 105 );
 
  592         REQUIRE( offDelays.size() == 2);
 
  593         REQUIRE( offDelays[0] == 0 );
 
  594         REQUIRE( offDelays[1] == 107 );
 
  597         REQUIRE( outlets.size() == 2);
 
  598         REQUIRE( outlets[0] == 1 );
 
  599         REQUIRE( outlets[1] == 3 );
 
  602         REQUIRE( onOrder.size() == 2);
 
  603         REQUIRE( onOrder[0] == 1 );
 
  604         REQUIRE( onOrder[1] == 0 );
 
  606         REQUIRE( offOrder.size() == 2);
 
  607         REQUIRE( offOrder[0] == 0 );
 
  608         REQUIRE( offOrder[1] == 1 );
 
  610         REQUIRE( onDelays.size() == 2);
 
  611         REQUIRE( onDelays[0] == 0 );
 
  612         REQUIRE( onDelays[1] == 106 );
 
  614         REQUIRE( offDelays.size() == 2);
 
  615         REQUIRE( offDelays[0] == 0 );
 
  616         REQUIRE( offDelays[1] == 108 );