You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

bazaar_adapter_test.rb 7.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. # frozen_string_literal: true
  2. # Redmine - project management software
  3. # Copyright (C) 2006-2020 Jean-Philippe Lang
  4. #
  5. # This program is free software; you can redistribute it and/or
  6. # modify it under the terms of the GNU General Public License
  7. # as published by the Free Software Foundation; either version 2
  8. # of the License, or (at your option) any later version.
  9. #
  10. # This program is distributed in the hope that it will be useful,
  11. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. # GNU General Public License for more details.
  14. #
  15. # You should have received a copy of the GNU General Public License
  16. # along with this program; if not, write to the Free Software
  17. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  18. require File.expand_path('../../../../../../test_helper', __FILE__)
  19. class BazaarAdapterTest < ActiveSupport::TestCase
  20. REPOSITORY_PATH = Rails.root.join('tmp/test/bazaar_repository').to_s
  21. REPOSITORY_PATH.squeeze!('/')
  22. if File.directory?(REPOSITORY_PATH)
  23. def setup
  24. @adapter = Redmine::Scm::Adapters::BazaarAdapter.
  25. new(File.join(REPOSITORY_PATH, "trunk"))
  26. end
  27. def test_scm_version
  28. to_test = {
  29. "Bazaar (bzr) 2.1.2\n" => [2, 1, 2],
  30. "2.1.1\n1.7\n1.8" => [2, 1, 1],
  31. "2.0.1\r\n1.8.1\r\n1.9.1" => [2, 0, 1]
  32. }
  33. to_test.each do |s, v|
  34. test_scm_version_for(s, v)
  35. end
  36. end
  37. def test_cat
  38. cat = @adapter.cat('directory/document.txt')
  39. assert cat =~ /Write the contents of a file as of a given revision to standard output/
  40. end
  41. def test_cat_path_invalid
  42. assert_nil @adapter.cat('invalid')
  43. end
  44. def test_cat_revision_invalid
  45. assert_nil @adapter.cat('doc-mkdir.txt', '12345678')
  46. end
  47. def test_diff
  48. diff1 = @adapter.diff('doc-mkdir.txt', 3, 2)
  49. assert_equal 21, diff1.size
  50. buf = diff1[14].gsub(/\r\n|\r|\n/, "")
  51. assert_equal "-Display more information.", buf
  52. end
  53. def test_diff_path_invalid
  54. assert_equal [], @adapter.diff('invalid', 1)
  55. end
  56. def test_diff_revision_invalid
  57. assert_equal [], @adapter.diff(nil, 12345678)
  58. assert_equal [], @adapter.diff(nil, 12345678, 87654321)
  59. end
  60. def test_annotate
  61. annotate = @adapter.annotate('doc-mkdir.txt')
  62. assert_equal 17, annotate.lines.size
  63. assert_equal '1', annotate.revisions[0].identifier
  64. assert_equal 'jsmith@', annotate.revisions[0].author
  65. assert_equal 'mkdir', annotate.lines[0]
  66. end
  67. def test_annotate_path_invalid
  68. assert_nil @adapter.annotate('invalid')
  69. end
  70. def test_annotate_revision_invalid
  71. assert_nil @adapter.annotate('doc-mkdir.txt', '12345678')
  72. end
  73. def test_branch_conf_path
  74. p = "c:\\test\\test\\"
  75. bcp = Redmine::Scm::Adapters::BazaarAdapter.branch_conf_path(p)
  76. assert_equal File.join("c:\\test\\test", ".bzr", "branch", "branch.conf"), bcp
  77. p = "c:\\test\\test\\.bzr"
  78. bcp = Redmine::Scm::Adapters::BazaarAdapter.branch_conf_path(p)
  79. assert_equal File.join("c:\\test\\test", ".bzr", "branch", "branch.conf"), bcp
  80. p = "c:\\test\\test\\.bzr\\"
  81. bcp = Redmine::Scm::Adapters::BazaarAdapter.branch_conf_path(p)
  82. assert_equal File.join("c:\\test\\test", ".bzr", "branch", "branch.conf"), bcp
  83. p = "c:\\test\\test"
  84. bcp = Redmine::Scm::Adapters::BazaarAdapter.branch_conf_path(p)
  85. assert_equal File.join("c:\\test\\test", ".bzr", "branch", "branch.conf"), bcp
  86. p = "\\\\server\\test\\test\\"
  87. bcp = Redmine::Scm::Adapters::BazaarAdapter.branch_conf_path(p)
  88. assert_equal File.join("\\\\server\\test\\test", ".bzr", "branch", "branch.conf"), bcp
  89. end
  90. def test_append_revisions_only_true
  91. assert_equal true, @adapter.append_revisions_only
  92. end
  93. def test_append_revisions_only_false
  94. adpt = Redmine::Scm::Adapters::BazaarAdapter.
  95. new(File.join(REPOSITORY_PATH, "empty-branch"))
  96. assert_equal false, adpt.append_revisions_only
  97. end
  98. def test_append_revisions_only_shared_repo
  99. adpt = Redmine::Scm::Adapters::BazaarAdapter.
  100. new(REPOSITORY_PATH)
  101. assert_equal false, adpt.append_revisions_only
  102. end
  103. def test_info_not_nil
  104. assert_not_nil @adapter.info
  105. end
  106. def test_info_nil
  107. adpt = Redmine::Scm::Adapters::BazaarAdapter.
  108. new("/invalid/invalid/")
  109. assert_nil adpt.info
  110. end
  111. def test_info
  112. info = @adapter.info
  113. assert_equal 4, info.lastrev.identifier.to_i
  114. end
  115. def test_info_emtpy
  116. adpt = Redmine::Scm::Adapters::BazaarAdapter.
  117. new(File.join(REPOSITORY_PATH, "empty-branch"))
  118. assert_equal 0, adpt.info.lastrev.identifier.to_i
  119. end
  120. def test_entries_path_invalid
  121. assert_equal [], @adapter.entries('invalid')
  122. end
  123. def test_entries_revision_invalid
  124. assert_nil @adapter.entries(nil, 12345678)
  125. end
  126. def test_revisions
  127. revisions = @adapter.revisions(nil, 4, 2)
  128. assert_equal 3, revisions.size
  129. assert_equal 2, revisions[2].identifier
  130. assert_equal 'jsmith@foo.bar-20071203175224-v0eog5d5wrgdrshg', revisions[2].scmid
  131. assert_equal 4, revisions[0].identifier
  132. assert_equal 'jsmith@foo.bar-20071203175422-t40bf8li5zz0c4cg', revisions[0].scmid
  133. assert_equal 2, revisions[0].paths.size
  134. assert_equal 'D', revisions[0].paths[0][:action]
  135. assert_equal '/doc-deleted.txt', revisions[0].paths[0][:path]
  136. assert_equal 'docdeleted.txt-20071203175320-iwwj561ojuubs3gt-1', revisions[0].paths[0][:revision]
  137. assert_equal 'M', revisions[0].paths[1][:action]
  138. assert_equal '/directory/doc-ls.txt', revisions[0].paths[1][:path]
  139. assert_equal 'docls.txt-20071203175005-a3hyc3mn0shl7cgu-1', revisions[0].paths[1][:revision]
  140. end
  141. def test_revisions_path_invalid
  142. assert_nil @adapter.revisions('invalid')
  143. end
  144. def test_revisions_revision_invalid
  145. assert_nil @adapter.revisions(nil, 12345678)
  146. assert_nil @adapter.revisions(nil, 12345678, 87654321)
  147. end
  148. def test_entry
  149. entry = @adapter.entry()
  150. assert_equal "", entry.path
  151. assert_equal "dir", entry.kind
  152. entry = @adapter.entry('')
  153. assert_equal "", entry.path
  154. assert_equal "dir", entry.kind
  155. assert_nil @adapter.entry('invalid')
  156. assert_nil @adapter.entry('/invalid')
  157. assert_nil @adapter.entry('/invalid/')
  158. assert_nil @adapter.entry('invalid/invalid')
  159. assert_nil @adapter.entry('invalid/invalid/')
  160. assert_nil @adapter.entry('/invalid/invalid')
  161. assert_nil @adapter.entry('/invalid/invalid/')
  162. ["doc-ls.txt", "/doc-ls.txt"].each do |path|
  163. entry = @adapter.entry(path, 2)
  164. assert_equal "doc-ls.txt", entry.path
  165. assert_equal "file", entry.kind
  166. end
  167. ["directory", "/directory", "/directory/"].each do |path|
  168. entry = @adapter.entry(path, 2)
  169. assert_equal "directory", entry.path
  170. assert_equal "dir", entry.kind
  171. end
  172. ["directory/document.txt", "/directory/document.txt"].each do |path|
  173. entry = @adapter.entry(path, 2)
  174. assert_equal "directory/document.txt", entry.path
  175. assert_equal "file", entry.kind
  176. end
  177. end
  178. private
  179. def test_scm_version_for(scm_command_version, version)
  180. @adapter.class.expects(:scm_version_from_command_line).returns(scm_command_version)
  181. assert_equal version, @adapter.class.scm_command_version
  182. end
  183. else
  184. puts "Bazaar test repository NOT FOUND. Skipping unit tests !!!"
  185. def test_fake; assert true end
  186. end
  187. end