bbrowning-virtualbox 0.7.6.dev

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 (281) hide show
  1. data/.gitignore +8 -0
  2. data/.yardopts +3 -0
  3. data/Gemfile +16 -0
  4. data/LICENSE +19 -0
  5. data/Rakefile +33 -0
  6. data/Readme.md +70 -0
  7. data/docs/GettingStarted.md +196 -0
  8. data/docs/WhatsNew.md +12 -0
  9. data/features/README.md +33 -0
  10. data/features/global.feature +19 -0
  11. data/features/global_extra_data.feature +27 -0
  12. data/features/step_definitions/abstract_model_steps.rb +39 -0
  13. data/features/step_definitions/extra_data_steps.rb +36 -0
  14. data/features/step_definitions/global_steps.rb +29 -0
  15. data/features/step_definitions/nat_engine_steps.rb +76 -0
  16. data/features/step_definitions/network_adapter_steps.rb +38 -0
  17. data/features/step_definitions/shared_folder_steps.rb +76 -0
  18. data/features/step_definitions/snapshot_steps.rb +74 -0
  19. data/features/step_definitions/storage_controller_steps.rb +16 -0
  20. data/features/step_definitions/virtualbox_steps.rb +17 -0
  21. data/features/step_definitions/vm_steps.rb +50 -0
  22. data/features/support/env.rb +61 -0
  23. data/features/support/helpers.rb +38 -0
  24. data/features/support/hooks.rb +30 -0
  25. data/features/support/ordered_hash.rb +49 -0
  26. data/features/support/vboxmanage.rb +191 -0
  27. data/features/version.feature +16 -0
  28. data/features/vm.feature +13 -0
  29. data/features/vm_bios.feature +29 -0
  30. data/features/vm_cpu.feature +29 -0
  31. data/features/vm_extra_data.feature +35 -0
  32. data/features/vm_hw_virt.feature +29 -0
  33. data/features/vm_nat_engine.feature +57 -0
  34. data/features/vm_network_adapters.feature +27 -0
  35. data/features/vm_shared_folders.feature +42 -0
  36. data/features/vm_snapshots.feature +29 -0
  37. data/features/vm_storage_controllers.feature +11 -0
  38. data/lib/virtualbox.rb +11 -0
  39. data/lib/virtualbox/abstract_model.rb +281 -0
  40. data/lib/virtualbox/abstract_model/attributable.rb +290 -0
  41. data/lib/virtualbox/abstract_model/dirty.rb +177 -0
  42. data/lib/virtualbox/abstract_model/interface_attributes.rb +98 -0
  43. data/lib/virtualbox/abstract_model/relatable.rb +332 -0
  44. data/lib/virtualbox/abstract_model/validatable.rb +167 -0
  45. data/lib/virtualbox/abstract_model/version_matcher.rb +35 -0
  46. data/lib/virtualbox/appliance.rb +62 -0
  47. data/lib/virtualbox/audio_adapter.rb +52 -0
  48. data/lib/virtualbox/bios.rb +50 -0
  49. data/lib/virtualbox/com.rb +23 -0
  50. data/lib/virtualbox/com/abstract_enum.rb +43 -0
  51. data/lib/virtualbox/com/abstract_implementer.rb +45 -0
  52. data/lib/virtualbox/com/abstract_interface.rb +167 -0
  53. data/lib/virtualbox/com/base_interface.rb +38 -0
  54. data/lib/virtualbox/com/ffi/interface.rb +150 -0
  55. data/lib/virtualbox/com/ffi/interfaces.rb +54 -0
  56. data/lib/virtualbox/com/ffi/util.rb +119 -0
  57. data/lib/virtualbox/com/ffi/vboxxpcomc.rb +31 -0
  58. data/lib/virtualbox/com/ffi_interface.rb +96 -0
  59. data/lib/virtualbox/com/implementer/base.rb +59 -0
  60. data/lib/virtualbox/com/implementer/ffi.rb +361 -0
  61. data/lib/virtualbox/com/implementer/mscom.rb +175 -0
  62. data/lib/virtualbox/com/implementer/nil.rb +10 -0
  63. data/lib/virtualbox/com/interface/3.1.x/access_mode.rb +11 -0
  64. data/lib/virtualbox/com/interface/3.1.x/appliance.rb +22 -0
  65. data/lib/virtualbox/com/interface/3.1.x/audio_adapter.rb +15 -0
  66. data/lib/virtualbox/com/interface/3.1.x/audio_controller_type.rb +11 -0
  67. data/lib/virtualbox/com/interface/3.1.x/audio_driver_type.rb +11 -0
  68. data/lib/virtualbox/com/interface/3.1.x/bios_boot_menu_mode.rb +11 -0
  69. data/lib/virtualbox/com/interface/3.1.x/bios_settings.rb +21 -0
  70. data/lib/virtualbox/com/interface/3.1.x/clipboard_mode.rb +11 -0
  71. data/lib/virtualbox/com/interface/3.1.x/console.rb +50 -0
  72. data/lib/virtualbox/com/interface/3.1.x/cpu_property_type.rb +11 -0
  73. data/lib/virtualbox/com/interface/3.1.x/device_type.rb +11 -0
  74. data/lib/virtualbox/com/interface/3.1.x/dhcp_server.rb +22 -0
  75. data/lib/virtualbox/com/interface/3.1.x/firmware_type.rb +11 -0
  76. data/lib/virtualbox/com/interface/3.1.x/guest_os_type.rb +23 -0
  77. data/lib/virtualbox/com/interface/3.1.x/host.rb +42 -0
  78. data/lib/virtualbox/com/interface/3.1.x/host_network_interface.rb +30 -0
  79. data/lib/virtualbox/com/interface/3.1.x/host_network_interface_medium_type.rb +11 -0
  80. data/lib/virtualbox/com/interface/3.1.x/host_network_interface_status.rb +11 -0
  81. data/lib/virtualbox/com/interface/3.1.x/host_network_interface_type.rb +11 -0
  82. data/lib/virtualbox/com/interface/3.1.x/host_usb_device.rb +13 -0
  83. data/lib/virtualbox/com/interface/3.1.x/host_usb_device_filter.rb +13 -0
  84. data/lib/virtualbox/com/interface/3.1.x/hw_virt_ex_property_type.rb +11 -0
  85. data/lib/virtualbox/com/interface/3.1.x/machine.rb +105 -0
  86. data/lib/virtualbox/com/interface/3.1.x/machine_state.rb +14 -0
  87. data/lib/virtualbox/com/interface/3.1.x/medium.rb +50 -0
  88. data/lib/virtualbox/com/interface/3.1.x/medium_attachment.rb +18 -0
  89. data/lib/virtualbox/com/interface/3.1.x/medium_format.rb +18 -0
  90. data/lib/virtualbox/com/interface/3.1.x/medium_state.rb +11 -0
  91. data/lib/virtualbox/com/interface/3.1.x/medium_type.rb +11 -0
  92. data/lib/virtualbox/com/interface/3.1.x/medium_variant.rb +11 -0
  93. data/lib/virtualbox/com/interface/3.1.x/network_adapter.rb +30 -0
  94. data/lib/virtualbox/com/interface/3.1.x/network_adapter_type.rb +11 -0
  95. data/lib/virtualbox/com/interface/3.1.x/network_attachment_type.rb +11 -0
  96. data/lib/virtualbox/com/interface/3.1.x/nsiexception.rb +23 -0
  97. data/lib/virtualbox/com/interface/3.1.x/nsisupports.rb +15 -0
  98. data/lib/virtualbox/com/interface/3.1.x/parallel_port.rb +17 -0
  99. data/lib/virtualbox/com/interface/3.1.x/port_mode.rb +11 -0
  100. data/lib/virtualbox/com/interface/3.1.x/progress.rb +63 -0
  101. data/lib/virtualbox/com/interface/3.1.x/serial_port.rb +19 -0
  102. data/lib/virtualbox/com/interface/3.1.x/session.rb +18 -0
  103. data/lib/virtualbox/com/interface/3.1.x/session_state.rb +11 -0
  104. data/lib/virtualbox/com/interface/3.1.x/session_type.rb +11 -0
  105. data/lib/virtualbox/com/interface/3.1.x/shared_folder.rb +17 -0
  106. data/lib/virtualbox/com/interface/3.1.x/snapshot.rb +20 -0
  107. data/lib/virtualbox/com/interface/3.1.x/storage_bus.rb +11 -0
  108. data/lib/virtualbox/com/interface/3.1.x/storage_controller.rb +23 -0
  109. data/lib/virtualbox/com/interface/3.1.x/storage_controller_type.rb +11 -0
  110. data/lib/virtualbox/com/interface/3.1.x/system_properties.rb +37 -0
  111. data/lib/virtualbox/com/interface/3.1.x/usb_controller.rb +20 -0
  112. data/lib/virtualbox/com/interface/3.1.x/usb_device.rb +24 -0
  113. data/lib/virtualbox/com/interface/3.1.x/usb_device_filter.rb +23 -0
  114. data/lib/virtualbox/com/interface/3.1.x/usb_device_filter_action.rb +11 -0
  115. data/lib/virtualbox/com/interface/3.1.x/usb_device_state.rb +11 -0
  116. data/lib/virtualbox/com/interface/3.1.x/virtual_box_error_info.rb +17 -0
  117. data/lib/virtualbox/com/interface/3.1.x/virtual_system_description.rb +19 -0
  118. data/lib/virtualbox/com/interface/3.1.x/virtual_system_description_type.rb +14 -0
  119. data/lib/virtualbox/com/interface/3.1.x/virtual_system_description_value_type.rb +11 -0
  120. data/lib/virtualbox/com/interface/3.1.x/virtualbox.rb +67 -0
  121. data/lib/virtualbox/com/interface/3.1.x/vrdp_auth_type.rb +11 -0
  122. data/lib/virtualbox/com/interface/3.1.x/vrdp_server.rb +19 -0
  123. data/lib/virtualbox/com/interface/3.2.x/access_mode.rb +11 -0
  124. data/lib/virtualbox/com/interface/3.2.x/appliance.rb +22 -0
  125. data/lib/virtualbox/com/interface/3.2.x/audio_adapter.rb +15 -0
  126. data/lib/virtualbox/com/interface/3.2.x/audio_controller_type.rb +11 -0
  127. data/lib/virtualbox/com/interface/3.2.x/audio_driver_type.rb +11 -0
  128. data/lib/virtualbox/com/interface/3.2.x/bios_boot_menu_mode.rb +11 -0
  129. data/lib/virtualbox/com/interface/3.2.x/bios_settings.rb +21 -0
  130. data/lib/virtualbox/com/interface/3.2.x/clipboard_mode.rb +11 -0
  131. data/lib/virtualbox/com/interface/3.2.x/console.rb +50 -0
  132. data/lib/virtualbox/com/interface/3.2.x/cpu_property_type.rb +11 -0
  133. data/lib/virtualbox/com/interface/3.2.x/device_type.rb +11 -0
  134. data/lib/virtualbox/com/interface/3.2.x/dhcp_server.rb +22 -0
  135. data/lib/virtualbox/com/interface/3.2.x/firmware_type.rb +11 -0
  136. data/lib/virtualbox/com/interface/3.2.x/guest.rb +13 -0
  137. data/lib/virtualbox/com/interface/3.2.x/guest_os_type.rb +33 -0
  138. data/lib/virtualbox/com/interface/3.2.x/host.rb +43 -0
  139. data/lib/virtualbox/com/interface/3.2.x/host_network_interface.rb +30 -0
  140. data/lib/virtualbox/com/interface/3.2.x/host_network_interface_medium_type.rb +11 -0
  141. data/lib/virtualbox/com/interface/3.2.x/host_network_interface_status.rb +11 -0
  142. data/lib/virtualbox/com/interface/3.2.x/host_network_interface_type.rb +11 -0
  143. data/lib/virtualbox/com/interface/3.2.x/host_usb_device.rb +13 -0
  144. data/lib/virtualbox/com/interface/3.2.x/host_usb_device_filter.rb +13 -0
  145. data/lib/virtualbox/com/interface/3.2.x/hw_virt_ex_property_type.rb +11 -0
  146. data/lib/virtualbox/com/interface/3.2.x/keyboard_hid_type.rb +11 -0
  147. data/lib/virtualbox/com/interface/3.2.x/machine.rb +118 -0
  148. data/lib/virtualbox/com/interface/3.2.x/machine_state.rb +14 -0
  149. data/lib/virtualbox/com/interface/3.2.x/medium.rb +51 -0
  150. data/lib/virtualbox/com/interface/3.2.x/medium_attachment.rb +18 -0
  151. data/lib/virtualbox/com/interface/3.2.x/medium_format.rb +18 -0
  152. data/lib/virtualbox/com/interface/3.2.x/medium_state.rb +11 -0
  153. data/lib/virtualbox/com/interface/3.2.x/medium_type.rb +11 -0
  154. data/lib/virtualbox/com/interface/3.2.x/medium_variant.rb +11 -0
  155. data/lib/virtualbox/com/interface/3.2.x/nat_alias_mode.rb +11 -0
  156. data/lib/virtualbox/com/interface/3.2.x/nat_engine.rb +27 -0
  157. data/lib/virtualbox/com/interface/3.2.x/nat_protocol.rb +11 -0
  158. data/lib/virtualbox/com/interface/3.2.x/network_adapter.rb +34 -0
  159. data/lib/virtualbox/com/interface/3.2.x/network_adapter_type.rb +11 -0
  160. data/lib/virtualbox/com/interface/3.2.x/network_attachment_type.rb +11 -0
  161. data/lib/virtualbox/com/interface/3.2.x/nsiexception.rb +23 -0
  162. data/lib/virtualbox/com/interface/3.2.x/nsisupports.rb +15 -0
  163. data/lib/virtualbox/com/interface/3.2.x/parallel_port.rb +17 -0
  164. data/lib/virtualbox/com/interface/3.2.x/pointing_hid_type.rb +11 -0
  165. data/lib/virtualbox/com/interface/3.2.x/port_mode.rb +11 -0
  166. data/lib/virtualbox/com/interface/3.2.x/progress.rb +63 -0
  167. data/lib/virtualbox/com/interface/3.2.x/serial_port.rb +19 -0
  168. data/lib/virtualbox/com/interface/3.2.x/session.rb +18 -0
  169. data/lib/virtualbox/com/interface/3.2.x/session_state.rb +11 -0
  170. data/lib/virtualbox/com/interface/3.2.x/session_type.rb +11 -0
  171. data/lib/virtualbox/com/interface/3.2.x/shared_folder.rb +17 -0
  172. data/lib/virtualbox/com/interface/3.2.x/snapshot.rb +20 -0
  173. data/lib/virtualbox/com/interface/3.2.x/storage_bus.rb +11 -0
  174. data/lib/virtualbox/com/interface/3.2.x/storage_controller.rb +24 -0
  175. data/lib/virtualbox/com/interface/3.2.x/storage_controller_type.rb +11 -0
  176. data/lib/virtualbox/com/interface/3.2.x/system_properties.rb +42 -0
  177. data/lib/virtualbox/com/interface/3.2.x/usb_controller.rb +21 -0
  178. data/lib/virtualbox/com/interface/3.2.x/usb_device.rb +24 -0
  179. data/lib/virtualbox/com/interface/3.2.x/usb_device_filter.rb +23 -0
  180. data/lib/virtualbox/com/interface/3.2.x/usb_device_filter_action.rb +11 -0
  181. data/lib/virtualbox/com/interface/3.2.x/usb_device_state.rb +11 -0
  182. data/lib/virtualbox/com/interface/3.2.x/virtual_box_error_info.rb +17 -0
  183. data/lib/virtualbox/com/interface/3.2.x/virtual_system_description.rb +19 -0
  184. data/lib/virtualbox/com/interface/3.2.x/virtual_system_description_type.rb +14 -0
  185. data/lib/virtualbox/com/interface/3.2.x/virtual_system_description_value_type.rb +11 -0
  186. data/lib/virtualbox/com/interface/3.2.x/virtualbox.rb +67 -0
  187. data/lib/virtualbox/com/interface/3.2.x/vrdp_auth_type.rb +11 -0
  188. data/lib/virtualbox/com/interface/3.2.x/vrdp_server.rb +21 -0
  189. data/lib/virtualbox/com/mscom_interface.rb +44 -0
  190. data/lib/virtualbox/com/nil_interface.rb +7 -0
  191. data/lib/virtualbox/com/util.rb +32 -0
  192. data/lib/virtualbox/cpu.rb +61 -0
  193. data/lib/virtualbox/dhcp_server.rb +89 -0
  194. data/lib/virtualbox/dvd.rb +27 -0
  195. data/lib/virtualbox/exceptions.rb +39 -0
  196. data/lib/virtualbox/ext/byte_normalizer.rb +17 -0
  197. data/lib/virtualbox/ext/glob_loader.rb +22 -0
  198. data/lib/virtualbox/ext/logger.rb +38 -0
  199. data/lib/virtualbox/ext/platform.rb +27 -0
  200. data/lib/virtualbox/ext/subclass_listing.rb +24 -0
  201. data/lib/virtualbox/extra_data.rb +127 -0
  202. data/lib/virtualbox/forwarded_port.rb +222 -0
  203. data/lib/virtualbox/global.rb +102 -0
  204. data/lib/virtualbox/guest_property.rb +116 -0
  205. data/lib/virtualbox/hard_drive.rb +246 -0
  206. data/lib/virtualbox/host.rb +71 -0
  207. data/lib/virtualbox/host_network_interface.rb +137 -0
  208. data/lib/virtualbox/hw_virtualization.rb +63 -0
  209. data/lib/virtualbox/lib.rb +84 -0
  210. data/lib/virtualbox/media.rb +20 -0
  211. data/lib/virtualbox/medium.rb +145 -0
  212. data/lib/virtualbox/medium_attachment.rb +61 -0
  213. data/lib/virtualbox/nat_engine.rb +71 -0
  214. data/lib/virtualbox/nat_forwarded_port.rb +171 -0
  215. data/lib/virtualbox/network_adapter.rb +166 -0
  216. data/lib/virtualbox/proxies/collection.rb +57 -0
  217. data/lib/virtualbox/shared_folder.rb +220 -0
  218. data/lib/virtualbox/snapshot.rb +185 -0
  219. data/lib/virtualbox/storage_controller.rb +160 -0
  220. data/lib/virtualbox/system_properties.rb +74 -0
  221. data/lib/virtualbox/usb_controller.rb +59 -0
  222. data/lib/virtualbox/usb_device_filter.rb +74 -0
  223. data/lib/virtualbox/version.rb +36 -0
  224. data/lib/virtualbox/virtual_system_description.rb +47 -0
  225. data/lib/virtualbox/vm.rb +684 -0
  226. data/lib/virtualbox/vrdp_server.rb +59 -0
  227. data/test/test_helper.rb +18 -0
  228. data/test/virtualbox/abstract_model/attributable_test.rb +269 -0
  229. data/test/virtualbox/abstract_model/dirty_test.rb +83 -0
  230. data/test/virtualbox/abstract_model/interface_attributes_test.rb +194 -0
  231. data/test/virtualbox/abstract_model/relatable_test.rb +348 -0
  232. data/test/virtualbox/abstract_model/validatable_test.rb +308 -0
  233. data/test/virtualbox/abstract_model/version_matcher_test.rb +41 -0
  234. data/test/virtualbox/abstract_model_test.rb +462 -0
  235. data/test/virtualbox/appliance_test.rb +159 -0
  236. data/test/virtualbox/audio_adapter_test.rb +83 -0
  237. data/test/virtualbox/bios_test.rb +83 -0
  238. data/test/virtualbox/com/abstract_enum_test.rb +49 -0
  239. data/test/virtualbox/com/abstract_implementer_test.rb +40 -0
  240. data/test/virtualbox/com/abstract_interface_test.rb +140 -0
  241. data/test/virtualbox/com/ffi/interface_test.rb +249 -0
  242. data/test/virtualbox/com/ffi/util_test.rb +108 -0
  243. data/test/virtualbox/com/ffi_interface_test.rb +42 -0
  244. data/test/virtualbox/com/implementer/base_test.rb +38 -0
  245. data/test/virtualbox/com/implementer/ffi_test.rb +527 -0
  246. data/test/virtualbox/com/implementer/mscom_test.rb +247 -0
  247. data/test/virtualbox/com/mscom_interface_test.rb +17 -0
  248. data/test/virtualbox/com/util_test.rb +17 -0
  249. data/test/virtualbox/cpu_test.rb +103 -0
  250. data/test/virtualbox/dhcp_server_test.rb +165 -0
  251. data/test/virtualbox/dvd_test.rb +28 -0
  252. data/test/virtualbox/ext/byte_normalizer_test.rb +34 -0
  253. data/test/virtualbox/ext/platform_test.rb +50 -0
  254. data/test/virtualbox/ext/subclass_listing_test.rb +25 -0
  255. data/test/virtualbox/extra_data_test.rb +155 -0
  256. data/test/virtualbox/forwarded_port_test.rb +286 -0
  257. data/test/virtualbox/global_test.rb +46 -0
  258. data/test/virtualbox/hard_drive_test.rb +141 -0
  259. data/test/virtualbox/host_network_interface_test.rb +254 -0
  260. data/test/virtualbox/host_test.rb +94 -0
  261. data/test/virtualbox/hw_virtualization_test.rb +103 -0
  262. data/test/virtualbox/lib_test.rb +93 -0
  263. data/test/virtualbox/medium_attachment_test.rb +147 -0
  264. data/test/virtualbox/medium_test.rb +192 -0
  265. data/test/virtualbox/nat_engine_test.rb +106 -0
  266. data/test/virtualbox/nat_forwarded_port_test.rb +222 -0
  267. data/test/virtualbox/network_adapter_test.rb +191 -0
  268. data/test/virtualbox/proxies/collection_test.rb +102 -0
  269. data/test/virtualbox/shared_folder_test.rb +219 -0
  270. data/test/virtualbox/snapshot_test.rb +231 -0
  271. data/test/virtualbox/storage_controller_test.rb +197 -0
  272. data/test/virtualbox/system_properties_test.rb +87 -0
  273. data/test/virtualbox/usb_controller_test.rb +112 -0
  274. data/test/virtualbox/usb_device_filter_test.rb +93 -0
  275. data/test/virtualbox/version_test.rb +59 -0
  276. data/test/virtualbox/virtual_system_description_test.rb +61 -0
  277. data/test/virtualbox/vm_test.rb +637 -0
  278. data/test/virtualbox/vrdp_server_test.rb +83 -0
  279. data/test/virtualbox_test.rb +11 -0
  280. data/virtualbox.gemspec +25 -0
  281. metadata +397 -0
@@ -0,0 +1,159 @@
1
+ require File.expand_path("../../test_helper", __FILE__)
2
+
3
+ class ApplianceTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = VirtualBox::Appliance
6
+ @interface = mock("interface")
7
+ @parent = mock("parent")
8
+ @path = "foo.rb"
9
+
10
+ @appliance = mock("appliance")
11
+ @virtualbox = mock("virtualbox")
12
+ @lib = mock("lib")
13
+ VirtualBox::Lib.stubs(:lib).returns(@lib)
14
+ @lib.stubs(:virtualbox).returns(@virtualbox)
15
+ @virtualbox.stubs(:create_appliance).returns(@appliance)
16
+ end
17
+
18
+ context "class methods" do
19
+
20
+ end
21
+
22
+ context "initializing" do
23
+ should "load interface attribtues" do
24
+ @klass.any_instance.expects(:initialize_from_path).with(@path).once
25
+ @klass.new(@path)
26
+ end
27
+
28
+ context "initializing from path" do
29
+ setup do
30
+ @progress = mock("progress")
31
+ @appliance.stubs(:read).returns(@progress)
32
+ @appliance.stubs(:interpret)
33
+ @appliance.stubs(:virtual_system_descriptions)
34
+ @progress.stubs(:wait_for_completion)
35
+
36
+ @klass.any_instance.stubs(:populate_relationship)
37
+ @klass.any_instance.stubs(:load_interface_attributes)
38
+ end
39
+
40
+ should "write the interface as the appliance" do
41
+ instance = @klass.new(@path)
42
+ assert_equal @appliance, instance.interface
43
+ end
44
+
45
+ should "mark as an existing record" do
46
+ instance = @klass.new(@path)
47
+ assert !instance.new_record?
48
+ end
49
+
50
+ should "read the appliance then interpret it" do
51
+ init_seq = sequence("init")
52
+ @appliance.expects(:read).with(@path).once.returns(@progress).in_sequence(init_seq)
53
+ @progress.expects(:wait_for_completion).with(-1).in_sequence(init_seq)
54
+ @appliance.expects(:interpret).once.in_sequence(init_seq)
55
+ @klass.any_instance.expects(:load_interface_attributes).with(@appliance).once.in_sequence(init_seq)
56
+
57
+ @klass.new(@path)
58
+ end
59
+ end
60
+
61
+ context "initialize without path" do
62
+ setup do
63
+ @instance = @klass.new
64
+ end
65
+
66
+ should "write the interface as the appliance" do
67
+ assert_equal @appliance, @instance.interface
68
+ end
69
+
70
+ should "be new record" do
71
+ assert @instance.new_record?
72
+ end
73
+
74
+ should "not be dirty" do
75
+ assert !@instance.changed?
76
+ end
77
+ end
78
+ end
79
+
80
+ context "instance methods" do
81
+ setup do
82
+ @klass.any_instance.stubs(:initialize_from_path)
83
+ @instance = @klass.new(@path)
84
+ @instance.stubs(:interface).returns(@interface)
85
+ end
86
+
87
+ context "importing" do
88
+ setup do
89
+ @progress = mock("progress")
90
+
91
+ @interface.stubs(:import_machines).returns(@progress)
92
+ end
93
+
94
+ should "call import on interface and wait for completion" do
95
+ @interface.expects(:import_machines).returns(@progress)
96
+ @progress.expects(:wait)
97
+
98
+ @instance.import
99
+ end
100
+
101
+ should "call wait with block given" do
102
+ proc = mock("proc")
103
+ @progress.expects(:wait).yields(proc)
104
+ proc.expects(:call)
105
+
106
+ @instance.import do |proc|
107
+ proc.call
108
+ end
109
+ end
110
+ end
111
+
112
+ context "exporting" do
113
+ setup do
114
+ @progress = mock("progress")
115
+
116
+ @instance.path = :foo
117
+ @interface.stubs(:write).returns(@progress)
118
+ end
119
+
120
+ should "call write on interface and wait for completion" do
121
+ @interface.expects(:write).with("ovf-1.0", @instance.path).once.returns(@progress)
122
+ @progress.expects(:wait)
123
+
124
+ @instance.export
125
+ end
126
+
127
+ should "call wait with block given" do
128
+ proc = mock("proc")
129
+ @progress.expects(:wait).yields(proc)
130
+ proc.expects(:call)
131
+
132
+ @instance.export do |proc|
133
+ proc.call
134
+ end
135
+ end
136
+ end
137
+
138
+ context "adding a machine" do
139
+ setup do
140
+ @machine = mock("machine")
141
+ @machine_interface = mock("machine_interface")
142
+ @machine.stubs(:interface).returns(@machine_interface)
143
+ @machine_interface.stubs(:export)
144
+ end
145
+
146
+ should "call export on the VM interface with the appliance" do
147
+ @machine_interface.expects(:export).with(@interface).once
148
+ @instance.add_machine(@machine)
149
+ end
150
+
151
+ should "add to the description for each option given" do
152
+ sys = mock("sys")
153
+ @machine_interface.expects(:export).with(@interface).once.returns(sys)
154
+ sys.expects(:add_description).with(:foo, :bar, :bar)
155
+ @instance.add_machine(@machine, { :foo => :bar })
156
+ end
157
+ end
158
+ end
159
+ end
@@ -0,0 +1,83 @@
1
+ require File.expand_path("../../test_helper", __FILE__)
2
+
3
+ class AudioAdapterTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = VirtualBox::AudioAdapter
6
+ @interface = mock("interface")
7
+ @parent = mock("parent")
8
+ end
9
+
10
+ context "class methods" do
11
+ context "populating relationship" do
12
+ setup do
13
+ @instance = mock("instance")
14
+ @klass.stubs(:new).returns(@instance)
15
+
16
+ @audio_adapter = mock("audio_adapter")
17
+ @interface.stubs(:audio_adapter).returns(@audio_adapter)
18
+ end
19
+
20
+ should "call new for the interface" do
21
+ @klass.expects(:new).with(nil, @audio_adapter).once.returns(@instance)
22
+ assert_equal @instance, @klass.populate_relationship(nil, @interface)
23
+ end
24
+ end
25
+
26
+ context "saving relationship" do
27
+ should "call save with the interface on the instance" do
28
+ instance = mock("instance")
29
+ instance.expects(:save).once
30
+
31
+ @klass.save_relationship(nil, instance)
32
+ end
33
+ end
34
+ end
35
+
36
+ context "initializing" do
37
+ setup do
38
+ @klass.any_instance.stubs(:load_interface_attributes)
39
+ end
40
+
41
+ should "load interface attribtues" do
42
+ @klass.any_instance.expects(:load_interface_attributes).with(@interface).once
43
+ @klass.new(@parent, @interface)
44
+ end
45
+
46
+ should "not be dirty" do
47
+ @instance = @klass.new(@parent, @interface)
48
+ assert !@instance.changed?
49
+ end
50
+
51
+ should "be existing record" do
52
+ @instance = @klass.new(@parent, @interface)
53
+ assert !@instance.new_record?
54
+ end
55
+ end
56
+
57
+ context "instance methods" do
58
+ setup do
59
+ @klass.any_instance.stubs(:load_interface_attributes)
60
+
61
+ @parent = mock("parent")
62
+ @interface = mock("interface")
63
+ @instance = @klass.new(@parent, @interface)
64
+ end
65
+
66
+ context "saving" do
67
+ setup do
68
+ @audio_adapter = mock("audio_adapter")
69
+ @session = mock("session")
70
+ @machine = mock("machine")
71
+ @machine.stubs(:audio_adapter).returns(@audio_adapter)
72
+ @session.stubs(:machine).returns(@machine)
73
+ @parent.stubs(:with_open_session).yields(@session)
74
+ end
75
+
76
+ should "save the interface settings with the new bios settings" do
77
+ save_seq = sequence("save_seq")
78
+ @instance.expects(:save_changed_interface_attributes).with(@audio_adapter).once.in_sequence(save_seq)
79
+ @instance.save
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,83 @@
1
+ require File.expand_path("../../test_helper", __FILE__)
2
+
3
+ class BIOSTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = VirtualBox::BIOS
6
+ @interface = mock("interface")
7
+ @parent = mock("parent")
8
+ end
9
+
10
+ context "class methods" do
11
+ context "populating relationship" do
12
+ setup do
13
+ @instance = mock("instance")
14
+ @klass.stubs(:new).returns(@instance)
15
+
16
+ @bios_settings = mock("bios_settings")
17
+ @interface.stubs(:bios_settings).returns(@bios_settings)
18
+ end
19
+
20
+ should "call new for the interface" do
21
+ @klass.expects(:new).with(nil, @bios_settings).once.returns(@instance)
22
+ assert_equal @instance, @klass.populate_relationship(nil, @interface)
23
+ end
24
+ end
25
+
26
+ context "saving relationship" do
27
+ should "call save with the interface on the instance" do
28
+ instance = mock("instance")
29
+ instance.expects(:save).once
30
+
31
+ @klass.save_relationship(nil, instance)
32
+ end
33
+ end
34
+ end
35
+
36
+ context "initializing" do
37
+ setup do
38
+ @klass.any_instance.stubs(:load_interface_attributes)
39
+ end
40
+
41
+ should "load interface attribtues" do
42
+ @klass.any_instance.expects(:load_interface_attributes).with(@interface).once
43
+ @klass.new(@parent, @interface)
44
+ end
45
+
46
+ should "not be dirty" do
47
+ @instance = @klass.new(@parent, @interface)
48
+ assert !@instance.changed?
49
+ end
50
+
51
+ should "be existing record" do
52
+ @instance = @klass.new(@parent, @interface)
53
+ assert !@instance.new_record?
54
+ end
55
+ end
56
+
57
+ context "instance methods" do
58
+ setup do
59
+ @klass.any_instance.stubs(:load_interface_attributes)
60
+
61
+ @parent = mock("parent")
62
+ @interface = mock("interface")
63
+ @instance = @klass.new(@parent, @interface)
64
+ end
65
+
66
+ context "saving" do
67
+ setup do
68
+ @bios_settings = mock("bios_settings")
69
+ @session = mock("session")
70
+ @machine = mock("machine")
71
+ @machine.stubs(:bios_settings).returns(@bios_settings)
72
+ @session.stubs(:machine).returns(@machine)
73
+ @parent.stubs(:with_open_session).yields(@session)
74
+ end
75
+
76
+ should "save the interface settings with the new bios settings" do
77
+ save_seq = sequence("save_seq")
78
+ @instance.expects(:save_changed_interface_attributes).with(@bios_settings).once.in_sequence(save_seq)
79
+ @instance.save
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,49 @@
1
+ require File.expand_path("../../../test_helper", __FILE__)
2
+
3
+ class COMAbstractEnumTest < Test::Unit::TestCase
4
+ context "setting up the map" do
5
+ setup do
6
+ @enum = VirtualBox::COM::AbstractEnum
7
+ @enum.reset!
8
+ end
9
+
10
+ should "set the map up and be able to access it" do
11
+ @enum.map([:a, :b, :c])
12
+ assert_equal :a, @enum[0]
13
+ assert_equal :b, @enum[1]
14
+ assert_equal :c, @enum[2]
15
+ assert_equal [:a, :b, :c], @enum.map
16
+ end
17
+
18
+ should "do the reverse mapping of value to index" do
19
+ @enum.map([:a, :b, :c])
20
+ assert_equal 1, @enum.index(:b)
21
+ end
22
+
23
+ should "reset the map if another is given" do
24
+ @enum.map([:a])
25
+ @enum.map([:b])
26
+ assert_equal :b, @enum[0]
27
+ end
28
+
29
+ should "allow iterating over the enum" do
30
+ array = [:a, :b, :c]
31
+ other_array = []
32
+ @enum.map(array)
33
+ @enum.each do |item|
34
+ other_array << item
35
+ end
36
+
37
+ assert_equal array, other_array
38
+ end
39
+
40
+ should "include enumerable methods" do
41
+ array = [:a, :b, :c]
42
+ @enum.map(array)
43
+
44
+ @enum.each_with_index do |object, index|
45
+ assert_equal array[index], object
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,40 @@
1
+ require File.expand_path("../../../test_helper", __FILE__)
2
+
3
+ class AbstractImplementerTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = VirtualBox::COM::AbstractImplementer
6
+ @interface = mock("interface")
7
+ @lib = mock("lib")
8
+ end
9
+
10
+ context "initialization" do
11
+ should "make the interface accessible" do
12
+ instance = @klass.new(@interface, @lib)
13
+ assert_equal @interface, instance.interface
14
+ end
15
+ end
16
+
17
+ context "base methods" do
18
+ setup do
19
+ @instance = @klass.new(@interface, @lib)
20
+ end
21
+
22
+ should "implement the read_property function" do
23
+ assert_nothing_raised {
24
+ @instance.read_property(:foo, :bar)
25
+ }
26
+ end
27
+
28
+ should "implement the write_property function" do
29
+ assert_nothing_raised {
30
+ @instance.write_property(:foo, :bar, :opts)
31
+ }
32
+ end
33
+
34
+ should "implement the call_function function" do
35
+ assert_nothing_raised {
36
+ @instance.call_function(:foo, [], :opts)
37
+ }
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,140 @@
1
+ require File.expand_path("../../../test_helper", __FILE__)
2
+
3
+ class AbstractInterfaceTest < Test::Unit::TestCase
4
+ class EmptyAITest < VirtualBox::COM::AbstractInterface
5
+ end
6
+
7
+ class BasicAITest < EmptyAITest
8
+ function :foo, :int, []
9
+ function :foo2, :int, []
10
+ property :bar, :int
11
+ property :bar2, :int
12
+ property :bar3, :int
13
+ end
14
+
15
+ setup do
16
+ @impl_instance = mock("impl_instance")
17
+ @impl = mock("implementer")
18
+ @impl.stubs(:new).returns(@impl_instance)
19
+ end
20
+
21
+ context "class methods" do
22
+ context "without any members defined" do
23
+ setup do
24
+ @klass = EmptyAITest
25
+ @klass.members.clear
26
+
27
+ @klass.stubs(:define_method)
28
+ end
29
+
30
+ should "put defined functions in the members hash" do
31
+ assert_nil @klass.member(:foo)
32
+ @klass.function(:foo, :int, :bar)
33
+ assert @klass.member(:foo)
34
+ end
35
+
36
+ should "define an method for functions" do
37
+ @klass.expects(:define_method).with(:foo)
38
+ @klass.function(:foo, :int, :bar)
39
+ end
40
+
41
+ should "put defined properties in the members hash" do
42
+ assert_nil @klass.member(:foo)
43
+ @klass.property(:foo, :bar)
44
+ assert @klass.member(:foo)
45
+ end
46
+
47
+ should "create methods for reading and writing properties" do
48
+ @klass.expects(:define_method).with(:foo).once
49
+ @klass.expects(:define_method).with(:foo=).once
50
+ @klass.property(:foo, :bar)
51
+ end
52
+
53
+ should "not creating writing method for property if its readonly" do
54
+ @klass.expects(:define_method).with(:foo=).never
55
+ @klass.property(:foo, :bar, :readonly => true)
56
+ end
57
+ end
58
+
59
+ context "with members defined" do
60
+ setup do
61
+ @klass = BasicAITest
62
+ end
63
+
64
+ should "return the properties in order" do
65
+ properties = @klass.properties
66
+ properties.collect! { |prop| prop[0] }
67
+
68
+ assert_equal [:bar, :bar2, :bar3], properties
69
+ end
70
+
71
+ should "return the functions in order" do
72
+ funcs = @klass.functions
73
+ funcs.collect! { |func| func[0] }
74
+
75
+ assert_equal [:foo, :foo2], funcs
76
+ end
77
+ end
78
+ end
79
+
80
+ context "initialization" do
81
+ should "instantiate the implementer" do
82
+ @impl.expects(:new).with() do |interface, extra|
83
+ assert interface.is_a?(VirtualBox::COM::AbstractInterface)
84
+ assert_equal :foo, extra
85
+ true
86
+ end
87
+
88
+ BasicAITest.new(@impl, :foo)
89
+ end
90
+ end
91
+
92
+ context "instance methods" do
93
+ setup do
94
+ @lib = VirtualBox::COM::NilInterface.new
95
+ @interface = BasicAITest.new(@impl, @lib)
96
+ end
97
+
98
+ context "checking for property existence" do
99
+ should "return true for existing properties" do
100
+ assert @interface.has_property?(:bar)
101
+ end
102
+
103
+ should "return false non-existent properties and methods" do
104
+ assert !@interface.has_property?(:foo)
105
+ end
106
+ end
107
+
108
+ context "checking for function existence" do
109
+ should "return true for existing functions" do
110
+ assert @interface.has_function?(:foo)
111
+ end
112
+
113
+ should "return false non-existent function and properties" do
114
+ assert !@interface.has_function?(:bar)
115
+ end
116
+ end
117
+
118
+ context "reading a property" do
119
+ should "call read property on the implementer and return result" do
120
+ result = mock("result")
121
+ @impl_instance.expects(:read_property).with(:bar, anything).returns(result)
122
+ assert_equal result, @interface.bar
123
+ end
124
+ end
125
+
126
+ context "calling a function" do
127
+ should "call the call function method on the implementer and return result" do
128
+ result = mock("result")
129
+ @impl_instance.expects(:call_function).with(:foo, [1, 2, 3], anything).returns(result)
130
+ assert_equal result, @interface.foo(1, 2, 3)
131
+ end
132
+ end
133
+
134
+ context "inspecting" do
135
+ should "be just the class name" do
136
+ assert_equal "#<AbstractInterfaceTest::BasicAITest>", @interface.inspect
137
+ end
138
+ end
139
+ end
140
+ end