summaryrefslogtreecommitdiff
path: root/spec/lib
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-09-08 20:42:12 +0300
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-09-08 20:42:12 +0300
commitbde3f25d262b13d0139276786fe9d9cba29269b8 (patch)
tree0086b3db1d762f5826c5f8a8144a75fd6ce28ae6 /spec/lib
parentc741fcab9d8f1a28b2b95e3cd2096adc5178eba6 (diff)
downloadgitlab-ce-bde3f25d262b13d0139276786fe9d9cba29269b8.tar.gz
Specs for diff parser! Yay!
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Diffstat (limited to 'spec/lib')
-rw-r--r--spec/lib/gitlab/diff/file_spec.rb25
-rw-r--r--spec/lib/gitlab/diff/parser_spec.rb95
2 files changed, 120 insertions, 0 deletions
diff --git a/spec/lib/gitlab/diff/file_spec.rb b/spec/lib/gitlab/diff/file_spec.rb
new file mode 100644
index 00000000000..074c1255930
--- /dev/null
+++ b/spec/lib/gitlab/diff/file_spec.rb
@@ -0,0 +1,25 @@
+require 'spec_helper'
+
+describe Gitlab::Diff::File do
+ include RepoHelpers
+
+ let(:project) { create(:project) }
+ let(:commit) { project.repository.commit(sample_commit.id) }
+ let(:diff) { commit.diffs.first }
+ let(:diff_file) { Gitlab::Diff::File.new(project, commit, diff) }
+
+ describe :diff_lines do
+ let(:diff_lines) { diff_file.diff_lines }
+
+ it { diff_lines.size.should == 30 }
+ it { diff_lines.first.should be_kind_of(Gitlab::Diff::Line) }
+ end
+
+ describe :blob_exists? do
+ it { diff_file.blob_exists?.should be_true }
+ end
+
+ describe :mode_changed? do
+ it { diff_file.mode_changed?.should be_false }
+ end
+end
diff --git a/spec/lib/gitlab/diff/parser_spec.rb b/spec/lib/gitlab/diff/parser_spec.rb
new file mode 100644
index 00000000000..9ec906e4f9a
--- /dev/null
+++ b/spec/lib/gitlab/diff/parser_spec.rb
@@ -0,0 +1,95 @@
+require 'spec_helper'
+
+describe Gitlab::Diff::Parser do
+ include RepoHelpers
+
+ let(:project) { create(:project) }
+ let(:commit) { project.repository.commit(sample_commit.id) }
+ let(:diff) { commit.diffs.first }
+ let(:parser) { Gitlab::Diff::Parser.new }
+
+ describe :parse do
+ let(:diff) do
+ <<eos
+--- a/files/ruby/popen.rb
++++ b/files/ruby/popen.rb
+@@ -6,12 +6,18 @@ module Popen
+
+ def popen(cmd, path=nil)
+ unless cmd.is_a?(Array)
+- raise "System commands must be given as an array of strings"
++ raise RuntimeError, "System commands must be given as an array of strings"
+ end
+
+ path ||= Dir.pwd
+- vars = { "PWD" => path }
+- options = { chdir: path }
++
++ vars = {
++ "PWD" => path
++ }
++
++ options = {
++ chdir: path
++ }
+
+ unless File.directory?(path)
+ FileUtils.mkdir_p(path)
+@@ -19,6 +25,7 @@ module Popen
+
+ @cmd_output = ""
+ @cmd_status = 0
++
+ Open3.popen3(vars, *cmd, options) do |stdin, stdout, stderr, wait_thr|
+ @cmd_output << stdout.read
+ @cmd_output << stderr.read
+eos
+ end
+
+ let(:path) { 'files/ruby/popen.rb' }
+
+ before do
+ @lines = parser.parse(diff.lines, path, path)
+ end
+
+ it { @lines.size.should == 30 }
+
+ describe 'lines' do
+ describe 'first line' do
+ let(:line) { @lines.first }
+
+ it { line.type.should == 'match' }
+ it { line.old_pos.should == 6 }
+ it { line.new_pos.should == 6 }
+ it { line.text.should == '@@ -6,12 +6,18 @@ module Popen' }
+ end
+
+ describe 'removal line' do
+ let(:line) { @lines[10] }
+
+ it { line.type.should == 'old' }
+ it { line.old_pos.should == 14 }
+ it { line.new_pos.should == 13 }
+ it { line.text.should == '- options = { chdir: path }' }
+ end
+
+ describe 'addition line' do
+ let(:line) { @lines[16] }
+
+ it { line.type.should == 'new' }
+ it { line.old_pos.should == 15 }
+ it { line.new_pos.should == 18 }
+ it { line.text.should == '+ options = {' }
+ end
+
+ describe 'unchanged line' do
+ let(:line) { @lines.last }
+
+ it { line.type.should == nil }
+ it { line.old_pos.should == 24 }
+ it { line.new_pos.should == 31 }
+ it { line.text.should == ' @cmd_output &lt;&lt; stderr.read' }
+ end
+ end
+ end
+end