libdolt 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +3 -0
- data/Gemfile.lock +56 -0
- data/Rakefile +10 -0
- data/Readme.md +99 -0
- data/lib/libdolt/async/when.rb +128 -0
- data/lib/libdolt/disk_repo_resolver.rb +39 -0
- data/lib/libdolt/git/blame.rb +112 -0
- data/lib/libdolt/git/commit.rb +73 -0
- data/lib/libdolt/git/repository.rb +139 -0
- data/lib/libdolt/git/submodule.rb +35 -0
- data/lib/libdolt/git/tree.rb +42 -0
- data/lib/libdolt/repo_actions.rb +95 -0
- data/lib/libdolt/version.rb +21 -0
- data/lib/libdolt/view/binary_blob_embedder.rb +41 -0
- data/lib/libdolt/view/blame.rb +57 -0
- data/lib/libdolt/view/blob.rb +97 -0
- data/lib/libdolt/view/breadcrumb.rb +47 -0
- data/lib/libdolt/view/commit.rb +27 -0
- data/lib/libdolt/view/gravatar.rb +29 -0
- data/lib/libdolt/view/markup.rb +44 -0
- data/lib/libdolt/view/multi_repository.rb +27 -0
- data/lib/libdolt/view/object.rb +44 -0
- data/lib/libdolt/view/single_repository.rb +27 -0
- data/lib/libdolt/view/smart_blob_renderer.rb +33 -0
- data/lib/libdolt/view/syntax_highlight.rb +40 -0
- data/lib/libdolt/view/tab_width.rb +30 -0
- data/lib/libdolt/view/tree.rb +100 -0
- data/lib/libdolt/view.rb +23 -0
- data/lib/libdolt.rb +29 -0
- data/libdolt.gemspec +35 -0
- data/test/libdolt/async/when_test.rb +112 -0
- data/test/libdolt/git/blame_test.rb +128 -0
- data/test/libdolt/git/commit_test.rb +89 -0
- data/test/libdolt/git/repository_test.rb +186 -0
- data/test/libdolt/repo_actions_test.rb +236 -0
- data/test/libdolt/templates/blame_test.rb +54 -0
- data/test/libdolt/templates/blob_test.rb +116 -0
- data/test/libdolt/templates/commits_test.rb +59 -0
- data/test/libdolt/templates/raw_test.rb +39 -0
- data/test/libdolt/templates/refs_test.rb +36 -0
- data/test/libdolt/templates/tree_history_test.rb +91 -0
- data/test/libdolt/templates/tree_test.rb +63 -0
- data/test/libdolt/view/binary_blob_embedder_test.rb +49 -0
- data/test/libdolt/view/blame_test.rb +122 -0
- data/test/libdolt/view/blob_test.rb +116 -0
- data/test/libdolt/view/breadcrumb_test.rb +46 -0
- data/test/libdolt/view/commit_test.rb +31 -0
- data/test/libdolt/view/gravatar_test.rb +30 -0
- data/test/libdolt/view/markup_test.rb +70 -0
- data/test/libdolt/view/multi_repository_test.rb +35 -0
- data/test/libdolt/view/object_test.rb +83 -0
- data/test/libdolt/view/single_repository_test.rb +30 -0
- data/test/libdolt/view/smart_blob_renderer_test.rb +38 -0
- data/test/libdolt/view/syntax_highlight_test.rb +80 -0
- data/test/libdolt/view/tab_width_test.rb +40 -0
- data/test/libdolt/view/tree_test.rb +196 -0
- data/test/test_helper.rb +50 -0
- data/views/500.erb +22 -0
- data/views/blame.erb +42 -0
- data/views/blob.erb +31 -0
- data/views/commits.erb +26 -0
- data/views/index.erb +25 -0
- data/views/layout.erb +45 -0
- data/views/raw.erb +19 -0
- data/views/refs.erb +22 -0
- data/views/tree.erb +50 -0
- data/views/tree_history.erb +19 -0
- metadata +326 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#--
|
3
|
+
# Copyright (C) 2012 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 "test_helper"
|
19
|
+
require "libdolt/view/multi_repository"
|
20
|
+
|
21
|
+
describe Dolt::View::MultiRepository do
|
22
|
+
include Dolt::Html
|
23
|
+
include Dolt::View::MultiRepository
|
24
|
+
|
25
|
+
describe "#repo_url" do
|
26
|
+
it "returns url prefixed with repository" do
|
27
|
+
assert_equal "/gitorious/some/url", repo_url("gitorious", "/some/url")
|
28
|
+
end
|
29
|
+
|
30
|
+
it "returns url prefixed with repository name containing slashes" do
|
31
|
+
url = repo_url("gitorious/mainline", "/some/url")
|
32
|
+
assert_equal "/gitorious/mainline/some/url", url
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#--
|
3
|
+
# Copyright (C) 2012 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 "test_helper"
|
19
|
+
require "libdolt/view/single_repository"
|
20
|
+
require "libdolt/view/multi_repository"
|
21
|
+
require "libdolt/view/object"
|
22
|
+
|
23
|
+
describe Dolt::View::Object do
|
24
|
+
include Dolt::View::Object
|
25
|
+
|
26
|
+
describe "single repo mode" do
|
27
|
+
include Dolt::View::SingleRepository
|
28
|
+
|
29
|
+
it "returns blob url" do
|
30
|
+
object = { :type => "blob", :name => "Gemfile" }
|
31
|
+
url = object_url("myrepo", "master", "", object)
|
32
|
+
assert_equal "/blob/master:Gemfile", url
|
33
|
+
end
|
34
|
+
|
35
|
+
it "returns tree url" do
|
36
|
+
object = { :type => "tree", :name => "models" }
|
37
|
+
url = object_url("myrepo", "master", "app", object)
|
38
|
+
assert_equal "/tree/master:app/models", url
|
39
|
+
end
|
40
|
+
|
41
|
+
it "returns blob url in directory" do
|
42
|
+
object = { :type => "blob", :name => "Gemfile" }
|
43
|
+
url = object_url("myrepo", "master", "lib/mything", object)
|
44
|
+
assert_equal "/blob/master:lib/mything/Gemfile", url
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "multi repo mode" do
|
49
|
+
include Dolt::View::MultiRepository
|
50
|
+
|
51
|
+
it "returns blob url" do
|
52
|
+
object = { :type => "blob", :name => "Gemfile" }
|
53
|
+
url = object_url("myrepo", "master", "", object)
|
54
|
+
assert_equal "/myrepo/blob/master:Gemfile", url
|
55
|
+
end
|
56
|
+
|
57
|
+
it "returns blob url in directory" do
|
58
|
+
object = { :type => "blob", :name => "Gemfile" }
|
59
|
+
url = object_url("myrepo", "master", "lib/mything", object)
|
60
|
+
assert_equal "/myrepo/blob/master:lib/mything/Gemfile", url
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "#object_icon_class" do
|
65
|
+
it "returns blob icon type" do
|
66
|
+
assert_equal "icon-file", object_icon_class({ :type => :blob })
|
67
|
+
end
|
68
|
+
|
69
|
+
it "returns tree icon type" do
|
70
|
+
assert_equal "icon-folder-close", object_icon_class({ :type => :tree })
|
71
|
+
end
|
72
|
+
|
73
|
+
it "returns submodule icon type" do
|
74
|
+
assert_equal "icon-hdd", object_icon_class({ :type => :submodule })
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
it "links submodule object to submodule" do
|
79
|
+
url = "git://gitorious.org/gitorious/ui3.git"
|
80
|
+
object = { :type => :submodule, :url => url }
|
81
|
+
assert_equal url, object_url("gitorious", "master", "vendor", object)
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#--
|
3
|
+
# Copyright (C) 2012 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 "test_helper"
|
19
|
+
require "libdolt/view/single_repository"
|
20
|
+
|
21
|
+
describe Dolt::View::SingleRepository do
|
22
|
+
include Dolt::Html
|
23
|
+
include Dolt::View::SingleRepository
|
24
|
+
|
25
|
+
describe "#repo_url" do
|
26
|
+
it "returns url unmodified" do
|
27
|
+
assert_equal "/some/url", repo_url("gitorious", "/some/url")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#--
|
3
|
+
# Copyright (C) 2012 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 "test_helper"
|
19
|
+
require "libdolt/view/smart_blob_renderer"
|
20
|
+
|
21
|
+
describe Dolt::View::SmartBlobRenderer do
|
22
|
+
include Dolt::View::Blob
|
23
|
+
include Dolt::View::SmartBlobRenderer
|
24
|
+
|
25
|
+
describe "#format_text_blob" do
|
26
|
+
it "highlights a Ruby file" do
|
27
|
+
html = format_text_blob("file.rb", "class File\n attr_reader :path\nend")
|
28
|
+
|
29
|
+
assert_match "<span class=\"k\">class</span>", html
|
30
|
+
assert_match "<span class=\"nc\">File</span>", html
|
31
|
+
end
|
32
|
+
|
33
|
+
it "wraps markup in .gts-markup" do
|
34
|
+
html = render_markup("file.md", "# Hey")
|
35
|
+
assert_match "<div class=\"gts-markup\">", html
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#--
|
3
|
+
# Copyright (C) 2012 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 "test_helper"
|
19
|
+
require "makeup/syntax_highlighter"
|
20
|
+
require "libdolt/view/single_repository"
|
21
|
+
require "libdolt/view/multi_repository"
|
22
|
+
require "libdolt/view/blob"
|
23
|
+
require "libdolt/view/syntax_highlight"
|
24
|
+
|
25
|
+
describe Dolt::View::Blob do
|
26
|
+
include Dolt::View::Blob
|
27
|
+
include Dolt::View::SyntaxHighlight
|
28
|
+
|
29
|
+
describe "#highlight" do
|
30
|
+
it "highlights a Ruby file" do
|
31
|
+
html = highlight("file.rb", "class File\n attr_reader :path\nend")
|
32
|
+
|
33
|
+
assert_match "<span class=\"k\">class</span>", html
|
34
|
+
assert_match "<span class=\"nc\">File</span>", html
|
35
|
+
end
|
36
|
+
|
37
|
+
it "highlights a YAML file" do
|
38
|
+
html = highlight("file.yml", "something:\n is: true")
|
39
|
+
|
40
|
+
assert_match "<span class=\"l-Scalar-Plain\">something</span>", html
|
41
|
+
assert_match "<span class=\"p-Indicator\">:", html
|
42
|
+
end
|
43
|
+
|
44
|
+
it "highlights an .htm file" do
|
45
|
+
html = highlight("file.htm", "<h1>Hey</h1>")
|
46
|
+
|
47
|
+
assert_match "<span class=\"nt\"><h1></span>", html
|
48
|
+
assert_match "Hey<span class=\"nt\"></h1></span>", html
|
49
|
+
end
|
50
|
+
|
51
|
+
it "highlights file with custom suffix" do
|
52
|
+
Makeup::SyntaxHighlighter.add_lexer_alias("derp", "rb")
|
53
|
+
html = highlight("file.derp", "class File")
|
54
|
+
|
55
|
+
assert_match "<span class=\"k\">class</span>", html
|
56
|
+
assert_match "<span class=\"nc\">File</span>", html
|
57
|
+
end
|
58
|
+
|
59
|
+
it "skips highlighting if lexer is missing" do
|
60
|
+
html = highlight("file.trololol", "Yeah yeah yeah")
|
61
|
+
|
62
|
+
assert_equal "Yeah yeah yeah", html
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "#format_blob" do
|
67
|
+
it "highlights a Ruby file with line nums" do
|
68
|
+
html = format_blob("file.rb", "class File\n attr_reader :path\nend")
|
69
|
+
|
70
|
+
assert_match "<li class=\"L1\">", html
|
71
|
+
assert_match "<span class=\"k\">class</span>", html
|
72
|
+
end
|
73
|
+
|
74
|
+
it "includes lexer as class name" do
|
75
|
+
html = format_blob("file.rb", "class File\n attr_reader :path\nend")
|
76
|
+
|
77
|
+
assert_match "rb", html
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#--
|
3
|
+
# Copyright (C) 2012 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 "test_helper"
|
19
|
+
require "libdolt/view/tab_width"
|
20
|
+
|
21
|
+
describe Dolt::View::TabWidth do
|
22
|
+
include Dolt::View::Blob
|
23
|
+
include Dolt::View::TabWidth
|
24
|
+
|
25
|
+
describe "#format_whitespace" do
|
26
|
+
it "limits width of whitespace" do
|
27
|
+
Dolt::View::TabWidth.tab_width = 4
|
28
|
+
html = format_whitespace("class File\n\tattr_reader :path\nend")
|
29
|
+
|
30
|
+
assert_match(/ attr_reader/, html)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "uses wide tabs in formatted blobs" do
|
34
|
+
Dolt::View::TabWidth.tab_width = 12
|
35
|
+
html = format_text_blob("file.rb", "class File\n\tattr_reader :path\nend")
|
36
|
+
|
37
|
+
assert_match(/ attr_reader/, html)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,196 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#--
|
3
|
+
# Copyright (C) 2012 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 "test_helper"
|
19
|
+
require "libdolt/view/single_repository"
|
20
|
+
require "libdolt/view/object"
|
21
|
+
require "libdolt/view/tree"
|
22
|
+
require "ostruct"
|
23
|
+
|
24
|
+
describe Dolt::View::Tree do
|
25
|
+
include Dolt::Html
|
26
|
+
include Dolt::View::SingleRepository
|
27
|
+
include Dolt::View::Object
|
28
|
+
include Dolt::View::Tree
|
29
|
+
|
30
|
+
describe "#tree_entries" do
|
31
|
+
before do
|
32
|
+
async = { :name => "async", :type => :tree }
|
33
|
+
disk_repo_resolver = { :type => :blob, :name => "disk_repo_resolver.rb" }
|
34
|
+
git = { :type => :tree, :name => "git" }
|
35
|
+
repo_actions = { :type => :blob, :name => "repo_actions.rb" }
|
36
|
+
sinatra = { :type => :tree, :name => "sinatra" }
|
37
|
+
version = { :type => :blob, :name => "version.rb" }
|
38
|
+
view_rb = { :type => :blob, :name => "view.rb" }
|
39
|
+
view = { :type => :tree, :name => "view" }
|
40
|
+
@tree = OpenStruct.new({ :entries => [async, disk_repo_resolver, git,
|
41
|
+
repo_actions, sinatra, version,
|
42
|
+
view_rb, view] })
|
43
|
+
end
|
44
|
+
|
45
|
+
it "groups tree by type, dirs first" do
|
46
|
+
entries = tree_entries(@tree)
|
47
|
+
|
48
|
+
assert_equal :tree, entries[0][:type]
|
49
|
+
assert_equal :tree, entries[1][:type]
|
50
|
+
assert_equal :tree, entries[2][:type]
|
51
|
+
assert_equal :tree, entries[3][:type]
|
52
|
+
assert_equal :blob, entries[4][:type]
|
53
|
+
assert_equal :blob, entries[5][:type]
|
54
|
+
assert_equal :blob, entries[6][:type]
|
55
|
+
assert_equal :blob, entries[7][:type]
|
56
|
+
end
|
57
|
+
|
58
|
+
it "sorts by name" do
|
59
|
+
entries = tree_entries(@tree)
|
60
|
+
|
61
|
+
assert_equal "async", entries[0][:name]
|
62
|
+
assert_equal "git", entries[1][:name]
|
63
|
+
assert_equal "sinatra", entries[2][:name]
|
64
|
+
assert_equal "view", entries[3][:name]
|
65
|
+
assert_equal "disk_repo_resolver.rb", entries[4][:name]
|
66
|
+
assert_equal "repo_actions.rb", entries[5][:name]
|
67
|
+
assert_equal "version.rb", entries[6][:name]
|
68
|
+
assert_equal "view.rb", entries[7][:name]
|
69
|
+
end
|
70
|
+
|
71
|
+
it "lumps submodules in with directories" do
|
72
|
+
async = { :name => "async", :type => :tree }
|
73
|
+
disk_repo_resolver = { :type => :blob, :name => "disk_repo_resolver.rb" }
|
74
|
+
git = { :type => :submodule, :name => "git" }
|
75
|
+
tree = OpenStruct.new({ :entries => [async, disk_repo_resolver, git] })
|
76
|
+
entries = tree_entries(tree)
|
77
|
+
|
78
|
+
assert_equal :tree, entries[0][:type]
|
79
|
+
assert_equal :submodule, entries[1][:type]
|
80
|
+
assert_equal :blob, entries[2][:type]
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe "#partition_path" do
|
85
|
+
it "partitions root into double array" do
|
86
|
+
parts = partition_path("")
|
87
|
+
assert_equal [[""]], parts
|
88
|
+
|
89
|
+
parts = partition_path("/")
|
90
|
+
assert_equal [[""]], parts
|
91
|
+
|
92
|
+
parts = partition_path("./")
|
93
|
+
assert_equal [[""]], parts
|
94
|
+
end
|
95
|
+
|
96
|
+
it "partitions single directory" do
|
97
|
+
parts = partition_path("lib")
|
98
|
+
assert_equal [["", "lib"]], parts
|
99
|
+
end
|
100
|
+
|
101
|
+
it "partitions two directories" do
|
102
|
+
parts = partition_path("lib/dolt")
|
103
|
+
assert_equal [["", "lib"], ["dolt"]], parts
|
104
|
+
end
|
105
|
+
|
106
|
+
it "partitions multiple directories" do
|
107
|
+
parts = partition_path("lib/dolt/git/help")
|
108
|
+
assert_equal [["", "lib"], ["dolt"], ["git"], ["help"]], parts
|
109
|
+
end
|
110
|
+
|
111
|
+
it "ignore trailing slash" do
|
112
|
+
parts = partition_path("lib/dolt/")
|
113
|
+
assert_equal [["", "lib"], ["dolt"]], parts
|
114
|
+
end
|
115
|
+
|
116
|
+
it "chunks up leading path" do
|
117
|
+
parts = partition_path("lib/dolt/very/deep", 3)
|
118
|
+
assert_equal [["", "lib", "dolt"], ["very"], ["deep"]], parts
|
119
|
+
end
|
120
|
+
|
121
|
+
it "partitions short path with maxdepth" do
|
122
|
+
parts = partition_path("lib", 3)
|
123
|
+
assert_equal [["", "lib"]], parts
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
describe "#accumulate_path" do
|
128
|
+
it "accumulates partitioned path" do
|
129
|
+
parts = accumulate_path(partition_path("lib/dolt/very/deep", 3))
|
130
|
+
assert_equal [["", "lib", "lib/dolt"], ["lib/dolt/very"], ["lib/dolt/very/deep"]], parts
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
describe "#tree_context" do
|
135
|
+
def context(path, maxdepth = nil)
|
136
|
+
tree_context("gitorious", "master", accumulate_path(partition_path(path, maxdepth)))
|
137
|
+
end
|
138
|
+
|
139
|
+
it "renders root as empty string" do
|
140
|
+
assert_equal "", context("")
|
141
|
+
assert_equal "", context("/")
|
142
|
+
assert_equal "", context("./")
|
143
|
+
end
|
144
|
+
|
145
|
+
it "renders single path item as table row" do
|
146
|
+
assert_equal 1, select(context("lib"), "tr").length
|
147
|
+
assert_equal 1, select(context("./lib"), "tr").length
|
148
|
+
end
|
149
|
+
|
150
|
+
it "includes link to root in single table row" do
|
151
|
+
assert_equal 2, select(context("lib"), "a").length
|
152
|
+
end
|
153
|
+
|
154
|
+
it "renders single path item in cell" do
|
155
|
+
assert_equal 1, select(context("lib"), "td").length
|
156
|
+
end
|
157
|
+
|
158
|
+
it "renders single path item as link" do
|
159
|
+
# Two, because there's always a link to the root directory
|
160
|
+
assert_equal 2, select(context("lib"), "a").length
|
161
|
+
assert_match /lib/, select(context("lib"), "a")[1]
|
162
|
+
end
|
163
|
+
|
164
|
+
it "renders single path item with open folder icon" do
|
165
|
+
assert_match /icon-folder-open/, select(context("lib"), "i").first
|
166
|
+
end
|
167
|
+
|
168
|
+
it "renders two path items as two table rows" do
|
169
|
+
assert_equal 2, select(context("lib/dolt"), "tr").length
|
170
|
+
end
|
171
|
+
|
172
|
+
it "renders two path items with colspan in first row" do
|
173
|
+
assert_match /colspan="6"/, select(context("lib/dolt"), "tr").first
|
174
|
+
assert_match /colspan="5"/, select(context("lib/dolt"), "tr")[1]
|
175
|
+
tr = select(context("lib/dolt"), "tr")[1]
|
176
|
+
assert_equal 2, select(tr, "td").length
|
177
|
+
end
|
178
|
+
|
179
|
+
it "renders condensed first entry with slashes" do
|
180
|
+
links = select(context("src/phorkie/Database/Adapter", 3), "a")
|
181
|
+
|
182
|
+
assert_equal "<a href=\"/tree/master:\"><i class=\"icon icon-folder-open\"></i> /</a>", links.first
|
183
|
+
assert_equal "<a href=\"/tree/master:src\"> src</a>", links[1]
|
184
|
+
assert_equal "<a href=\"/tree/master:src/phorkie\">/ phorkie</a>", links[2]
|
185
|
+
end
|
186
|
+
|
187
|
+
it "renders long condensed first entry with slashes" do
|
188
|
+
links = select(context("src/phorkie/Database/Adapter/Elasticsearch", 3), "a")
|
189
|
+
|
190
|
+
assert_equal "<a href=\"/tree/master:\"><i class=\"icon icon-folder-open\"></i> /</a>", links.first
|
191
|
+
assert_equal "<a href=\"/tree/master:src\"> src</a>", links[1]
|
192
|
+
assert_equal "<a href=\"/tree/master:src/phorkie\">/ phorkie</a>", links[2]
|
193
|
+
assert_equal "<a href=\"/tree/master:src/phorkie/Database\">/ Database</a>", links[3]
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#--
|
3
|
+
# Copyright (C) 2012 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 "bundler/setup"
|
19
|
+
require "minitest/autorun"
|
20
|
+
require "em/minitest/spec"
|
21
|
+
require "eventmachine"
|
22
|
+
require "libdolt/view"
|
23
|
+
require "tiltout"
|
24
|
+
|
25
|
+
Bundler.require(:default, :test)
|
26
|
+
|
27
|
+
module Dolt
|
28
|
+
module Html
|
29
|
+
def select(html, tag_name)
|
30
|
+
html.scan(/<#{tag_name}[^>]*>.*?<\/#{tag_name}>/m)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
module ViewTest
|
35
|
+
def prepare_renderer(options = {}, helpers = nil)
|
36
|
+
root = File.join(File.dirname(__FILE__), "..", "views")
|
37
|
+
renderer = Tiltout.new(root, options)
|
38
|
+
renderer.helper(helpers || [Dolt::View::MultiRepository,
|
39
|
+
Dolt::View::Object,
|
40
|
+
Dolt::View::Blob,
|
41
|
+
Dolt::View::Tree,
|
42
|
+
Dolt::View::Blame,
|
43
|
+
Dolt::View::SyntaxHighlight,
|
44
|
+
Dolt::View::Commit,
|
45
|
+
Dolt::View::Gravatar,
|
46
|
+
Dolt::View::Breadcrumb])
|
47
|
+
renderer
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/views/500.erb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
<%#
|
2
|
+
# encoding: utf-8
|
3
|
+
#--
|
4
|
+
# Copyright (C) 2012 Gitorious AS
|
5
|
+
#
|
6
|
+
# This program is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU Affero General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU Affero General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Affero General Public License
|
17
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#++
|
19
|
+
%>
|
20
|
+
<h1><%= @title = "An error occurred" %></h1>
|
21
|
+
<h2><%= error.respond_to?(:message) ? error.message : error %></h2>
|
22
|
+
<p><a href="<%= tree_url(repository, ref, "") %>">Go back</a></p>
|
data/views/blame.erb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
<%#
|
2
|
+
# encoding: utf-8
|
3
|
+
#--
|
4
|
+
# Copyright (C) 2012 Gitorious AS
|
5
|
+
#
|
6
|
+
# This program is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU Affero General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU Affero General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Affero General Public License
|
17
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#++
|
19
|
+
%>
|
20
|
+
<% @title = "Blame #{path} in #{repository}:master" %>
|
21
|
+
|
22
|
+
<div class="gts-file gts-browser">
|
23
|
+
<div id="gts-ref-selector-ph"></div>
|
24
|
+
<ul class="pull-right gts-blob-view">
|
25
|
+
<li><a href="<%= blob_url(repository, ref, path) %>">Blob content</a></li>
|
26
|
+
<li class="active">Blame</li>
|
27
|
+
<li><a href="<%= history_url(repository, ref, path) %>">History</a></li>
|
28
|
+
<li><a href="<%= raw_url(repository, ref, path) %>">Raw blob</a></li>
|
29
|
+
</ul>
|
30
|
+
<%= breadcrumb(repository, ref, path) %>
|
31
|
+
<table class="gts-code-listing">
|
32
|
+
<% annotations = blame_annotations(blame) %>
|
33
|
+
<% lines = blame_lines(path, blame) %>
|
34
|
+
<% annotations.length.times do |i| %>
|
35
|
+
<tr>
|
36
|
+
<%= blame_annotation_cell(annotations[i]) %>
|
37
|
+
<td class="linenum L<%= i + 1 %>"><%= i + 1 %></td>
|
38
|
+
<%= blame_code_cell(lines[i]) %>
|
39
|
+
</tr>
|
40
|
+
<% end %>
|
41
|
+
</table>
|
42
|
+
</div>
|
data/views/blob.erb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
<%#
|
2
|
+
# encoding: utf-8
|
3
|
+
#--
|
4
|
+
# Copyright (C) 2012 Gitorious AS
|
5
|
+
#
|
6
|
+
# This program is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU Affero General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU Affero General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Affero General Public License
|
17
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#++
|
19
|
+
%>
|
20
|
+
<% @title = "#{path} in #{repository}:master" %>
|
21
|
+
<div class="gts-file gts-browser">
|
22
|
+
<div id="gts-ref-selector-ph"></div>
|
23
|
+
<ul class="pull-right gts-blob-view">
|
24
|
+
<li class="active">Blob content</li>
|
25
|
+
<li><a href="<%= blame_url(repository, ref, path) %>">Blame</a></li>
|
26
|
+
<li><a href="<%= history_url(repository, ref, path) %>">History</a></li>
|
27
|
+
<li><a href="<%= raw_url(repository, ref, path) %>">Raw blob</a></li>
|
28
|
+
</ul>
|
29
|
+
<%= breadcrumb(repository, ref, path) %>
|
30
|
+
<%= format_blob(path, blob.content, repository, ref) %>
|
31
|
+
</div>
|