RDI 0.1.0.20091020

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. data/AUTHORS +3 -0
  2. data/ChangeLog +46 -0
  3. data/Credits +21 -0
  4. data/LICENSE +31 -0
  5. data/README +18 -0
  6. data/TODO +17 -0
  7. data/lib/rdi/Installer.rb +678 -0
  8. data/lib/rdi/Model/ContextModifier.rb +20 -0
  9. data/lib/rdi/Model/DependencyDescription.rb +154 -0
  10. data/lib/rdi/Model/DependencyUserChoice.rb +202 -0
  11. data/lib/rdi/Model/Installer.rb +24 -0
  12. data/lib/rdi/Model/LocationSelector.rb +16 -0
  13. data/lib/rdi/Model/ProgressView.rb +16 -0
  14. data/lib/rdi/Model/Tester.rb +20 -0
  15. data/lib/rdi/Model/View.rb +16 -0
  16. data/lib/rdi/Plugins/ContextModifiers/GemPath.desc.rb +13 -0
  17. data/lib/rdi/Plugins/ContextModifiers/GemPath.rb +106 -0
  18. data/lib/rdi/Plugins/ContextModifiers/LibraryPath.rb +74 -0
  19. data/lib/rdi/Plugins/ContextModifiers/RubyLoadPath.rb +76 -0
  20. data/lib/rdi/Plugins/ContextModifiers/SystemPath.rb +74 -0
  21. data/lib/rdi/Plugins/GemCommon.rb +127 -0
  22. data/lib/rdi/Plugins/Installers/Download.rb +72 -0
  23. data/lib/rdi/Plugins/Installers/DownloadAndInstall.desc.rb +11 -0
  24. data/lib/rdi/Plugins/Installers/DownloadAndInstall.rb +54 -0
  25. data/lib/rdi/Plugins/Installers/Gem.desc.rb +13 -0
  26. data/lib/rdi/Plugins/Installers/Gem.rb +67 -0
  27. data/lib/rdi/Plugins/Installers/Icons/Download.png +0 -0
  28. data/lib/rdi/Plugins/Installers/Icons/DownloadAndInstall.png +0 -0
  29. data/lib/rdi/Plugins/Installers/Icons/Gem.png +0 -0
  30. data/lib/rdi/Plugins/Installers/Yum.rb +52 -0
  31. data/lib/rdi/Plugins/ProgressViews/SimpleWxGUI.desc.rb +13 -0
  32. data/lib/rdi/Plugins/ProgressViews/SimpleWxGUI.rb +58 -0
  33. data/lib/rdi/Plugins/ProgressViews/Text.rb +68 -0
  34. data/lib/rdi/Plugins/RubyGemsDepDesc.rb +41 -0
  35. data/lib/rdi/Plugins/Testers/Binaries.rb +56 -0
  36. data/lib/rdi/Plugins/Testers/DynamicLibraries.rb +56 -0
  37. data/lib/rdi/Plugins/Testers/RubyRequires.rb +76 -0
  38. data/lib/rdi/Plugins/Views/SimpleWxGUI/DependenciesLoaderDialog.rb +147 -0
  39. data/lib/rdi/Plugins/Views/SimpleWxGUI/DependencyPanel.rb +301 -0
  40. data/lib/rdi/Plugins/Views/SimpleWxGUI/Icons/Dependency.png +0 -0
  41. data/lib/rdi/Plugins/Views/SimpleWxGUI/Icons/Ignore.png +0 -0
  42. data/lib/rdi/Plugins/Views/SimpleWxGUI/Icons/ValidKO.png +0 -0
  43. data/lib/rdi/Plugins/Views/SimpleWxGUI/Icons/ValidOK.png +0 -0
  44. data/lib/rdi/Plugins/Views/SimpleWxGUI/LocationSelectors/Directory.desc.rb +13 -0
  45. data/lib/rdi/Plugins/Views/SimpleWxGUI/LocationSelectors/Directory.rb +45 -0
  46. data/lib/rdi/Plugins/Views/SimpleWxGUI.desc.rb +13 -0
  47. data/lib/rdi/Plugins/Views/SimpleWxGUI.rb +60 -0
  48. data/lib/rdi/Plugins/Views/Text/LocationSelectors/Directory.rb +44 -0
  49. data/lib/rdi/Plugins/Views/Text.rb +257 -0
  50. data/lib/rdi/Plugins/WxCommon.rb +69 -0
  51. data/lib/rdi/Plugins/WxRubyDepDesc.rb +36 -0
  52. data/lib/rdi/rdi.rb +8 -0
  53. data/test/Common.rb +796 -0
  54. data/test/Flows/BasicFlows.rb +114 -0
  55. data/test/Flows/UIFlows.rb +460 -0
  56. data/test/Plugins/ContextModifiers/GemPath.rb +44 -0
  57. data/test/Plugins/ContextModifiers/LibraryPath.rb +36 -0
  58. data/test/Plugins/ContextModifiers/RubyLoadPath.rb +36 -0
  59. data/test/Plugins/ContextModifiers/SystemPath.rb +36 -0
  60. data/test/Plugins/Installers/Download.rb +65 -0
  61. data/test/Plugins/Installers/DownloadAndInstall.rb +73 -0
  62. data/test/Plugins/Installers/Gem.rb +79 -0
  63. data/test/Plugins/LocationSelectors/Directory.rb +34 -0
  64. data/test/Plugins/Testers/Binaries.rb +46 -0
  65. data/test/Plugins/Testers/DynamicLibraries.rb +46 -0
  66. data/test/Plugins/Testers/RubyRequires.rb +48 -0
  67. data/test/Plugins/Views/SimpleWxGUI.rb +190 -0
  68. data/test/Plugins/Views/Text.rb +112 -0
  69. data/test/Plugins/WxEnv.rb +58 -0
  70. data/test/Plugins/WxEnvApp.rb +53 -0
  71. data/test/Repository/Binaries/DummyBinary +1 -0
  72. data/test/Repository/Libraries/DummyLibrary.so +1 -0
  73. data/test/Repository/RubyGems/DummyGem-0.0.1.20090828.gem +0 -0
  74. data/test/Repository/RubyGems/GemsSources/DummyGem/DummyGem.gemspec.rb +23 -0
  75. data/test/Repository/RubyGems/GemsSources/DummyGem/lib/DummyGemMain.rb +5 -0
  76. data/test/Repository/RubyLibraries/DummyRubyLib.rb +1 -0
  77. data/test/run.rb +23 -0
  78. metadata +145 -0
@@ -0,0 +1,36 @@
1
+ #--
2
+ # Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
3
+ # Licensed under the terms specified in LICENSE file. No warranty is provided.
4
+ #++
5
+
6
+ module RDI
7
+
8
+ module Test
9
+
10
+ module ContextModifiers
11
+
12
+ class SystemPath < RDITestCase
13
+
14
+ include RDITestCase_ContextModifiers
15
+
16
+ # Constructor
17
+ def setup
18
+ super
19
+ @ContextModifierPluginName = 'SystemPath'
20
+ end
21
+
22
+ # Get a test location
23
+ #
24
+ # Return:
25
+ # * _Object_: Location of the given ContextModifier to be tested
26
+ def getTestLocation
27
+ return 'DummyLocation'
28
+ end
29
+
30
+ end
31
+
32
+ end
33
+
34
+ end
35
+
36
+ end
@@ -0,0 +1,65 @@
1
+ #--
2
+ # Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
3
+ # Licensed under the terms specified in LICENSE file. No warranty is provided.
4
+ #++
5
+
6
+ require 'tmpdir'
7
+ require 'fileutils'
8
+
9
+ module RDI
10
+
11
+ module Test
12
+
13
+ module Installers
14
+
15
+ class Download < RDITestCase
16
+
17
+ include RDITestCase_Installers
18
+
19
+ # Constructor
20
+ def setup
21
+ super
22
+ @InstallerPluginName = 'Download'
23
+ end
24
+
25
+ # Get a test content
26
+ #
27
+ # Return:
28
+ # * _Object_: Content of the given Installer to be tested
29
+ def getTestContent
30
+ return "#{@RepositoryDir}/Binaries/DummyBinary"
31
+ end
32
+
33
+ # Verify installed content
34
+ #
35
+ # Parameters:
36
+ # * *iLocation* (_Object_): Location where the content should be installed
37
+ # Return:
38
+ # * _Boolean_: Is the content installed in this location ?
39
+ def verifyInstalledContent(iLocation)
40
+ return File.exists?("#{iLocation}/DummyBinary")
41
+ end
42
+
43
+ # Uninstall the test content
44
+ #
45
+ # Parameters:
46
+ # * *iLocation* (_Object_): Location where the content should be installed
47
+ def uninstallTestContent(iLocation)
48
+ FileUtils.rm("#{iLocation}/DummyBinary")
49
+ end
50
+
51
+ # Get a location to be used as the "other" one, chosen by the user
52
+ #
53
+ # Return:
54
+ # * _Object_: The other location
55
+ def getOtherLocation
56
+ return "#{Dir.tmpdir}/RDITest"
57
+ end
58
+
59
+ end
60
+
61
+ end
62
+
63
+ end
64
+
65
+ end
@@ -0,0 +1,73 @@
1
+ #--
2
+ # Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
3
+ # Licensed under the terms specified in LICENSE file. No warranty is provided.
4
+ #++
5
+
6
+ require 'tmpdir'
7
+ require 'fileutils'
8
+
9
+ module RDI
10
+
11
+ module Test
12
+
13
+ module Installers
14
+
15
+ class DownloadAndInstall < RDITestCase
16
+
17
+ include RDITestCase_Installers
18
+
19
+ # Constructor
20
+ def setup
21
+ super
22
+ @InstallerPluginName = 'DownloadAndInstall'
23
+ end
24
+
25
+ # Get a test content
26
+ #
27
+ # Return:
28
+ # * _Object_: Content of the given Installer to be tested
29
+ def getTestContent
30
+ return [
31
+ "#{@RepositoryDir}/Binaries/DummyBinary",
32
+ Proc.new do |iInstallLocation|
33
+ # *iInstallLocation* (_String_): Installation directory
34
+ FileUtils::mkdir_p(iInstallLocation)
35
+ FileUtils::cp('DummyBinary', iInstallLocation)
36
+ next true
37
+ end
38
+ ]
39
+ end
40
+
41
+ # Verify installed content
42
+ #
43
+ # Parameters:
44
+ # * *iLocation* (_Object_): Location where the content should be installed
45
+ # Return:
46
+ # * _Boolean_: Is the content installed in this location ?
47
+ def verifyInstalledContent(iLocation)
48
+ return File.exists?("#{iLocation}/DummyBinary")
49
+ end
50
+
51
+ # Uninstall the test content
52
+ #
53
+ # Parameters:
54
+ # * *iLocation* (_Object_): Location where the content should be installed
55
+ def uninstallTestContent(iLocation)
56
+ FileUtils.rm("#{iLocation}/DummyBinary")
57
+ end
58
+
59
+ # Get a location to be used as the "other" one, chosen by the user
60
+ #
61
+ # Return:
62
+ # * _Object_: The other location
63
+ def getOtherLocation
64
+ return "#{Dir.tmpdir}/RDITest"
65
+ end
66
+
67
+ end
68
+
69
+ end
70
+
71
+ end
72
+
73
+ end
@@ -0,0 +1,79 @@
1
+ #--
2
+ # Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
3
+ # Licensed under the terms specified in LICENSE file. No warranty is provided.
4
+ #++
5
+
6
+ require 'tmpdir'
7
+ require 'fileutils'
8
+
9
+ module RDI
10
+
11
+ module Test
12
+
13
+ module Installers
14
+
15
+ class Gem < RDITestCase
16
+
17
+ include RDITestCase_Installers
18
+
19
+ # Constructor
20
+ def setup
21
+ super
22
+ @InstallerPluginName = 'Gem'
23
+ # Install Gems if needed
24
+ require 'rdi/Plugins/RubyGemsDepDesc'
25
+ setupAppDir do
26
+ @Installer.ensureDependencies( [
27
+ # RubyGems
28
+ RDI::getRubyGemsDepDesc
29
+ ] )
30
+ end
31
+ end
32
+
33
+ # Get a test content
34
+ #
35
+ # Return:
36
+ # * _Object_: Content of the given Installer to be tested
37
+ def getTestContent
38
+ return "#{@RepositoryDir}/RubyGems/DummyGem-0.0.1.20090828.gem"
39
+ end
40
+
41
+ # Verify installed content
42
+ #
43
+ # Parameters:
44
+ # * *iLocation* (_Object_): Location where the content should be installed
45
+ # Return:
46
+ # * _Boolean_: Is the content installed in this location ?
47
+ def verifyInstalledContent(iLocation)
48
+ return (
49
+ (File.exists?("#{iLocation}/gems/DummyGem-0.0.1.20090828/lib/DummyGemMain.rb")) and
50
+ (File.exists?("#{iLocation}/specifications/DummyGem-0.0.1.20090828.gemspec")) and
51
+ (File.exists?("#{iLocation}/cache/DummyGem-0.0.1.20090828.gem"))
52
+ )
53
+ end
54
+
55
+ # Uninstall the test content
56
+ #
57
+ # Parameters:
58
+ # * *iLocation* (_Object_): Location where the content should be installed
59
+ def uninstallTestContent(iLocation)
60
+ FileUtils.rm_rf("#{iLocation}/gems/DummyGem-0.0.1.20090828")
61
+ FileUtils.rm("#{iLocation}/specifications/DummyGem-0.0.1.20090828.gemspec")
62
+ FileUtils.rm("#{iLocation}/cache/DummyGem-0.0.1.20090828.gem")
63
+ end
64
+
65
+ # Get a location to be used as the "other" one, chosen by the user
66
+ #
67
+ # Return:
68
+ # * _Object_: The other location
69
+ def getOtherLocation
70
+ return "#{Dir.tmpdir}/RDITest"
71
+ end
72
+
73
+ end
74
+
75
+ end
76
+
77
+ end
78
+
79
+ end
@@ -0,0 +1,34 @@
1
+ #--
2
+ # Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
3
+ # Licensed under the terms specified in LICENSE file. No warranty is provided.
4
+ #++
5
+
6
+ module RDI
7
+
8
+ module Test
9
+
10
+ module LocationSelectors
11
+
12
+ class Directory < RDITestCase
13
+
14
+ include RDITestCase_LocationSelectors
15
+
16
+ # Constructor
17
+ def setup
18
+ super
19
+ @LocationSelectorPluginName = 'Directory'
20
+ end
21
+
22
+ # Install dependencies
23
+ def installDep_SimpleWxGUI
24
+ require 'Plugins/WxEnv'
25
+ RDI::Test::RDIWx.installTestWxEnv
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+
32
+ end
33
+
34
+ end
@@ -0,0 +1,46 @@
1
+ #--
2
+ # Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
3
+ # Licensed under the terms specified in LICENSE file. No warranty is provided.
4
+ #++
5
+
6
+ module RDI
7
+
8
+ module Test
9
+
10
+ module Testers
11
+
12
+ class Binaries < RDITestCase
13
+
14
+ include RDITestCase_Testers
15
+
16
+ # Constructor
17
+ def setup
18
+ super
19
+ @TesterPluginName = 'Binaries'
20
+ end
21
+
22
+ # Get a test content
23
+ #
24
+ # Return:
25
+ # * _Object_: Content of the given Tester to be tested
26
+ def getTestContent
27
+ return [ 'DummyBinary' ]
28
+ end
29
+
30
+ # Install the test content
31
+ def installTestContent
32
+ $rUtilAnts_Platform_Info.setSystemExePath($rUtilAnts_Platform_Info.getSystemExePath + [ "#{@RepositoryDir}/Binaries" ])
33
+ end
34
+
35
+ # Uninstall the test content
36
+ def uninstallTestContent
37
+ $rUtilAnts_Platform_Info.setSystemExePath($rUtilAnts_Platform_Info.getSystemExePath - [ "#{@RepositoryDir}/Binaries" ])
38
+ end
39
+
40
+ end
41
+
42
+ end
43
+
44
+ end
45
+
46
+ end
@@ -0,0 +1,46 @@
1
+ #--
2
+ # Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
3
+ # Licensed under the terms specified in LICENSE file. No warranty is provided.
4
+ #++
5
+
6
+ module RDI
7
+
8
+ module Test
9
+
10
+ module Testers
11
+
12
+ class DynamicLibraries < RDITestCase
13
+
14
+ include RDITestCase_Testers
15
+
16
+ # Constructor
17
+ def setup
18
+ super
19
+ @TesterPluginName = 'DynamicLibraries'
20
+ end
21
+
22
+ # Get a test content
23
+ #
24
+ # Return:
25
+ # * _Object_: Content of the given Tester to be tested
26
+ def getTestContent
27
+ return [ 'DummyLibrary.so' ]
28
+ end
29
+
30
+ # Install the test content
31
+ def installTestContent
32
+ $rUtilAnts_Platform_Info.setSystemLibsPath($rUtilAnts_Platform_Info.getSystemLibsPath + [ "#{@RepositoryDir}/Libraries" ])
33
+ end
34
+
35
+ # Uninstall the test content
36
+ def uninstallTestContent
37
+ $rUtilAnts_Platform_Info.setSystemLibsPath($rUtilAnts_Platform_Info.getSystemLibsPath - [ "#{@RepositoryDir}/Libraries" ])
38
+ end
39
+
40
+ end
41
+
42
+ end
43
+
44
+ end
45
+
46
+ end
@@ -0,0 +1,48 @@
1
+ #--
2
+ # Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
3
+ # Licensed under the terms specified in LICENSE file. No warranty is provided.
4
+ #++
5
+
6
+ module RDI
7
+
8
+ module Test
9
+
10
+ module Testers
11
+
12
+ class RubyRequires < RDITestCase
13
+
14
+ include RDITestCase_Testers
15
+
16
+ # Constructor
17
+ def setup
18
+ super
19
+ @TesterPluginName = 'RubyRequires'
20
+ end
21
+
22
+ # Get a test content
23
+ #
24
+ # Return:
25
+ # * _Object_: Content of the given Tester to be tested
26
+ def getTestContent
27
+ return [ 'DummyRubyLib.rb' ]
28
+ end
29
+
30
+ # Install the test content
31
+ def installTestContent
32
+ $LOAD_PATH << "#{@RepositoryDir}/RubyLibraries"
33
+ end
34
+
35
+ # Uninstall the test content
36
+ def uninstallTestContent
37
+ $LOAD_PATH.delete_if do |iDir|
38
+ (iDir == "#{@RepositoryDir}/RubyLibraries")
39
+ end
40
+ end
41
+
42
+ end
43
+
44
+ end
45
+
46
+ end
47
+
48
+ end
@@ -0,0 +1,190 @@
1
+ #--
2
+ # Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
3
+ # Licensed under the terms specified in LICENSE file. No warranty is provided.
4
+ #++
5
+
6
+ module RDI
7
+
8
+ module Test
9
+
10
+ module Views
11
+
12
+ class SimpleWxGUI < RDITestCase
13
+
14
+ include RDITestCase_Views
15
+
16
+ # Constructor
17
+ def setup
18
+ super
19
+ @ViewPluginName = 'SimpleWxGUI'
20
+ require 'Plugins/WxEnv'
21
+ RDI::Test::RDIWx.installTestWxEnv
22
+ end
23
+
24
+ # initScenario
25
+ #
26
+ # Parameters:
27
+ # * *ioPlugin* (_Object_): The View plugin
28
+ # * *iScenario* (<em>list<[Integer,String,Object]></em>): The scenario
29
+ # * *iMissingDependencies* (<em>list<DependencyDescription></em>): The missing dependencies list
30
+ def initScenario(ioPlugin, iScenario, iMissingDependencies)
31
+ # Display it to the user for him to perform the actions
32
+ @Scenario = iScenario
33
+ end
34
+
35
+ # executeScenario
36
+ #
37
+ # Parameters:
38
+ # * *ioPlugin* (_Object_): The View plugin
39
+ # * *ioInstaller* (_Installer_): The RDI installer
40
+ # * *iMissingDependencies* (<em>list<DependencyDescription></em>): The missing dependencies list
41
+ # Return:
42
+ # * <em>list<DependencyUserChoice></em>: The corresponding user choices
43
+ def executeScenario(ioPlugin, ioInstaller, iMissingDependencies)
44
+ # Modify the constructor of DependenciesLoaderDialog to trap its instance (as Wx::get_app.get_top_window does not work as expected)
45
+ # Load it first to ensure the class will be loaded
46
+ ioInstaller.accessPlugin('Views', 'SimpleWxGUI') do |iPlugin|
47
+ require 'rdi/Plugins/Views/SimpleWxGUI/DependenciesLoaderDialog'
48
+ end
49
+ if (defined?($RDI_ModifiedDepLoaderDialog) == nil)
50
+ $RDI_ModifiedDepLoaderDialog = true
51
+ RDI::Views::SimpleWxGUI::DependenciesLoaderDialog.module_eval('
52
+ alias :initialize_ORG :initialize
53
+
54
+ # Constructor
55
+ #
56
+ # Parameters:
57
+ # * *iParent* (<em>Wx::Window</em>): The parent
58
+ # * *ioInstaller* (_Installer_): The installer
59
+ # * *iDepsUserChoices* (<em>list<DependencyUserChoice></em>): The dependency user choices to reflect in this dialog
60
+ def initialize(iParent, ioInstaller, iDepsUserChoices)
61
+ initialize_ORG(iParent, ioInstaller, iDepsUserChoices)
62
+ $RDI_DepLoaderDialog = self
63
+ end
64
+
65
+ ')
66
+ end
67
+ $RDI_DepLoaderDialog = nil
68
+ Thread.new do
69
+ # This thread will pilot our GUI
70
+ begin
71
+ lExit = false
72
+ while !lExit
73
+ # Get the Top window (don't use Wx::get_app.get_top_window as it is not updated after several dialogs displayed)
74
+ # TODO (wxRuby): Make Wx::get_app.get_top_window work as expected
75
+ lTopWindow = $RDI_DepLoaderDialog
76
+ if (lTopWindow != nil)
77
+ # Add some methods that will give us some internals
78
+ lTopWindow.class.module_eval('
79
+ # The list of dependency panels
80
+ # list< DependencyPanel >
81
+ attr_reader :DependencyPanels
82
+
83
+ # The Apply button
84
+ # Wx::Button
85
+ attr_reader :BApply
86
+
87
+ # The list of DepUserChoices
88
+ # list< DependencyUserChoice >
89
+ attr_reader :DepsUserChoices
90
+
91
+ ')
92
+ lTopWindow.DependencyPanels[0].class.module_eval('
93
+ # The Locate radio button
94
+ # Wx::RadioButton
95
+ attr_reader :RBLocate
96
+
97
+ # The Ignore radio button
98
+ # Wx::RadioButton
99
+ attr_reader :RBIgnore
100
+
101
+ # The Installers components
102
+ # list< [ RadioButton, StaticBitmap, list< RadioButton > ] >
103
+ attr_reader :InstallerComponents
104
+
105
+ ')
106
+ # Execute the scenario
107
+ @Scenario.each do |iActionInfo|
108
+ iAction, iDepID, iParameters = iActionInfo
109
+ # First, find the correct dependency panel
110
+ lDepPanel = nil
111
+ lDepUserChoice = nil
112
+ if (iDepID != nil)
113
+ # Find the correct index
114
+ lIdxDep = 0
115
+ iMissingDependencies.each do |iDepDesc|
116
+ if (iDepDesc.ID == iDepID)
117
+ break
118
+ end
119
+ lIdxDep += 1
120
+ end
121
+ lDepPanel = lTopWindow.DependencyPanels[lIdxDep]
122
+ lDepUserChoice = lTopWindow.DepsUserChoices[lIdxDep]
123
+ end
124
+ case iAction
125
+ when ACTION_LOCATE
126
+ lDepPanel.RBLocate.command(Wx::CommandEvent.new(Wx::EVT_COMMAND_RADIOBUTTON_SELECTED, lDepPanel.RBLocate.get_id))
127
+ when ACTION_IGNORE
128
+ lDepPanel.RBIgnore.command(Wx::CommandEvent.new(Wx::EVT_COMMAND_RADIOBUTTON_SELECTED, lDepPanel.RBIgnore.get_id))
129
+ when ACTION_INSTALL
130
+ lIdxInstaller, lIdxDest, lOtherLocation = iParameters
131
+ lRBDest = lDepPanel.InstallerComponents[lIdxInstaller][2][lIdxDest]
132
+ # In case of DEST_OTHER, we must use a different LocationSelector
133
+ lOtherFound = false
134
+ lInstallerName, lInstallerContent, lContextModifiers = lDepUserChoice.DepDesc.Installers[lIdxInstaller]
135
+ ioInstaller.accessPlugin('Installers', lInstallerName) do |iPlugin|
136
+ lFlavour, lLocation = iPlugin.PossibleDestinations[lIdxDest]
137
+ if (lFlavour == DEST_OTHER)
138
+ setupFakeSelector(lLocation, lOtherLocation) do
139
+ lRBDest.command(Wx::CommandEvent.new(Wx::EVT_COMMAND_RADIOBUTTON_SELECTED, lRBDest.get_id))
140
+ end
141
+ lOtherFound = true
142
+ break
143
+ end
144
+ end
145
+ if (!lOtherFound)
146
+ lRBDest.command(Wx::CommandEvent.new(Wx::EVT_COMMAND_RADIOBUTTON_SELECTED, lRBDest.get_id))
147
+ end
148
+ when ACTION_APPLY
149
+ lTopWindow.BApply.command(Wx::CommandEvent.new(Wx::EVT_COMMAND_BUTTON_CLICKED, lTopWindow.BApply.get_id))
150
+ # Exit our loop
151
+ lExit = true
152
+ break
153
+ when ACTION_SELECT_AFFECTING_CONTEXTMODIFIER
154
+ lCMName, lLocation = iParameters
155
+ # Click on the button named "Change #{lCMName}"
156
+ # TODO (wxRuby): Make Window#find_window_by_label work (little typo)
157
+ lButton = Wx::Window.find_window_by_label("Change #{lCMName}", lDepPanel)
158
+ # Change the LocationSelector
159
+ ioInstaller.accessPlugin('ContextModifiers', lCMName) do |ioCMPlugin|
160
+ # Get the name of LocationSelector class to use
161
+ # Setup a fake selector
162
+ setupFakeSelector(ioCMPlugin.LocationSelectorName, lLocation) do
163
+ lButton.command(Wx::CommandEvent.new(Wx::EVT_COMMAND_BUTTON_CLICKED, lButton.get_id))
164
+ end
165
+ end
166
+ else
167
+ logBug "Unknown Action: #{iAction}"
168
+ end
169
+ end
170
+ # Time between each action: 200 ms
171
+ sleep(0.2)
172
+ end
173
+ # Time between each attempt to find the new window: 200 ms
174
+ sleep(0.2)
175
+ end
176
+ rescue Exception
177
+ logExc $!, 'Exception while piloting GUI for testing.'
178
+ end
179
+ end
180
+
181
+ return ioPlugin.execute(ioInstaller, iMissingDependencies)
182
+ end
183
+
184
+ end
185
+
186
+ end
187
+
188
+ end
189
+
190
+ end