remove Ruby 1.8 support
[gitorious:ktdreyers-dolt.git] / test / test_helper.rb
1 # encoding: utf-8
2 #--
3 #   Copyright (C) 2012-2013 Gitorious AS
4 #
5 #   This program is free software: you can redistribute it and/or modify
6 #   it under the terms of the GNU Affero General Public License as published by
7 #   the Free Software Foundation, either version 3 of the License, or
8 #   (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 Affero General Public License for more details.
14 #
15 #   You should have received a copy of the GNU Affero General Public License
16 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 #++
18 require "simplecov"
19 SimpleCov.start
20
21 require "bundler/setup"
22 require "minitest/autorun"
23 require "libdolt/view"
24 require "dolt/sinatra/actions"
25 require "tiltout"
26
27 Bundler.require(:default, :test)
28
29 module Dolt
30   module Html
31     def select(html, tag_name)
32       html.scan(/<#{tag_name}[^>]*>.*?<\/#{tag_name}>/m)
33     end
34   end
35
36   module ViewTest
37     def prepare_renderer(options = {}, helpers = nil)
38       root = File.join(File.dirname(__FILE__), "..", "views")
39       renderer = Tiltout.new(root, options)
40       renderer.helper(helpers || [Dolt::View::MultiRepository,
41           Dolt::View::Object,
42           Dolt::View::Blob,
43           Dolt::View::Tree,
44           Dolt::View::Blame,
45           Dolt::View::SyntaxHighlight,
46           Dolt::View::Commit,
47           Dolt::View::Gravatar,
48           Dolt::View::Breadcrumb])
49       renderer
50     end
51   end
52 end
53
54 module Stub
55   class Blob
56     def is_a?(type)
57       type == Rugged::Blob
58     end
59   end
60
61   class Tree
62     def is_a?(type)
63       type == Rugged::Tree
64     end
65   end
66 end
67
68 module Test
69   class App
70     def body(str = nil)
71       @body = str if !str.nil?
72       @body
73     end
74
75     def response
76       if !@response
77         @response = {}
78         def @response.status; @status; end
79         def @response.status=(status); @status = status; end
80       end
81       @response
82     end
83
84     def tree_url(repo, ref, path)
85       "/#{repo}/tree/#{ref}:#{path}"
86     end
87
88     def blob_url(repo, ref, path)
89       "/#{repo}/blob/#{ref}:#{path}"
90     end
91
92     def tree_entry_url(repo, ref, path)
93       "/#{repo}/source/#{ref}:#{path}"
94     end
95
96     def blame_url(repo, ref, path)
97       "/#{repo}/blame/#{ref}:#{path}"
98     end
99
100     def history_url(repo, ref, path)
101       "/#{repo}/history/#{ref}:#{path}"
102     end
103
104     def tree_history_url(repo, ref, path)
105       "/#{repo}/tree_history/#{ref}:#{path}"
106     end
107
108     def raw_url(repo, ref, path)
109       "/#{repo}/raw/#{ref}:#{path}"
110     end
111
112     def method_missing(name, *args, &block)
113       @actions.send(name, *args, &block)
114     end
115   end
116
117   class RedirectingApp < App
118     def redirect_refs?; true; end
119   end
120
121   class Renderer
122     attr_reader :data
123     def initialize(body = ""); @body = body; end
124
125     def render(action, data, options = {})
126       @action = action
127       @data = data
128       "#{action}:#@body"
129     end
130   end
131
132   class Lookup
133     attr_reader :repo, :ref, :path
134
135     def initialize(response)
136       @response = response
137     end
138
139     def blob(repo, ref, path)
140       respond(:blob, repo, ref, path)
141     end
142
143     def tree(repo, ref, path)
144       respond(:tree, repo, ref, path)
145     end
146
147     def tree_entry(repo, ref, path)
148       respond(:tree_entry, repo, ref, path)
149     end
150
151     def raw(repo, ref, path)
152       respond(:raw, repo, ref, path)
153     end
154
155     def blame(repo, ref, path)
156       respond(:blame, repo, ref, path)
157     end
158
159     def history(repo, ref, path, limit)
160       respond(:history, repo, ref, path)
161     end
162
163     def refs(repo)
164       respond(:refs, repo)
165     end
166
167     def tree_history(repo, ref, path, count)
168       respond(:tree_history, repo, ref, path)
169     end
170
171     def respond(type, repo, ref = nil, path = nil)
172       @repo = repo
173       @ref = ref
174       @path = path
175       data = { :ref => ref, :repository => repo }
176       data[type != :tree_entry ? type : (@response.class.to_s =~ /Tree/ ? :tree : :blob)] = @response
177       data
178     end
179
180     def rev_parse_oid(repo, ref)
181       "a" * 40
182     end
183   end
184 end