ritsu 0.1.0

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 (73) hide show
  1. data/README.md +96 -0
  2. data/Thorfile +95 -0
  3. data/VERSION +1 -0
  4. data/bin/ritsu +32 -0
  5. data/lib/ritsu/block.rb +259 -0
  6. data/lib/ritsu/ext/test_case.rb +20 -0
  7. data/lib/ritsu/external_library.rb +47 -0
  8. data/lib/ritsu/project.rb +89 -0
  9. data/lib/ritsu/project_generator.rb +34 -0
  10. data/lib/ritsu/project_generators/default_generator.rb +73 -0
  11. data/lib/ritsu/project_generators/default_generator_files/Thorfile.erb +9 -0
  12. data/lib/ritsu/project_generators/default_generator_files/meta/project.rb.erb +9 -0
  13. data/lib/ritsu/project_generators.rb +1 -0
  14. data/lib/ritsu/src_file.rb +76 -0
  15. data/lib/ritsu/src_files/cpp_file.rb +33 -0
  16. data/lib/ritsu/src_files/cpp_file_mixin.rb +13 -0
  17. data/lib/ritsu/src_files/executable_cmake_lists.rb +40 -0
  18. data/lib/ritsu/src_files/header_file.rb +46 -0
  19. data/lib/ritsu/src_files/header_file_mixin.rb +20 -0
  20. data/lib/ritsu/src_files/project_cmake_lists.rb +110 -0
  21. data/lib/ritsu/src_files/project_config_header_file.rb +15 -0
  22. data/lib/ritsu/src_files/project_config_header_template_file.rb +46 -0
  23. data/lib/ritsu/src_files/shared_library_cmake_lists.rb +40 -0
  24. data/lib/ritsu/src_files/static_library_cmake_lists.rb +40 -0
  25. data/lib/ritsu/src_files/target_cmake_lists.rb +159 -0
  26. data/lib/ritsu/src_files/templated_src_file.rb +44 -0
  27. data/lib/ritsu/src_files.rb +14 -0
  28. data/lib/ritsu/target.rb +134 -0
  29. data/lib/ritsu/targets/executable.rb +45 -0
  30. data/lib/ritsu/targets/library.rb +29 -0
  31. data/lib/ritsu/targets/shared_library.rb +39 -0
  32. data/lib/ritsu/targets/static_library.rb +33 -0
  33. data/lib/ritsu/targets.rb +4 -0
  34. data/lib/ritsu/template.rb +69 -0
  35. data/lib/ritsu/template_policies.rb +133 -0
  36. data/lib/ritsu/test_helpers.rb +124 -0
  37. data/lib/ritsu/thors/default_thor.rb +57 -0
  38. data/lib/ritsu/thors.rb +1 -0
  39. data/lib/ritsu/utility/accessors.rb +30 -0
  40. data/lib/ritsu/utility/check_upon_add_set.rb +35 -0
  41. data/lib/ritsu/utility/file_robot.rb +129 -0
  42. data/lib/ritsu/utility/files.rb +13 -0
  43. data/lib/ritsu/utility/instance_dependencies.rb +113 -0
  44. data/lib/ritsu/utility/instance_set.rb +29 -0
  45. data/lib/ritsu/utility/platform.rb +21 -0
  46. data/lib/ritsu/utility/simple_io.rb +65 -0
  47. data/lib/ritsu/utility/single_instance.rb +34 -0
  48. data/lib/ritsu/utility/strings.rb +41 -0
  49. data/lib/ritsu/utility.rb +8 -0
  50. data/lib/ritsu.rb +17 -0
  51. data/test/ritsu/block_test.rb +197 -0
  52. data/test/ritsu/external_library_test.rb +42 -0
  53. data/test/ritsu/project_generators/default_generator_test.rb +34 -0
  54. data/test/ritsu/project_test.rb +128 -0
  55. data/test/ritsu/src_file_test.rb +70 -0
  56. data/test/ritsu/src_files/cpp_file_test.rb +43 -0
  57. data/test/ritsu/src_files/executable_cmake_lists_test.rb +52 -0
  58. data/test/ritsu/src_files/header_file_test.rb +58 -0
  59. data/test/ritsu/src_files/project_cmake_lists_test.rb +152 -0
  60. data/test/ritsu/src_files/shared_library_cmake_lists_test.rb +52 -0
  61. data/test/ritsu/src_files/static_library_cmake_lists_test.rb +52 -0
  62. data/test/ritsu/src_files/target_cmake_lists_test.rb +16 -0
  63. data/test/ritsu/target_test.rb +106 -0
  64. data/test/ritsu/targets/executable_test.rb +11 -0
  65. data/test/ritsu/targets/shared_library_test.rb +11 -0
  66. data/test/ritsu/targets/static_library_test.rb +11 -0
  67. data/test/ritsu/template_policies_test.rb +0 -0
  68. data/test/ritsu/utility/accessors_test.rb +15 -0
  69. data/test/ritsu/utility/check_upon_add_set_test.rb +32 -0
  70. data/test/ritsu/utility/file_robot_test.rb +176 -0
  71. data/test/ritsu/utility/strings_test.rb +29 -0
  72. data/test/test_helpers.rb +4 -0
  73. metadata +209 -0
@@ -0,0 +1,52 @@
1
+ require File.dirname(__FILE__) + "/../../test_helpers"
2
+
3
+ class ExecutableCMakeListsTest < Test::Unit::TestCase
4
+ include Ritsu::SetupProjectAndClearEverythingElse
5
+ include Ritsu::TestCaseWithFileTestData
6
+ include Ritsu::Utility
7
+
8
+ def data_dir; File.dirname(__FILE__) + "/" + File.basename(__FILE__, ".rb") end
9
+
10
+ def setup
11
+ setup_project('mio')
12
+ @project.project_dir = output_dir
13
+ end
14
+
15
+ file_test "must be present" do
16
+ abc = Ritsu::Targets::Executable.new("abc", :project=>@project)
17
+ assert abc.respond_to?(:cmake_lists)
18
+ assert abc.cmake_lists.kind_of?(Ritsu::SrcFiles::ExecutableCmakeLists)
19
+ assert_equal 1,
20
+ abc.src_files.select {|x| x.kind_of?(Ritsu::SrcFiles::ExecutableCmakeLists)}.length
21
+ end
22
+
23
+ file_test "create" do
24
+ abc = Ritsu::Targets::Executable.new("abc", :project=>@project)
25
+ FileRobot.quietly do
26
+ abc.cmake_lists.create
27
+ end
28
+ assert_file_exists(abc.cmake_lists.abs_path)
29
+
30
+ expected_content = <<-CMAKE
31
+ ##<< TargetCmakeLists -- abc -- Libraries
32
+ ##>> TargetCmakeLists -- abc -- Libraries
33
+
34
+ ##<< TargetCmakeLists -- abc -- Custom Commands
35
+ ##>> TargetCmakeLists -- abc -- Custom Commands
36
+
37
+ ##<< TargetCmakeLists -- abc -- Source Files
38
+ SET(ABC_SRC_FILES
39
+ )
40
+ ##>> TargetCmakeLists -- abc -- Source Files
41
+
42
+ ##<< ExecutableCmakeLists -- abc -- Executable
43
+ ADD_EXECUTABLE(abc ${ABC_SRC_FILES})
44
+ ##>> ExecutableCmakeLists -- abc -- Executable
45
+
46
+ ##<< TargetCmakeLists -- abc -- Dependencies
47
+ ##>> TargetCmakeLists -- abc -- Dependencies
48
+ CMAKE
49
+
50
+ assert_file_content(expected_content, abc.cmake_lists.abs_path)
51
+ end
52
+ end
@@ -0,0 +1,58 @@
1
+ require File.dirname(__FILE__) + "/../../test_helpers"
2
+
3
+ class HeaderFileTest < Test::Unit::TestCase
4
+ include Ritsu::SetupProjectAndClearEverythingElse
5
+ include Ritsu::TestCaseWithFileTestData
6
+ include Ritsu::Utility
7
+
8
+ def setup
9
+ setup_project
10
+ @project.project_dir = output_dir
11
+ @target = Ritsu::Targets::Executable.new("abc", :project=>@project)
12
+ end
13
+
14
+ def data_dir; File.dirname(__FILE__) + "/" + File.basename(__FILE__, ".rb") end
15
+
16
+ must "include_guard computed correct" do
17
+ @header_file = Ritsu::SrcFiles::HeaderFile.new("abc/def.h", @target)
18
+ assert_equal "__PROJECT_ABC_DEF_H__", @header_file.include_guard
19
+ end
20
+
21
+ file_test "create" do
22
+ @header_file = Ritsu::SrcFiles::HeaderFile.new("abc/def.h", @target)
23
+ FileRobot.quietly do
24
+ @header_file.create
25
+ end
26
+ assert_file_exists(@header_file.abs_path)
27
+ expected_content = <<-HEADER_FILE
28
+ #ifndef __PROJECT_ABC_DEF_H__
29
+ #define __PROJECT_ABC_DEF_H__
30
+
31
+ ////////////////////
32
+ // YOUR CODE HERE //
33
+ ////////////////////
34
+
35
+ #endif
36
+ HEADER_FILE
37
+ assert_file_content(expected_content, @header_file.abs_path)
38
+ end
39
+
40
+ file_test "update_does_nothing" do
41
+ @header_file = Ritsu::SrcFiles::HeaderFile.new("abc/def.h", @target)
42
+ FileRobot.quietly do
43
+ FileRobot.create_file(output_path("src/abc/def.h"), "abc")
44
+ @header_file.update
45
+ end
46
+ assert_file_content("abc", @header_file.abs_path)
47
+ end
48
+
49
+ file_test "delete" do
50
+ @header_file = Ritsu::SrcFiles::HeaderFile.new("abc/def.h", @target)
51
+ FileRobot.quietly do
52
+ @header_file.create
53
+ assert_file_exists(@header_file.abs_path)
54
+ @header_file.remove
55
+ assert_file_not_exist(@header_file.abs_path)
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,152 @@
1
+ require File.dirname(__FILE__) + "/../../test_helpers"
2
+
3
+ class ProjectCMakeListsTest < Test::Unit::TestCase
4
+ include Ritsu::SetupProjectAndClearEverythingElse
5
+ include Ritsu::TestCaseWithFileTestData
6
+ include Ritsu::Utility
7
+
8
+ def data_dir; File.expand_path(File.dirname(__FILE__) + "/" + File.basename(__FILE__, ".rb")) end
9
+
10
+ def setup
11
+ setup_project('mio')
12
+ @project.project_dir = output_dir
13
+ end
14
+
15
+ must "be present in project" do
16
+ assert @project.respond_to?(:cmake_lists)
17
+ assert @project.cmake_lists.kind_of?(Ritsu::SrcFiles::ProjectCmakeLists)
18
+ end
19
+
20
+ must "src_path must be CMakeLists.txt" do
21
+ cmakelists = @project.cmake_lists
22
+ assert_equal "CMakeLists.txt", cmakelists.src_path
23
+ end
24
+
25
+ must "abs_path must be project_dir/src/CMakeLists.txt" do
26
+ cmakelists = @project.cmake_lists
27
+ assert_equal "#{@project.project_dir}/src/CMakeLists.txt",
28
+ cmakelists.abs_path
29
+ end
30
+
31
+ file_test "create" do
32
+ FileRobot.quietly do
33
+ @project.cmake_lists.create
34
+ end
35
+ assert_file_exists(@project.cmake_lists.abs_path)
36
+
37
+ expected_content = <<-TEXT
38
+ ##<< ProjectCmakeLists -- Header
39
+ PROJECT(mio)
40
+ CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
41
+ SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules" ${CMAKE_MODULE_PATH})
42
+
43
+ IF(WIN32)
44
+ OPTION(__WIN_PLATFORM__ "Windows Platform" ON)
45
+ ELSE(WIN32)
46
+ OPTION(__WIN_PLATFORM__ "Windows Platform" OFF)
47
+ ENDIF(WIN32)
48
+
49
+ IF(UNIX)
50
+ IF(APPLE)
51
+ OPTION(__MAC_PLATFORM__ "Apple Platform" ON)
52
+ OPTION(__UNIX_PLATFORM__ "Unix Platform" OFF)
53
+ ELSE(APPLE)
54
+ OPTION(__MAC_PLATFORM__ "Apple Platform" OFF)
55
+ OPTION(__UNIX_PLATFORM__ "Unix Platform" ON)
56
+ ENDIF(APPLE)
57
+ ELSE(UNIX)
58
+ OPTION(__MAC_PLATFORM__ "Apple Platform" OFF)
59
+ OPTION(__UNIX_PLATFORM__ "Unix Platform" OFF)
60
+ ENDIF(UNIX)
61
+ ##>> ProjectCmakeLists -- Header
62
+
63
+ ##<< ProjectCmakeLists -- External Libraries
64
+ ##>> ProjectCmakeLists -- External Libraries
65
+
66
+ ##<< ProjectCmakeLists -- Directories
67
+ ##>> ProjectCmakeLists -- Directories
68
+
69
+ ##<< ProjectCmakeLists -- Configure File
70
+ CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/config.h.in ${CMAKE_SOURCE_DIR}/config.h )
71
+ ##>> ProjectCmakeLists -- Configure File
72
+ TEXT
73
+
74
+ assert_file_content(expected_content, @project.cmake_lists.abs_path)
75
+ end
76
+
77
+ file_test "create 2" do
78
+ @project.add_external_library 'qt_core' do |e|
79
+ e.cmake_name '${QT_LIBRARIES}'
80
+ e.cmake_find_script <<-CMAKE
81
+ FIND_PACKAGE(Qt4 REQUIRED)
82
+ CMAKE
83
+ e.cmake_depend_script <<-CMAKE
84
+ INCLUDE_DIRECTORIES(${QT_INCLUDE_DIR})
85
+ SET(QT_DONT_USE_QTGUI TRUE)
86
+ CMAKE
87
+ end
88
+
89
+ @project.add_external_library 'opengl' do |e|
90
+ e.cmake_name '${OPENGL_LIBRARY}'
91
+ e.cmake_find_script <<-CMAKE
92
+ FIND_PACKAGE(OpenGL REQUIRED)
93
+ CMAKE
94
+ e.cmake_depend_script <<-CMAKE
95
+ INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIR})
96
+ CMAKE
97
+ end
98
+
99
+ ghi = Ritsu::Targets::SharedLibrary.new("ghi", :project=>@project)
100
+ abc = Ritsu::Targets::Executable.new("abc", :project=>@project)
101
+ abc.dependency_targets << ghi
102
+
103
+ FileRobot.quietly do
104
+ @project.cmake_lists.create
105
+ end
106
+
107
+ expected_content = <<-TEXT
108
+ ##<< ProjectCmakeLists -- Header
109
+ PROJECT(mio)
110
+ CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
111
+ SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules" ${CMAKE_MODULE_PATH})
112
+
113
+ IF(WIN32)
114
+ OPTION(__WIN_PLATFORM__ "Windows Platform" ON)
115
+ ELSE(WIN32)
116
+ OPTION(__WIN_PLATFORM__ "Windows Platform" OFF)
117
+ ENDIF(WIN32)
118
+
119
+ IF(UNIX)
120
+ IF(APPLE)
121
+ OPTION(__MAC_PLATFORM__ "Apple Platform" ON)
122
+ OPTION(__UNIX_PLATFORM__ "Unix Platform" OFF)
123
+ ELSE(APPLE)
124
+ OPTION(__MAC_PLATFORM__ "Apple Platform" OFF)
125
+ OPTION(__UNIX_PLATFORM__ "Unix Platform" ON)
126
+ ENDIF(APPLE)
127
+ ELSE(UNIX)
128
+ OPTION(__MAC_PLATFORM__ "Apple Platform" OFF)
129
+ OPTION(__UNIX_PLATFORM__ "Unix Platform" OFF)
130
+ ENDIF(UNIX)
131
+ ##>> ProjectCmakeLists -- Header
132
+
133
+ ##<< ProjectCmakeLists -- External Libraries
134
+ FIND_PACKAGE(OpenGL REQUIRED)
135
+
136
+ FIND_PACKAGE(Qt4 REQUIRED)
137
+
138
+ ##>> ProjectCmakeLists -- External Libraries
139
+
140
+ ##<< ProjectCmakeLists -- Directories
141
+ ADD_SUBDIRECTORY(ghi)
142
+ ADD_SUBDIRECTORY(abc)
143
+ ##>> ProjectCmakeLists -- Directories
144
+
145
+ ##<< ProjectCmakeLists -- Configure File
146
+ CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/config.h.in ${CMAKE_SOURCE_DIR}/config.h )
147
+ ##>> ProjectCmakeLists -- Configure File
148
+ TEXT
149
+
150
+ assert_file_content(expected_content, @project.cmake_lists.abs_path)
151
+ end
152
+ end
@@ -0,0 +1,52 @@
1
+ require File.dirname(__FILE__) + "/../../test_helpers"
2
+
3
+ class SharedLibraryCMakeListsTest < Test::Unit::TestCase
4
+ include Ritsu::SetupProjectAndClearEverythingElse
5
+ include Ritsu::TestCaseWithFileTestData
6
+ include Ritsu::Utility
7
+
8
+ def data_dir; File.dirname(__FILE__) + "/" + File.basename(__FILE__, ".rb") end
9
+
10
+ def setup
11
+ setup_project('mio')
12
+ @project.project_dir = output_dir
13
+ end
14
+
15
+ file_test "must be present" do
16
+ abc = Ritsu::Targets::SharedLibrary.new("abc", :project=>@project)
17
+ assert abc.respond_to?(:cmake_lists)
18
+ assert abc.cmake_lists.kind_of?(Ritsu::SrcFiles::SharedLibraryCmakeLists)
19
+ assert_equal 1,
20
+ abc.src_files.select {|x| x.kind_of?(Ritsu::SrcFiles::SharedLibraryCmakeLists)}.length
21
+ end
22
+
23
+ file_test "create" do
24
+ abc = Ritsu::Targets::SharedLibrary.new("abc", :project=>@project)
25
+ FileRobot.quietly do
26
+ abc.cmake_lists.create
27
+ end
28
+ assert_file_exists(abc.cmake_lists.abs_path)
29
+
30
+ expected_content = <<-CMAKE
31
+ ##<< TargetCmakeLists -- abc -- Libraries
32
+ ##>> TargetCmakeLists -- abc -- Libraries
33
+
34
+ ##<< TargetCmakeLists -- abc -- Custom Commands
35
+ ##>> TargetCmakeLists -- abc -- Custom Commands
36
+
37
+ ##<< TargetCmakeLists -- abc -- Source Files
38
+ SET(ABC_SRC_FILES
39
+ )
40
+ ##>> TargetCmakeLists -- abc -- Source Files
41
+
42
+ ##<< SharedLibraryCmakeLists -- abc -- Shared Library
43
+ ADD_LIBRARY(abc SHARED ${ABC_SRC_FILES})
44
+ ##>> SharedLibraryCmakeLists -- abc -- Shared Library
45
+
46
+ ##<< TargetCmakeLists -- abc -- Dependencies
47
+ ##>> TargetCmakeLists -- abc -- Dependencies
48
+ CMAKE
49
+
50
+ assert_file_content(expected_content, abc.cmake_lists.abs_path)
51
+ end
52
+ end
@@ -0,0 +1,52 @@
1
+ require File.dirname(__FILE__) + "/../../test_helpers"
2
+
3
+ class StaticLibraryCMakeListsTest < Test::Unit::TestCase
4
+ include Ritsu::SetupProjectAndClearEverythingElse
5
+ include Ritsu::TestCaseWithFileTestData
6
+ include Ritsu::Utility
7
+
8
+ def data_dir; File.dirname(__FILE__) + "/" + File.basename(__FILE__, ".rb") end
9
+
10
+ def setup
11
+ setup_project('mio')
12
+ @project.project_dir = output_dir
13
+ end
14
+
15
+ file_test "must be present" do
16
+ abc = Ritsu::Targets::StaticLibrary.new("abc", :project=>@project)
17
+ assert abc.respond_to?(:cmake_lists)
18
+ assert abc.cmake_lists.kind_of?(Ritsu::SrcFiles::StaticLibraryCmakeLists)
19
+ assert_equal 1,
20
+ abc.src_files.select {|x| x.kind_of?(Ritsu::SrcFiles::StaticLibraryCmakeLists)}.length
21
+ end
22
+
23
+ file_test "create" do
24
+ abc = Ritsu::Targets::StaticLibrary.new("abc", :project=>@project)
25
+ FileRobot.quietly do
26
+ abc.cmake_lists.create
27
+ end
28
+ assert_file_exists(abc.cmake_lists.abs_path)
29
+
30
+ expected_content = <<-CMAKE
31
+ ##<< TargetCmakeLists -- abc -- Libraries
32
+ ##>> TargetCmakeLists -- abc -- Libraries
33
+
34
+ ##<< TargetCmakeLists -- abc -- Custom Commands
35
+ ##>> TargetCmakeLists -- abc -- Custom Commands
36
+
37
+ ##<< TargetCmakeLists -- abc -- Source Files
38
+ SET(ABC_SRC_FILES
39
+ )
40
+ ##>> TargetCmakeLists -- abc -- Source Files
41
+
42
+ ##<< StaticLibraryCmakeLists -- abc -- Static Library
43
+ ADD_LIBRARY(abc STATIC ${ABC_SRC_FILES})
44
+ ##>> StaticLibraryCmakeLists -- abc -- Static Library
45
+
46
+ ##<< TargetCmakeLists -- abc -- Dependencies
47
+ ##>> TargetCmakeLists -- abc -- Dependencies
48
+ CMAKE
49
+
50
+ assert_file_content(expected_content, abc.cmake_lists.abs_path)
51
+ end
52
+ end
@@ -0,0 +1,16 @@
1
+ require File.dirname(__FILE__) + "/../../test_helpers"
2
+
3
+ class TargetCMakeListsTest < Test::Unit::TestCase
4
+ include Ritsu::SetupProjectAndClearEverythingElse
5
+
6
+ must "src_path must be target_name/CMakeLists.txt" do
7
+ target = Ritsu::Targets::Executable.new("abc", :project=>@project)
8
+ assert_equal "abc/CMakeLists.txt", target.cmake_lists.src_path
9
+ end
10
+
11
+ must "src_path must be project_dir/target_name/CMakeLists.txt" do
12
+ target = Ritsu::Targets::Executable.new("abc", :project=>@project)
13
+ assert_equal "#{@project.project_dir}/src/abc/CMakeLists.txt",
14
+ target.cmake_lists.abs_path
15
+ end
16
+ end
@@ -0,0 +1,106 @@
1
+ require File.dirname(__FILE__) + "/../test_helpers"
2
+
3
+ class TargetTest < Test::Unit::TestCase
4
+ include Ritsu
5
+ include Ritsu::Targets
6
+ include Ritsu::SetupProjectAndClearEverythingElse
7
+
8
+ must "contruct instances and keep track of them correctly" do
9
+ Executable.new("abc")
10
+ SharedLibrary.new("def")
11
+ StaticLibrary.new("ghi")
12
+
13
+ assert_equal 3, Target.instances.length
14
+
15
+ assert Target.instances.any? {|x| x.name =='abc'}
16
+ assert Target.instances.any? {|x| x.name == 'def'}
17
+ assert Target.instances.any? {|x| x.name == 'ghi'}
18
+
19
+ assert Target.instances.any? {|x| x.kind_of?(Executable)}
20
+ assert Target.instances.any? {|x| x.kind_of?(SharedLibrary)}
21
+ assert Target.instances.any? {|x| x.kind_of?(StaticLibrary)}
22
+ end
23
+
24
+ must "set the project to the default project if none is explicitly specified" do
25
+ abc = Executable.new('abc')
26
+ assert_equal @project, abc.project
27
+ end
28
+
29
+ must "upon creation, add the target to the given project" do
30
+ abc = Executable.new('abc', :project => @project)
31
+ assert_equal 1, @project.targets.length
32
+ assert @project.targets.any? {|x| x.name == 'abc'}
33
+ end
34
+
35
+ def setup_abcd_dependency_tree
36
+ @a = SharedLibrary.new('a')
37
+ @b = SharedLibrary.new('b')
38
+ @c = SharedLibrary.new('c')
39
+ @d = StaticLibrary.new('d')
40
+
41
+ @b.dependency_targets << @a
42
+ @c.dependency_targets << @b
43
+ @d.dependency_targets << @a
44
+
45
+ @nodes = {:a => @a, :b => @b, :c => @c, :d => @d}
46
+ end
47
+
48
+ must "be able to determine which target it depends directly on" do
49
+ setup_abcd_dependency_tree
50
+
51
+ [[:b,:a], [:c,:b], [:d,:a]].each do |u,v|
52
+ assert @nodes[u].depends_directly_on_target?(@nodes[v]),
53
+ "#{u} must depend directly on #{v}"
54
+ end
55
+
56
+ [[:c,:a], [:a,:b], [:b,:b], [:b,:d]].each do |u,v|
57
+ assert !(@nodes[u].depends_directly_on_target?(@nodes[v])),
58
+ "#{u} must not depend directly on #{v}"
59
+ end
60
+ end
61
+
62
+ must "be able to determine which target it depends on, even not directly, on" do
63
+ setup_abcd_dependency_tree
64
+
65
+ [[:b,:a], [:c,:b], [:c,:b], [:d,:a]].each do |u,v|
66
+ assert @nodes[u].depends_on_target?(@nodes[v]),
67
+ "#{u} must depend on #{v}"
68
+ end
69
+
70
+ [[:a,:a], [:a,:b], [:a,:c], [:a,:d], [:b,:d], [:b,:c], [:c,:d], [:d,:c]].each do |u,v|
71
+ assert !(@nodes[u].depends_on_target?(@nodes[v])),
72
+ "#{u} must not depend on #{v}"
73
+ end
74
+ end
75
+
76
+ must "compute topological orders correctly" do
77
+ setup_abcd_dependency_tree
78
+
79
+ Target.compute_topological_orders
80
+
81
+ [[:b,:a], [:c,:b], [:d,:a]].each do |u,v|
82
+ assert @nodes[u].topological_order > @nodes[v].topological_order,
83
+ "#{u} should come after #{v} in topological ordering"
84
+ end
85
+ end
86
+
87
+ must "src_dir" do
88
+ abc = Executable.new('abc')
89
+ assert_equal "abc", abc.src_dir
90
+ end
91
+
92
+ must "compute src_path correctly" do
93
+ abc = Executable.new('abc')
94
+ assert_equal "abc/temp.cpp", abc.compute_src_path("temp.cpp")
95
+ end
96
+
97
+ must "compute src_path correctly relative to src" do
98
+ abc = Executable.new('abc')
99
+ assert_equal "xyz/temp.cpp", abc.compute_src_path("xyz/temp.cpp", :relative_to => :src)
100
+ end
101
+
102
+ must "compute src_path correct when the input is absolute" do
103
+ abc = Executable.new('abc')
104
+ assert_equal "../temp.cpp", abc.compute_src_path(@project.project_dir + "/temp.cpp", :relative_to => :absolute)
105
+ end
106
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + "/../../test_helpers"
2
+
3
+ class ExecutableTest < Test::Unit::TestCase
4
+ include Ritsu::Targets
5
+ include Ritsu::SetupProjectAndClearEverythingElse
6
+
7
+ must "not be able to be depended on" do
8
+ exe = Executable.new('exe')
9
+ assert !exe.can_be_depended_on?
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + "/../../test_helpers"
2
+
3
+ class SharedLibraryTest < Test::Unit::TestCase
4
+ include Ritsu::Targets
5
+ include Ritsu::SetupProjectAndClearEverythingElse
6
+
7
+ must "be able to be depended on" do
8
+ so = SharedLibrary.new('so')
9
+ assert so.can_be_depended_on?
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + "/../../test_helpers"
2
+
3
+ class StaticLibraryTest < Test::Unit::TestCase
4
+ include Ritsu::Targets
5
+ include Ritsu::SetupProjectAndClearEverythingElse
6
+
7
+ must "be able to be depended on" do
8
+ a = StaticLibrary.new('a')
9
+ assert a.can_be_depended_on?
10
+ end
11
+ end
File without changes
@@ -0,0 +1,15 @@
1
+ require File.dirname(__FILE__) + "/../../test_helpers"
2
+
3
+
4
+ class AccessorsTest < Test::Unit::TestCase
5
+ class A
6
+ include Ritsu::Utility::Accessors
7
+ attr_method :x
8
+ end
9
+
10
+ must "attr_equal works correctly" do
11
+ a = A.new
12
+ a.x 10
13
+ assert_equal 10, a.x
14
+ end
15
+ end
@@ -0,0 +1,32 @@
1
+ require File.dirname(__FILE__) + "/../../test_helpers"
2
+
3
+ class CheckUponAddSetTest < Test::Unit::TestCase
4
+ include Ritsu::Utility
5
+
6
+ must "behave like normal set when given no block" do
7
+ s = CheckUponAddSet.new
8
+ s << 1 << 2 << "abc"
9
+ assert s.include?(1)
10
+ assert s.include?(2)
11
+ assert s.include?("abc")
12
+ s.delete(1)
13
+ assert !s.include?(1)
14
+ end
15
+
16
+ must "preform check when block is given" do
17
+ s = CheckUponAddSet.new do |s,x|
18
+ if x > 10
19
+ raise ArgumentError.new("inserted value more than 10!")
20
+ end
21
+ end
22
+ assert_nothing_raised do
23
+ s << 1
24
+ s << 2
25
+ s << 10
26
+ s << -1
27
+ end
28
+ assert_raises ArgumentError do
29
+ s << 11
30
+ end
31
+ end
32
+ end