Author: titmuss
Date: Tue Apr 22 10:00:42 2008
New Revision: 2316

URL: http://svn.slimdevices.com?rev=2316&root=Jive&view=rev
Log:
Bug: N/A
Description:
Added autostart for macros to allow an automated test sequence to run. Add 
macroPass and macroFail to allow test macros to record success or 
failure.


Modified:
    
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/MacroPlay/MacroPlayApplet.lua
    7.1/trunk/squeezeplay/src/squeezeplay/share/applets/MacroPlay/strings.txt

Modified: 
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/MacroPlay/MacroPlayApplet.lua
URL: 
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay/share/applets/MacroPlay/MacroPlayApplet.lua?rev=2316&root=Jive&r1=2315&r2=2316&view=diff
==============================================================================
--- 
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/MacroPlay/MacroPlayApplet.lua
 (original)
+++ 
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/MacroPlay/MacroPlayApplet.lua
 Tue Apr 22 10:00:42 2008
@@ -48,23 +48,48 @@
 -- macro (global) state
 local task = false
 local timer = false
-local macrodir = false
+local macro = false
+
+
+function init(self)
+       self:loadconfig()
+end
 
 
 local function loadmacro(file)
        for dir in package.path:gmatch("([^;]*)%?[^;]*;") do
-               -- FIXME file test first
-
-               local f, err = loadfile(dir .. file)
-               if err == nil then
-                       -- Set chunk environment to be contained in the
-                       -- MacroPlay applet.
-                       setfenv(f, getfenv(1))
-                       return f, string.match(dir .. file, "(.*[/\]).+")
+               local filepath = dir .. file
+
+               if lfs.attributes(filepath, "mode") == "file" then
+                       local f, err = loadfile(filepath)
+                       if err == nil then
+                               -- Set chunk environment to be contained in the
+                               -- MacroPlay applet.
+                               setfenv(f, getfenv(1))
+                               return f, string.match(filepath, "(.*[/\]).+")
+                       else
+                               return nil, err
+                       end
                end
        end
 
-       return nil, err
+       return nil
+end
+
+
+function loadconfig(self)
+       -- Load macro configuration
+       local f, err = loadmacro("Macros.lua")
+       if f then
+               -- Defines self.macros
+               f()
+       else
+               log:warn("Error loading Macros: ", err)
+       end
+
+--     if self.autostart then
+--             self:autoplay()
+--     end
 end
 
 
@@ -74,28 +99,48 @@
        local menu = SimpleMenu("menu", items)
        local help = Textarea("help", "")
 
+       menu:setComparator(SimpleMenu.itemComparatorWeightAlpha)
+
        window:addWidget(help)
        window:addWidget(menu)
 
-       -- Load macro configuration
-       local f = loadmacro("Macros.lua")
-       if f then
-               -- Defines self.macros
-               f()
-
-               for i, v in ipairs(self.macros) do
-                       local item = {
-                               text = self:string(v.name),
-                               sound = "WINDOWSHOW",
-                               callback = function(event, menuItem)
-                                       self:play(v.file)
-                               end,
-                               focusGained = function()
-                                       help:setValue(v.desc)
-                               end,
-                       }
-                       menu:addItem(item)
+       -- Macro menus
+       if self.autostart then
+               local item = {
+                       text = self:string("MACRO_PLAY_AUTOSTART"),
+                       sound = "WINDOWSHOW",
+                       callback = function(event, menuItem)
+                               self.auto = nil
+                               self:autoplay()
+                       end,
+                       focusGained = function()
+                               
help:setValue(self:string("MACRO_PLAY_AUTOSTART_HELP"))
+                       end,
+                       weight = 1,
+               }
+               menu:addItem(item)
+       end
+
+       for k, v in pairs(self.macros) do
+               local item = {
+                       text = self:string(v.name),
+                       sound = "WINDOWSHOW",
+                       callback = function(event, menuItem)
+                               self.auto = false
+                               self:play(v)
+                       end,
+                       focusGained = function()
+                               help:setValue(v.desc)
+                       end,
+                       weight = 5,
+               }
+
+               if v.passed then
+                       log:warn("SETTING STYLE")
+                       item.style = "checked"
                end
+
+               menu:addItem(item)
        end
 
        -- FIXME can't tie applet due to global macro state
@@ -103,15 +148,41 @@
 end
 
 
+function autoplay(self)
+       if self.auto == false then
+               return
+       end
+
+       if self.auto == nil then
+               self.auto = 1
+       end
+
+       if self.auto > #self.autostart then
+               log:info("Macro Autoplay FINISHED")
+               self.auto = false
+
+               return
+       end
+
+       local macro = self.macros[self.autostart[self.auto]]
+       self.auto = self.auto + 1
+
+       self:play(macro)
+end
+
 -- play the macro
-function play(self, file)
+function play(self, entry)
        task = Task("MacroPlay", self,
                function()
-                       local f, dir = loadmacro(file)
+                       local f, dir = loadmacro(entry.file)
                        if f then
-                               log:info("Macro starting: ", file)
-                               macrodir = dir
+                               macro = entry
+                               macro.dir = dir
+
+                               log:info("Macro starting: ", macro.file)
                                f()
+
+                               self:autoplay()
                        else
                                log:warn("Macro error: ", err)
                        end
@@ -164,12 +235,21 @@
 
 
 -- returns true if the menu item 'text' is selected
-function macroIsMenuItem(text)
+function macroIsMenuItem(pattern)
        local menuText = macroGetMenuText()
 
-       log:info("macroIsMenuItem ", menuText, "==", text)
-
-       return tostring(menuText) == tostring(text)
+       log:info("macroIsMenuItem ", menuText, "==", pattern)
+
+       return string.match(tostring(menuText), pattern)
+end
+
+
+-- force return to the home menu
+function macroHome()
+       log:info("macroHome")
+       if #Framework.windowStack > 1 then
+               Framework.windowStack[#Framework.windowStack - 1]:hideToTop()
+       end
 end
 
 
@@ -188,7 +268,7 @@
        window:draw(screen, LAYER_ALL)
 
 
-       local reffile = macrodir .. file .. ".bmp"
+       local reffile = macro.dir .. file .. ".bmp"
        if lfs.attributes(reffile, "mode") == "file" then
                -- verify screenshot
                log:debug("Loading reference screenshot " .. reffile)
@@ -198,11 +278,11 @@
 
                if match < limit then
                        -- failure
-                       log:warn("Screenshot FAILED " .. file .. " match=" .. 
match .. " limt=" .. limit)
-                       failfile = macrodir .. file .. "_fail.bmp"
+                       log:warn("Macro Screenshot FAILED " .. file .. " 
match=" .. match .. " limt=" .. limit)
+                       failfile = macro.dir .. file .. "_fail.bmp"
                        screen:saveBMP(failfile)
                else
-                       log:info("Screenshot PASSED " .. file)
+                       log:info("Macro Screenshot PASSED " .. file)
                        pass = true
                end
        else
@@ -215,6 +295,18 @@
 end
 
 
+function macroPass(msg)
+       log:warn("Macro PASS ", macro.name, ": ", msg)
+
+       macro.passed = Framework:getTicks()
+end
+
+
+function macroFail(msg)
+       log:warn("Macro FAIL ", macro.name, ": ", msg)
+end
+
+
 --[[
 
 =head1 LICENSE

Modified: 
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/MacroPlay/strings.txt
URL: 
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay/share/applets/MacroPlay/strings.txt?rev=2316&root=Jive&r1=2315&r2=2316&view=diff
==============================================================================
--- 7.1/trunk/squeezeplay/src/squeezeplay/share/applets/MacroPlay/strings.txt 
(original)
+++ 7.1/trunk/squeezeplay/src/squeezeplay/share/applets/MacroPlay/strings.txt 
Tue Apr 22 10:00:42 2008
@@ -2,3 +2,9 @@
 MACRO_PLAY
        DA      Makro for afspil
        EN      Play Macro
+
+MACRO_PLAY_AUTOSTART
+       EN      Automatic tests
+
+MACRO_PLAY_AUTOSTART_HELP
+       EN      Start automatic tests.

_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/cgi-bin/mailman/listinfo/jive-checkins

Reply via email to