build-tool 0.5.7 → 0.6.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (133) hide show
  1. data/.gitignore +1 -0
  2. data/.rvmrc +1 -0
  3. data/.yardopts +1 -0
  4. data/Gemfile +5 -0
  5. data/Gemfile.lock +56 -0
  6. data/History.txt +64 -0
  7. data/README.txt +0 -7
  8. data/Rakefile +8 -56
  9. data/bin/build-tool +4 -1
  10. data/build-tool.gemspec +62 -0
  11. data/db/migrations/20110703074000_add_command_logs.rb +17 -0
  12. data/db/migrations/20110703075000_add_module_logs.rb +20 -0
  13. data/db/migrations/20110815170000_add_features.rb +17 -0
  14. data/db/migrations/20120103204700_add_modules.rb +17 -0
  15. data/db/migrations/20120106181200_add_settings.rb +18 -0
  16. data/lib/build-tool.rb +3 -4
  17. data/lib/build-tool/application.rb +127 -37
  18. data/lib/build-tool/build-system/autoconf.rb +2 -8
  19. data/lib/build-tool/build-system/base.rb +12 -4
  20. data/lib/build-tool/build-system/cmake.rb +2 -0
  21. data/lib/build-tool/build-system/custom.rb +2 -0
  22. data/lib/build-tool/build-system/kdel10n.rb +2 -0
  23. data/lib/build-tool/build-system/make.rb +2 -0
  24. data/lib/build-tool/build-system/none.rb +2 -0
  25. data/lib/build-tool/build-system/qmake.rb +2 -0
  26. data/lib/build-tool/build-system/qt.rb +4 -0
  27. data/lib/build-tool/cfg/lexer.rex +40 -8
  28. data/lib/build-tool/cfg/lexer_base.rb +3 -1
  29. data/lib/build-tool/cfg/node.rb +17 -1
  30. data/lib/build-tool/cfg/parser.y +92 -10
  31. data/lib/build-tool/cfg/visitor.rb +202 -78
  32. data/lib/build-tool/command_actions.rb +26 -10
  33. data/lib/build-tool/commands.rb +289 -197
  34. data/lib/build-tool/commands/build.rb +13 -9
  35. data/lib/build-tool/commands/configuration.rb +25 -0
  36. data/lib/build-tool/commands/configuration/edit.rb +42 -0
  37. data/lib/build-tool/commands/configuration/list.rb +48 -0
  38. data/lib/build-tool/commands/configure.rb +9 -5
  39. data/lib/build-tool/commands/ctags.rb +8 -3
  40. data/lib/build-tool/commands/environments.rb +2 -4
  41. data/lib/build-tool/commands/environments/list.rb +13 -10
  42. data/lib/build-tool/commands/environments/set.rb +5 -1
  43. data/lib/build-tool/commands/features.rb +24 -0
  44. data/lib/build-tool/commands/features/disable.rb +70 -0
  45. data/lib/build-tool/commands/features/enable.rb +66 -0
  46. data/lib/build-tool/commands/features/list.rb +92 -0
  47. data/lib/build-tool/commands/fetch.rb +9 -3
  48. data/lib/build-tool/commands/files.rb +9 -5
  49. data/lib/build-tool/commands/gc.rb +48 -15
  50. data/lib/build-tool/commands/history.rb +21 -16
  51. data/lib/build-tool/commands/info.rb +16 -13
  52. data/lib/build-tool/commands/install.rb +8 -4
  53. data/lib/build-tool/commands/modules.rb +2 -4
  54. data/lib/build-tool/commands/modules/cleanup.rb +52 -0
  55. data/lib/build-tool/commands/modules/disable.rb +95 -0
  56. data/lib/build-tool/commands/modules/enable.rb +52 -0
  57. data/lib/build-tool/commands/modules/info.rb +44 -35
  58. data/lib/build-tool/commands/modules/list.rb +67 -15
  59. data/lib/build-tool/commands/modules/shell.rb +8 -2
  60. data/lib/build-tool/commands/rebase.rb +15 -7
  61. data/lib/build-tool/commands/recipes.rb +2 -4
  62. data/lib/build-tool/commands/recipes/add.rb +16 -2
  63. data/lib/build-tool/commands/recipes/edit.rb +72 -0
  64. data/lib/build-tool/commands/recipes/incoming.rb +11 -7
  65. data/lib/build-tool/commands/recipes/info.rb +12 -8
  66. data/lib/build-tool/commands/recipes/install.rb +37 -42
  67. data/lib/build-tool/commands/recipes/list.rb +6 -2
  68. data/lib/build-tool/configuration.rb +88 -3
  69. data/lib/build-tool/environment.rb +2 -0
  70. data/lib/build-tool/errors.rb +5 -0
  71. data/lib/build-tool/history.rb +3 -181
  72. data/lib/build-tool/model/command_log.rb +93 -0
  73. data/lib/build-tool/model/feature.rb +80 -0
  74. data/lib/build-tool/{module.rb → model/module.rb} +110 -29
  75. data/lib/build-tool/model/module_log.rb +64 -0
  76. data/lib/build-tool/model/setting.rb +84 -0
  77. data/lib/build-tool/recipe.rb +40 -18
  78. data/lib/build-tool/repository.rb +39 -33
  79. data/lib/build-tool/server.rb +27 -3
  80. data/lib/build-tool/singleton.rb +2 -0
  81. data/lib/build-tool/sshkey.rb +2 -0
  82. data/lib/build-tool/state_helper.rb +64 -0
  83. data/lib/build-tool/vcs/archive.rb +3 -1
  84. data/lib/build-tool/vcs/base.rb +13 -0
  85. data/lib/build-tool/vcs/git-svn.rb +36 -14
  86. data/lib/build-tool/vcs/git.rb +180 -44
  87. data/lib/build-tool/vcs/mercurial.rb +25 -13
  88. data/lib/build-tool/vcs/svn.rb +20 -15
  89. data/lib/build-tool/version.rb +30 -0
  90. data/lib/mj/error.rb +2 -0
  91. data/lib/mj/logging.rb +2 -0
  92. data/lib/mj/mixins/inherited_attributes.rb +73 -0
  93. data/lib/mj/tools/editor.rb +34 -0
  94. data/lib/mj/tools/ssh.rb +2 -0
  95. data/lib/mj/tools/subprocess.rb +2 -1
  96. data/lib/mj/vcs/git.rb +14 -2
  97. data/lib/mj/visitor.rb +22 -0
  98. data/tasks/db.rake +36 -0
  99. data/tasks/racc.rake +14 -0
  100. data/tasks/rdoc.rake +8 -0
  101. data/tasks/rexical.rake +14 -0
  102. data/tasks/test.rake +21 -0
  103. data/test/integration/history_test.rb +88 -0
  104. data/test/integration/parser_configuration.rb +36 -0
  105. data/test/integration/parser_environment_parser.rb +156 -0
  106. data/test/integration/parser_feature_test.rb +75 -0
  107. data/test/integration/parser_git-svn_test.rb +92 -0
  108. data/test/integration/parser_git_test.rb +97 -0
  109. data/test/integration/parser_mercurial_test.rb +77 -0
  110. data/test/integration/parser_module_test.rb +103 -0
  111. data/test/integration/parser_svn_test.rb +92 -0
  112. data/test/integration/parser_test.rb +73 -0
  113. data/test/test_helper.rb +61 -0
  114. data/test/unit/configuration_test.rb +36 -0
  115. data/test/unit/git_configuration_test.rb +163 -0
  116. data/test/unit/git_svn_configuration_test.rb +240 -0
  117. data/test/unit/mercurial_configuration_test.rb +64 -0
  118. data/test/unit/model/command_log_test.rb +103 -0
  119. data/test/unit/model/feature_test.rb +29 -0
  120. data/test/unit/model/module_log_test.rb +70 -0
  121. data/test/unit/model/module_test.rb +32 -0
  122. data/test/unit/repository_test.rb +110 -0
  123. data/test/unit/server_test.rb +66 -0
  124. data/test/unit/svn_configuration_test.rb +90 -0
  125. metadata +134 -93
  126. data/Manifest.txt +0 -80
  127. data/db/migrations/001_command_histories.rb +0 -20
  128. data/db/migrations/002_module_events.rb +0 -24
  129. data/db/migrations/003_command_histories_add_logfile.rb +0 -19
  130. data/lib/build-tool/GUI.rb +0 -360
  131. data/lib/build-tool/commands/help.rb +0 -22
  132. data/lib/build-tool/commands/lsfeatures.rb +0 -76
  133. data/lib/build-tool/feature.rb +0 -47
@@ -0,0 +1,103 @@
1
+ require 'test_helper'
2
+
3
+ setup_database()
4
+
5
+ require 'build-tool/cfg/parser'
6
+
7
+ class ParserModuleTest < ActiveSupport::TestCase
8
+
9
+ def setup
10
+ @configuration = BuildTool::Configuration.new()
11
+ @configuration.truncate()
12
+ @parser = BuildTool::Cfg::Parser.new( @configuration )
13
+ @localparser = BuildTool::Cfg::Parser.new( @configuration, false )
14
+ end
15
+
16
+ test 'Parses a valid module declaration' do
17
+ assert_nothing_raised() { @parser.parse_string <<-EOF }
18
+ module "test_default"
19
+ end
20
+ module "test_disabled"
21
+ end
22
+ disable module "test_disabled"
23
+ EOF
24
+ # Now check the parsed configuration
25
+ assert( @configuration.module( 'test_default' ).default_active? )
26
+ assert( @configuration.module( 'test_default' ).active? )
27
+ assert( !@configuration.module( 'test_disabled' ).default_active? )
28
+ assert( !@configuration.module( 'test_disabled' ).active? )
29
+
30
+ # Parse a local config file
31
+ @localparser.parse_string <<-EOF
32
+ disable module "test_default"
33
+ enable module "test_disabled"
34
+ EOF
35
+
36
+ # Now check the parsed configuration
37
+ assert( !@configuration.module( 'test_default' ).active? )
38
+ assert( @configuration.module( 'test_disabled' ).active? )
39
+ # But the defaults are the same
40
+ assert( @configuration.module( 'test_default' ).default_active? )
41
+ assert( !@configuration.module( 'test_disabled' ).default_active? )
42
+ @configuration.save()
43
+ end
44
+
45
+ test 'Parses all values' do
46
+ assert_nothing_raised() { @parser.parse_string <<-EOF }
47
+ module "test_default"
48
+ description "Default is a test module"
49
+ long description "It really is"
50
+ end
51
+ EOF
52
+ # Now check the parsed configuration
53
+ assert( @configuration.module( 'test_default' ) )
54
+ mod = @configuration.module( 'test_default' )
55
+ assert_equal( mod.description, 'Default is a test module' )
56
+ assert_equal( mod.long_description, 'It really is' )
57
+
58
+ # Parse a local config file
59
+ @localparser.parse_string <<-EOF
60
+ module "test_default"
61
+ long description """Multi line comment
62
+ works"""
63
+ end
64
+ EOF
65
+
66
+ mod = @configuration.module( 'test_default' )
67
+ assert_equal( 'Default is a test module', mod.description )
68
+ assert_equal( "Multi line comment\nworks", mod.long_description )
69
+ end
70
+
71
+ test 'Keeps settings over reloads' do
72
+ assert_nothing_raised() { @parser.parse_string <<-EOF }
73
+ module "test_default"
74
+ end
75
+ module "test_disabled"
76
+ end
77
+ disable module "test_disabled"
78
+ EOF
79
+ @configuration.module( 'test_disabled' ).active = true
80
+ @configuration.module( 'test_default' ).active = false
81
+ @configuration.save()
82
+
83
+ @configuration = BuildTool::Configuration.new()
84
+ @configuration.load()
85
+ @parser = BuildTool::Cfg::Parser.new( @configuration )
86
+ @localparser = BuildTool::Cfg::Parser.new( @configuration, false )
87
+ assert_nothing_raised() { @parser.parse_string <<-EOF }
88
+ module "base"
89
+ end
90
+ module "test_default" < "base"
91
+ end
92
+ module "test_disabled"
93
+ end
94
+ disable module "test_disabled"
95
+ EOF
96
+
97
+ # Now check the parsed configuration.
98
+ assert( !@configuration.module( 'test_default' ).active? )
99
+ assert( @configuration.module( 'test_disabled' ).active? )
100
+
101
+ end
102
+
103
+ end # class TestParserModuleTest
@@ -0,0 +1,92 @@
1
+ require 'test_helper'
2
+
3
+ setup_database()
4
+
5
+ require 'build-tool/cfg/parser'
6
+
7
+ class TestParserSvn < ActiveSupport::TestCase
8
+
9
+ def setup
10
+ @configuration = BuildTool::Configuration.new()
11
+ @configuration.truncate()
12
+ @parser = BuildTool::Cfg::Parser.new( @configuration )
13
+ end
14
+
15
+ test "Parses a valid svn repository declation." do
16
+ @configuration.add_server( BuildTool::Server.new( 'svn.kde.org', 'svn://anonsvn.kde.org/home/kde' ) )
17
+ @configuration.add_repository( BuildTool::Repository.new( 'kde' ) )
18
+ @configuration.repository( 'kde' ).server = @configuration.server( 'svn.kde.org' )
19
+ assert_nothing_raised() { @parser.parse_string <<-EOF }
20
+ module "oxygen-icons"
21
+ vcs svn
22
+ remote-path "kdesupport/oxygen"
23
+ use repository "kde"
24
+ end # vcs
25
+ end # module
26
+ EOF
27
+ # Now check the parsed configuration
28
+ assert_not_nil( @configuration.module('oxygen-icons') )
29
+ assert_attributes(
30
+ @configuration.module('oxygen-icons'),
31
+ {
32
+ :vcs =>
33
+ {
34
+ :name => 'svn',
35
+ :config =>
36
+ {
37
+ :repository =>
38
+ {
39
+ :name => 'kde',
40
+ :url => 'svn://anonsvn.kde.org/home/kde'
41
+ },
42
+ :remote_path => "kdesupport/oxygen"
43
+ }
44
+ }
45
+
46
+ }
47
+ )
48
+ end
49
+
50
+ test "SVN Repository inheritance works." do
51
+ @configuration.add_server( BuildTool::Server.new( 'svn.kde.org', 'svn://anonsvn.kde.org/home/kde' ) )
52
+ @configuration.add_repository( BuildTool::Repository.new( 'kde' ) )
53
+ @configuration.repository( 'kde' ).server = @configuration.server( 'svn.kde.org' )
54
+ assert_nothing_raised() { @parser.parse_string <<-EOF }
55
+ module "oxygen-icons"
56
+ vcs svn
57
+ remote-path "kdesupport/oxygen"
58
+ use repository "kde"
59
+ end # vcs
60
+ end # module
61
+ module "oxygen-icons"
62
+ vcs svn <
63
+ remote-path "kdesupport/oxygen-neu"
64
+ end # vcs
65
+ end # module
66
+ EOF
67
+ # Now check the parsed configuration
68
+ assert_not_nil( @configuration.module('oxygen-icons') )
69
+ assert_attributes(
70
+ @configuration.module('oxygen-icons'),
71
+ {
72
+ :vcs =>
73
+ {
74
+ :name => 'svn',
75
+ :config =>
76
+ {
77
+ :repository =>
78
+ {
79
+ :name => 'kde',
80
+ :url => 'svn://anonsvn.kde.org/home/kde'
81
+ },
82
+ :remote_path => "kdesupport/oxygen-neu"
83
+ }
84
+ }
85
+
86
+ }
87
+ )
88
+ end
89
+
90
+ end
91
+
92
+
@@ -0,0 +1,73 @@
1
+ require 'test_helper'
2
+
3
+ setup_database()
4
+
5
+ require 'build-tool/cfg/parser'
6
+
7
+ class TestParser < ActiveSupport::TestCase
8
+
9
+ def setup
10
+ @configuration = BuildTool::Configuration.new()
11
+ @configuration.truncate()
12
+ @parser = BuildTool::Cfg::Parser.new( @configuration )
13
+ end
14
+
15
+ test "Parser parses a empty string" do
16
+ assert_nothing_raised() { @parser.parse_string( "" ) }
17
+ end
18
+
19
+ test "Parser throws an exception on invalid input" do
20
+ assert_raise(BuildTool::ParseError) do @parser.parse_string( "this is really invalid text" ) end
21
+ end
22
+
23
+ test "Parses a valid recipe" do
24
+ assert_nothing_raised() { @parser.parse_string <<-EOF }
25
+ log-directory "$HOME/test/log"
26
+
27
+ module "test"
28
+ build-prefix "/home/mjansen/test"
29
+ install-prefix "/tst"
30
+ end
31
+ EOF
32
+ # Now check the parsed configuration
33
+ test = @configuration.module('test')
34
+ assert_not_nil( @configuration.module('test'), 'There is a module named "test".' )
35
+ assert( test.active?, 'The module is active.' )
36
+ assert_nil( test.parent, 'The module has no parent.' )
37
+ assert_equal(
38
+ Pathname.new( '/home/mjansen/test' ),
39
+ test.build_prefix,
40
+ 'The build prefix is correctly set.' )
41
+ assert_equal(
42
+ Pathname.new( '/home/mjansen/test/bld/test' ),
43
+ test.build_directory,
44
+ 'The build directory is correctly set' )
45
+ end
46
+
47
+ test "Parses a valid recipe with module inheritance" do
48
+ assert_nothing_raised() { @parser.parse_string <<-EOF }
49
+ log-directory "$HOME/test/log"
50
+
51
+ module "base"
52
+ build-prefix "/home/mjansen/test"
53
+ install-prefix "/tst"
54
+ end
55
+ module "test_inherit" < "base"
56
+ end
57
+ EOF
58
+ # Now check the parsed configuration
59
+ test = @configuration.module('test_inherit')
60
+ assert_not_nil( test, 'There is a module named "test".' )
61
+ assert( test.active?, 'The module is active.' )
62
+ assert_equal( test.parent, @configuration.module('base') )
63
+ assert_equal(
64
+ Pathname.new( '/home/mjansen/test' ),
65
+ test.build_prefix,
66
+ 'The build prefix is correctly set.' )
67
+ assert_equal(
68
+ Pathname.new( '/home/mjansen/test/bld/test_inherit' ),
69
+ test.build_directory,
70
+ 'The build directory is correctly set' )
71
+ end
72
+
73
+ end
@@ -0,0 +1,61 @@
1
+ require 'test/unit'
2
+ require 'active_support/test_case'
3
+ require 'active_record'
4
+
5
+ require 'logging'
6
+ Logging.init :debug2, :debug, :trace, :verbose, :info, :warn, :error
7
+ include Logging.globally
8
+
9
+ begin
10
+ # require 'turn'
11
+ rescue LoadError
12
+ end
13
+
14
+
15
+ # Set up the database.
16
+ def setup_database
17
+ if not ActiveRecord::Base.connected?
18
+ ActiveRecord::Base.establish_connection( :adapter => 'sqlite3', :database => ':memory:' )
19
+ ActiveRecord::Migrator.migrate( [ 'db/migrations' ] )
20
+ end
21
+ end
22
+
23
+ def close_database
24
+ ActiveRecord::Base.remove_connection
25
+ end
26
+
27
+ def assert_attributes( obj, attr )
28
+
29
+ attr.each do |key, val|
30
+ case val
31
+ when :not_nil
32
+ assert_not_nil( obj.send( key ), "#{key.to_s} should not be nil." )
33
+ when :nil
34
+ assert_nil( obj.send( key ), "#{key.to_s} should be nil." )
35
+ else
36
+ if val.is_a?( Hash )
37
+ assert_not_nil( obj.send( key ), "#{key.to_s} should not be nil." )
38
+ assert_attributes( obj.send( key ), val )
39
+ elsif val.is_a?( Proc )
40
+ val.call( obj.send( key ) )
41
+ else
42
+ assert_equal( val, obj.send( key ) )
43
+ end
44
+ end
45
+ end
46
+
47
+ end
48
+
49
+ class RepositoryMock
50
+ attr_accessor :name
51
+ def initialize( name )
52
+ @name = name
53
+ end
54
+ end
55
+
56
+ class ModuleMock
57
+ attr_accessor :name
58
+ def initialize( name )
59
+ @name = name
60
+ end
61
+ end # class ModuleMock
@@ -0,0 +1,36 @@
1
+ require 'test_helper'
2
+
3
+ setup_database()
4
+
5
+ require 'build-tool/configuration'
6
+
7
+ class ConfigurationTest < ActiveSupport::TestCase
8
+
9
+ test 'Constructor.' do
10
+ c = BuildTool::Configuration.new
11
+ end
12
+
13
+ test 'log_directory is not allowed to be relative' do
14
+ c = BuildTool::Configuration.new
15
+ assert_raises( BuildTool::ConfigurationError, /Log directory .* is relative/ ) do
16
+ c.log_directory = 'my/relative/dir'
17
+ end
18
+ assert_raises( BuildTool::ConfigurationError, /Log directory .* is relative/ ) do
19
+ c.log_directory = '$SOME_SHELL_VAR/relative/dir'
20
+ end
21
+ end
22
+
23
+ test 'log_directory handles ~ and $HOME' do
24
+ c = BuildTool::Configuration.new
25
+ assert_nothing_raised() do
26
+ c.log_directory = '$HOME/test1'
27
+ end
28
+ assert_equal( "#{ENV["HOME"]}/test1", c.log_directory.to_s )
29
+ assert_nothing_raised() do
30
+ c.log_directory = '~/test2'
31
+ end
32
+ assert_equal( "#{ENV["HOME"]}/test2", c.log_directory.to_s )
33
+ end
34
+
35
+ end
36
+
@@ -0,0 +1,163 @@
1
+ require 'test_helper'
2
+
3
+ require 'build-tool/vcs/git'
4
+
5
+
6
+ class GitConfigurationTest < ActiveSupport::TestCase
7
+
8
+ test 'Constructor.' do
9
+ cfg = BuildTool::VCS::GitConfiguration.new
10
+ assert_equal( 'git', cfg.name )
11
+ assert_equal( {}, cfg.remote )
12
+ assert_equal( {}, cfg.global_options )
13
+ assert_equal( {}, cfg.options )
14
+ assert_equal( 'origin/master', cfg.track )
15
+ end
16
+
17
+ test 'Track is correctly split.' do
18
+ cfg = BuildTool::VCS::GitConfiguration.new
19
+ assert_equal( 'origin', cfg.track_remote )
20
+ assert_equal( 'master', cfg.track_branch )
21
+ cfg.track = 'myremote/mybranch'
22
+ assert_equal( 'myremote', cfg.track_remote )
23
+ assert_equal( 'mybranch', cfg.track_branch )
24
+ end
25
+
26
+ test 'Vcs() returns a git instance.' do
27
+ cfg = BuildTool::VCS::GitConfiguration.new
28
+ # :TODO:
29
+ # assert( cfg.vcs.is_a?( BuildTool::VCS::Git ), "vcs() returns a instance of Git." )
30
+ end
31
+
32
+ test 'track() accessor works.' do
33
+ cfg = create_configuration
34
+ assert_equal( 'myremote/mybranch', cfg.track )
35
+ end
36
+
37
+ test 'track() accessor works with inheritance.' do
38
+ parent = create_configuration
39
+ # Create a empty object with a parent
40
+ cfg = BuildTool::VCS::GitConfiguration.new
41
+ cfg.parent = parent
42
+ # Value is taken from parent
43
+ assert_equal( 'myremote/mybranch', cfg.track )
44
+ # Unless we set it locally
45
+ cfg.track = 'repo1/test'
46
+ assert_equal( 'repo1/test', cfg.track )
47
+ # After a reset
48
+ cfg.track = nil
49
+ assert_equal( 'myremote/mybranch', cfg.track )
50
+ end
51
+
52
+ test 'options() accessor works.' do
53
+ cfg = create_configuration
54
+ assert_equal( 'option 1', cfg.options[:option1] )
55
+ assert_equal( 'option 2', cfg.options[:option2] )
56
+ assert_nil( cfg.options[:option3] )
57
+ end
58
+
59
+ test 'options() accessor works with inheritance.' do
60
+ parent = create_configuration
61
+ # Create a empty object with a parent
62
+ cfg = BuildTool::VCS::GitConfiguration.new
63
+ cfg.parent = parent
64
+ # Options are not merged.
65
+ assert_nil( cfg.options[:option1] )
66
+ assert_nil( cfg.options[:option2] )
67
+ assert_nil( cfg.options[:option3] )
68
+ # Merged_options is merged with the parent.
69
+ assert_equal( 'option 1', cfg.merged_options[:option1] )
70
+ assert_equal( 'option 2', cfg.merged_options[:option2] )
71
+ assert_nil( cfg.merged_options[:option3] )
72
+ # But ours have priority
73
+ cfg.options[:option1] = 'overwritten'
74
+ assert_equal( 'overwritten', cfg.merged_options[:option1] )
75
+ end
76
+
77
+ test 'options() accessor works with global configuration.' do
78
+ cfg = create_configuration
79
+ create_global_configuration
80
+ assert_equal( 'option 1', cfg.merged_options[:option1] )
81
+ assert_equal( 'option 2', cfg.merged_options[:option2] )
82
+ assert_equal( 'option 3(set globally)', cfg.merged_options[:option3] )
83
+ end
84
+
85
+ test 'options() accessor works with global configuration and inheritance.' do
86
+ parent = create_configuration
87
+ # Create a empty object with a parent
88
+ cfg = BuildTool::VCS::GitConfiguration.new
89
+ cfg.parent = parent
90
+ cfg.options[:option1] = 'overwritten'
91
+ # Merged_options is merged with the parent and global
92
+ create_global_configuration
93
+ assert_equal( 'overwritten', cfg.merged_options[:option1] )
94
+ assert_equal( 'option 2', cfg.merged_options[:option2] )
95
+ assert_equal( 'option 3(set globally)', cfg.merged_options[:option3] )
96
+ # And we can reset them
97
+ cfg.options.delete(:option1)
98
+ assert_equal( 'option 1', cfg.merged_options[:option1] )
99
+ end
100
+
101
+ test 'global_options() works.' do
102
+ cfg = create_configuration
103
+ assert_equal( {}, cfg.global_options )
104
+ end
105
+
106
+ test 'global_options() works with global configuration.' do
107
+ cfg = create_configuration
108
+ create_global_configuration
109
+ assert_equal( 'global option 1', cfg.merged_global_options[:globaloption1] )
110
+ assert_equal( 'global option 2', cfg.merged_global_options[:globaloption2] )
111
+ end
112
+
113
+ test 'remote() accessor works.' do
114
+ cfg = create_configuration
115
+ assert_equal( 'GitRemoteObject 1', cfg.remote['origin'] )
116
+ assert_equal( 'GitRemoteObject 1', cfg.merged_remote['origin'] )
117
+ end
118
+
119
+ test 'remote() accessor works with inheritance.' do
120
+ parent = create_configuration
121
+ cfg = BuildTool::VCS::GitConfiguration.new
122
+ cfg.parent = parent
123
+ cfg.remote['other'] = 'other'
124
+ assert_nil( cfg.remote['origin'] )
125
+ assert_equal( 'GitRemoteObject 1', cfg.merged_remote['origin'] )
126
+ assert_equal( 'other', cfg.merged_remote['other'] )
127
+ cfg.remote['origin'] = 'test'
128
+ assert_equal( 'test', cfg.merged_remote['origin'] )
129
+ assert_equal( 'other', cfg.merged_remote['other'] )
130
+ end
131
+
132
+
133
+ private
134
+
135
+ def create_configuration
136
+ # Reset global configuration
137
+ BuildTool::VCS::GitConfiguration.global_config = nil
138
+ # Create a configuration object
139
+ cfg = BuildTool::VCS::GitConfiguration.new
140
+ cfg.track = 'myremote/mybranch'
141
+ cfg.options = {
142
+ :option1 => "option 1",
143
+ :option2 => "option 2" }
144
+ cfg.remote['origin'] = 'GitRemoteObject 1'
145
+ cfg.remote['private'] = 'GitRemoteObject 2'
146
+ cfg
147
+ end
148
+
149
+ def create_global_configuration
150
+ # Add a global configuration object
151
+ global = BuildTool::VCS::GitConfiguration.new
152
+ BuildTool::VCS::GitConfiguration.global_config = global
153
+ global.options = {
154
+ :option1 => "option 1(set globally)",
155
+ :option3 => "option 3(set globally)" }
156
+ global.global_options = {
157
+ :globaloption1 => "global option 1",
158
+ :globaloption2 => "global option 2" }
159
+ global
160
+ end
161
+
162
+
163
+ end