require 'spec_helper' require 'rails_helper' require 'ostruct' describe "Git diff" do before(:each) do # 参照此diff的输出 http://ucloudgit.trustie.net/Hjqreturn/pullrequesttest111/commit/f36f15bc1d3e256a4fa5115d82201af72301884e @content = ''' [{"diff":"--- a/readme\n+++ b/readme\n@@ -1,7 +1,8 @@\n 邀请界面\n 1.1 界面设计 (已处理)\n- 1.2 改写成html功能 (已处理)\n+sdkfsjkdf\n 1.3 集成到游戏邀请功能 (已处理)\n+adfjsdajlfk\n \n 微信登录功能\n 2.1 集成sdk (已处理)\n","new_path":"readme","old_path":"readme","a_mode":"100644","b_mode":"100644","new_file":false,"renamed_file":false,"deleted_file":false}] ''' @output = %Q{ | 1 | 1 | 邀请界面 | 2 | 2 | 1.1 界面设计 (已处理) | 3 | |- 1.2 改写成html功能 (已处理) | | 3 |+sdkfsjkdf | 4 | 4 | 1.3 集成到游戏邀请功能 (已处理) | | 5 |+adfjsdajlfk | 5 | 6 | } + %Q{ | 6 | 7 | 微信登录功能 | 7 | 8 | 2.1 集成sdk (已处理) } end it "正确解析diff文件" do diff = ActiveSupport::JSON.decode(@content).first diff = OpenStruct.new(diff) diff_file = Trustie::Gitlab::Diff::File.new(diff) output = '' diff_file.diff_lines.each_with_index do |line, index| type = line.type last_line = line.new_pos line_old = line.old_pos.to_s if type == 'match' ## 表示没有修改,两个都要显示行号 output += "|#{line_old.center(4)}|#{last_line.to_s.center(4)}|#{line.text}\n" else old_line = type == 'new' ? ' '*4: line_old new_line = type == 'old' ? ' '*4: last_line output += "|#{old_line.to_s.center(4)}|#{new_line.to_s.center(4)}|#{line.text}\n" end end puts output expect(output.strip).to eq(@output.strip) end end