ohloh_scm / branches / master / test / unit / hg_parser_test.rb
history
require File.dirname(__FILE__) + '/../test_helper'
module Scm::Parsers
class HgParserTest < Scm::Test
def test_empty_array
assert_equal([], HgParser.parse(''))
end
def test_log_parser_default
sample_log = <<SAMPLE
changeset: 1:b14fa4692f94
user: Jason Allen <jason@ohloh.net>
date: Tue, Jan 20 2009 11:33:17 -0800
summary: added makefile
changeset: 0:01101d8ef3ce
user: Robin Luckey <robin@ohloh.net>
date: Tue, Jan 20 2009 11:32:54 -0800
summary: Initial Checkin
SAMPLE
commits = HgParser.parse(sample_log)
assert commits
assert_equal 2, commits.size
assert_equal 'b14fa4692f94', commits[0].token
assert_equal 'Jason Allen', commits[0].committer_name
assert_equal 'jason@ohloh.net', commits[0].committer_email
assert_equal "added makefile", commits[0].message # Note \n at end of comment
assert_equal Time.utc(2009,1,20,19,33,17), commits[0].committer_date
assert_equal 0, commits[0].diffs.size
assert_equal '01101d8ef3ce', commits[1].token
assert_equal 'Robin Luckey', commits[1].committer_name
assert_equal 'robin@ohloh.net', commits[1].committer_email
assert_equal "Initial Checkin", commits[1].message # Note \n at end of comment
assert_equal Time.utc(2009,1,20,19,32,54), commits[1].committer_date
assert_equal 0, commits[1].diffs.size
end
def test_log_parser_default_partial_user_name
sample_log = <<SAMPLE
changeset: 259:45c293b71341
user: robin@ohloh.net
date: Sat, Jun 04 2005 23:37:11 -0800
summary: fix addremove
SAMPLE
commits = HgParser.parse(sample_log)
assert commits
assert_equal 1, commits.size
assert_equal '45c293b71341', commits[0].token
assert_equal 'robin@ohloh.net', commits[0].committer_name
assert !commits[0].committer_email
end
# Sometimes the log does not include a summary
def test_log_parser_default_no_summary
sample_log = <<SAMPLE
changeset: 1:b14fa4692f94
user: Jason Allen <jason@ohloh.net>
date: Tue, Jan 20 2009 11:33:17 -0800
changeset: 0:01101d8ef3ce
user: Robin Luckey <robin@ohloh.net>
date: Tue, Jan 20 2009 11:32:54 -0800
SAMPLE
commits = HgParser.parse(sample_log)
assert commits
assert_equal 2, commits.size
assert_equal 'b14fa4692f94', commits[0].token
assert_equal 'Jason Allen', commits[0].committer_name
assert_equal 'jason@ohloh.net', commits[0].committer_email
assert_equal Time.utc(2009,1,20,19,33,17), commits[0].committer_date
assert_equal 0, commits[0].diffs.size
assert_equal '01101d8ef3ce', commits[1].token
assert_equal 'Robin Luckey', commits[1].committer_name
assert_equal 'robin@ohloh.net', commits[1].committer_email
assert_equal Time.utc(2009,1,20,19,32,54), commits[1].committer_date
assert_equal 0, commits[1].diffs.size
end
def test_log_parser_verbose
sample_log = <<SAMPLE
changeset: 1:b14fa4692f94
user: Jason Allen <jason@ohloh.net>
date: Tue, Jan 20 2009 11:33:17 -0800
files: makefile
description:
added makefile
changeset: 0:01101d8ef3ce
user: Robin Luckey <robin@ohloh.net>
date: Tue, Jan 20 2009 11:32:54 -0800
files: helloworld.c
description:
Initial Checkin
SAMPLE
commits = HgParser.parse(sample_log)
assert commits
assert_equal 2, commits.size
assert_equal 'b14fa4692f94', commits[0].token
assert_equal 'Jason Allen', commits[0].committer_name
assert_equal 'jason@ohloh.net', commits[0].committer_email
assert_equal "added makefile\n", commits[0].message # Note \n at end of comment
assert_equal Time.utc(2009,1,20,19,33,17), commits[0].committer_date
assert_equal 1, commits[0].diffs.size
assert_equal 'makefile', commits[0].diffs[0].path
assert_equal '01101d8ef3ce', commits[1].token
assert_equal 'Robin Luckey', commits[1].committer_name
assert_equal 'robin@ohloh.net', commits[1].committer_email
assert_equal "Initial Checkin\n", commits[1].message # Note \n at end of comment
assert_equal Time.utc(2009,1,20,19,32,54), commits[1].committer_date
assert_equal 1, commits[1].diffs.size
assert_equal 'helloworld.c', commits[1].diffs[0].path
end
def test_styled_parser
with_hg_repository('hg') do |hg|
assert FileTest.exist?(HgStyledParser.style_path)
log = hg.run("cd #{hg.url} && hg log --style #{Scm::Parsers::HgStyledParser.style_path}")
commits = Scm::Parsers::HgStyledParser.parse(log)
assert_styled_commits(commits, false)
assert FileTest.exist?(HgStyledParser.verbose_style_path)
log = hg.run("cd #{hg.url} && hg log --style #{Scm::Parsers::HgStyledParser.verbose_style_path}")
commits = Scm::Parsers::HgStyledParser.parse(log)
assert_styled_commits(commits, true)
end
end
protected
def assert_styled_commits(commits, with_diffs=false)
assert_equal 4, commits.size
assert_equal '75532c1e1f1de55c2271f6fd29d98efbe35397c4', commits[0].token
assert_equal 'Robin Luckey', commits[0].committer_name
assert_equal 'robin@ohloh.net', commits[0].committer_email
assert Time.utc(2009,1,20,19,34,53) - commits[0].committer_date < 1 # Don't care about milliseconds
assert_equal "deleted helloworld.c\n", commits[0].message
if with_diffs
assert_equal 1, commits[0].diffs.size
assert_equal 'D', commits[0].diffs[0].action
assert_equal 'helloworld.c', commits[0].diffs[0].path
else
assert_equal [], commits[0].diffs
end
assert_equal '468336c6671cbc58237a259d1b7326866afc2817', commits[1].token
assert Time.utc(2009, 1,20,19,34,04) - commits[1].committer_date < 1
if with_diffs
assert_equal 2, commits[1].diffs.size
assert_equal 'M', commits[1].diffs[0].action
assert_equal 'helloworld.c', commits[1].diffs[0].path
assert_equal 'A', commits[1].diffs[1].action
assert_equal 'README', commits[1].diffs[1].path
else
assert_equal [], commits[0].diffs
end
end
end
end
