##// END OF EJS Templates
scm: add test of showing *real* non ASCII contents in functional filesystem repository test....
Toshi MARUYAMA -
r5568:c5257f6e0dd9
parent child
Show More
@@ -1,108 +1,123
1 # Redmine - project management software
1 # Redmine - project management software
2 # Copyright (C) 2006-2011 Jean-Philippe Lang
2 # Copyright (C) 2006-2011 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 require File.expand_path('../../test_helper', __FILE__)
18 require File.expand_path('../../test_helper', __FILE__)
19 require 'repositories_controller'
19 require 'repositories_controller'
20
20
21 # Re-raise errors caught by the controller.
21 # Re-raise errors caught by the controller.
22 class RepositoriesController; def rescue_action(e) raise e end; end
22 class RepositoriesController; def rescue_action(e) raise e end; end
23
23
24 class RepositoriesFilesystemControllerTest < ActionController::TestCase
24 class RepositoriesFilesystemControllerTest < ActionController::TestCase
25 fixtures :projects, :users, :roles, :members, :member_roles, :repositories, :enabled_modules
25 fixtures :projects, :users, :roles, :members, :member_roles, :repositories, :enabled_modules
26
26
27 # No '..' in the repository path
27 # No '..' in the repository path
28 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/filesystem_repository'
28 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/filesystem_repository'
29 PRJ_ID = 3
29 PRJ_ID = 3
30
30
31 def setup
31 def setup
32 @ruby19_non_utf8_pass =
33 (RUBY_VERSION >= '1.9' && Encoding.default_external.to_s != 'UTF-8')
34
32 @controller = RepositoriesController.new
35 @controller = RepositoriesController.new
33 @request = ActionController::TestRequest.new
36 @request = ActionController::TestRequest.new
34 @response = ActionController::TestResponse.new
37 @response = ActionController::TestResponse.new
35 User.current = nil
38 User.current = nil
36 Setting.enabled_scm << 'Filesystem' unless Setting.enabled_scm.include?('Filesystem')
39 Setting.enabled_scm << 'Filesystem' unless Setting.enabled_scm.include?('Filesystem')
37 @repository = Repository::Filesystem.create(
40 @repository = Repository::Filesystem.create(
38 :project => Project.find(PRJ_ID),
41 :project => Project.find(PRJ_ID),
39 :url => REPOSITORY_PATH,
42 :url => REPOSITORY_PATH,
40 :path_encoding => ''
43 :path_encoding => ''
41 )
44 )
42 assert @repository
45 assert @repository
43 end
46 end
44
47
45 if File.directory?(REPOSITORY_PATH)
48 if File.directory?(REPOSITORY_PATH)
46 def test_browse_root
49 def test_browse_root
47 @repository.fetch_changesets
50 @repository.fetch_changesets
48 @repository.reload
51 @repository.reload
49 get :show, :id => PRJ_ID
52 get :show, :id => PRJ_ID
50 assert_response :success
53 assert_response :success
51 assert_template 'show'
54 assert_template 'show'
52 assert_not_nil assigns(:entries)
55 assert_not_nil assigns(:entries)
53 assert assigns(:entries).size > 0
56 assert assigns(:entries).size > 0
54 assert_not_nil assigns(:changesets)
57 assert_not_nil assigns(:changesets)
55 assert assigns(:changesets).size == 0
58 assert assigns(:changesets).size == 0
56 end
59 end
57
60
58 def test_show_no_extension
61 def test_show_no_extension
59 get :entry, :id => PRJ_ID, :path => ['test']
62 get :entry, :id => PRJ_ID, :path => ['test']
60 assert_response :success
63 assert_response :success
61 assert_template 'entry'
64 assert_template 'entry'
62 assert_tag :tag => 'th',
65 assert_tag :tag => 'th',
63 :content => '1',
66 :content => '1',
64 :attributes => { :class => 'line-num' },
67 :attributes => { :class => 'line-num' },
65 :sibling => { :tag => 'td', :content => /TEST CAT/ }
68 :sibling => { :tag => 'td', :content => /TEST CAT/ }
66 end
69 end
67
70
68 def test_entry_download_no_extension
71 def test_entry_download_no_extension
69 get :entry, :id => PRJ_ID, :path => ['test'], :format => 'raw'
72 get :entry, :id => PRJ_ID, :path => ['test'], :format => 'raw'
70 assert_response :success
73 assert_response :success
71 assert_equal 'application/octet-stream', @response.content_type
74 assert_equal 'application/octet-stream', @response.content_type
72 end
75 end
73
76
74 def test_show_non_ascii_contents
77 def test_show_non_ascii_contents
75 with_settings :repositories_encodings => 'UTF-8,EUC-JP' do
78 with_settings :repositories_encodings => 'UTF-8,EUC-JP' do
76 get :entry, :id => PRJ_ID, :path => ['japanese', 'euc-jp.txt']
79 get :entry, :id => PRJ_ID, :path => ['japanese', 'euc-jp.txt']
77 assert_response :success
80 assert_response :success
78 assert_template 'entry'
81 assert_template 'entry'
79 assert_tag :tag => 'th',
82 assert_tag :tag => 'th',
80 :content => '2',
83 :content => '2',
81 :attributes => { :class => 'line-num' },
84 :attributes => { :class => 'line-num' },
82 :sibling => { :tag => 'td', :content => /japanese/ }
85 :sibling => { :tag => 'td', :content => /japanese/ }
86 if @ruby19_non_utf8_pass
87 puts "TODO: show repository file contents test fails in Ruby 1.9 " +
88 "and Encoding.default_external is not UTF-8. " +
89 "Current value is '#{Encoding.default_external.to_s}'"
90 else
91 str_japanese = "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e"
92 str_japanese.force_encoding('UTF-8') if str_japanese.respond_to?(:force_encoding)
93 assert_tag :tag => 'th',
94 :content => '3',
95 :attributes => { :class => 'line-num' },
96 :sibling => { :tag => 'td', :content => /#{str_japanese}/ }
97 end
83 end
98 end
84 end
99 end
85
100
86 def test_show_utf16
101 def test_show_utf16
87 with_settings :repositories_encodings => 'UTF-16' do
102 with_settings :repositories_encodings => 'UTF-16' do
88 get :entry, :id => PRJ_ID, :path => ['japanese', 'utf-16.txt']
103 get :entry, :id => PRJ_ID, :path => ['japanese', 'utf-16.txt']
89 assert_response :success
104 assert_response :success
90 assert_tag :tag => 'th',
105 assert_tag :tag => 'th',
91 :content => '2',
106 :content => '2',
92 :attributes => { :class => 'line-num' },
107 :attributes => { :class => 'line-num' },
93 :sibling => { :tag => 'td', :content => /japanese/ }
108 :sibling => { :tag => 'td', :content => /japanese/ }
94 end
109 end
95 end
110 end
96
111
97 def test_show_text_file_should_send_if_too_big
112 def test_show_text_file_should_send_if_too_big
98 with_settings :file_max_size_displayed => 1 do
113 with_settings :file_max_size_displayed => 1 do
99 get :entry, :id => PRJ_ID, :path => ['japanese', 'big-file.txt']
114 get :entry, :id => PRJ_ID, :path => ['japanese', 'big-file.txt']
100 assert_response :success
115 assert_response :success
101 assert_equal 'text/plain', @response.content_type
116 assert_equal 'text/plain', @response.content_type
102 end
117 end
103 end
118 end
104 else
119 else
105 puts "Filesystem test repository NOT FOUND. Skipping functional tests !!!"
120 puts "Filesystem test repository NOT FOUND. Skipping functional tests !!!"
106 def test_fake; assert true end
121 def test_fake; assert true end
107 end
122 end
108 end
123 end
General Comments 0
You need to be logged in to leave comments. Login now