require 'open3'
require 'runit/testcase'
require 'cgi'
require 'amrita/parts'
class TestBBS < RUNIT::TestCase
def setup
Dir::mkdir "data" unless File::directory?("data")
File::open("data/board.txt", "w") do |f|
f.puts "test\n\n\n"
f.puts "a\n\na\n"
f.puts "b\n\nb\n"
f.puts "test\n\ntest\n"
end
Dir::mkdir "data/test" unless File::directory?("data/test")
File::open("data/test/subject.txt", "w") do |f|
end
end
def teardown
system "rm -rf data"
end
def execbbs(param)
i, o, e = *(Open3::popen3("ruby -I.. ../bbsmain.cgi"))
para = param.collect do |k,v|
"#{CGI::escape(k.to_s)}=#{CGI::escape(v.to_s)}"
end.join(" ")
i.puts para
i.close
emsg = e.read
STDERR.print emsg if emsg
assert_equal("Content-Type: text/html", o.readline.chomp("\r\n"))
o.readline
ret = Amrita::HtmlParser::parse_io(o)
puts ret
ret
end
def test_top
html = execbbs({})
links = html.find_all { |e| e.tagname == "a" }
assert_equal('?&template=board&board=a', links[0][:href])
assert_equal('?&template=board&board=b', links[1][:href])
assert_equal('?&template=board&board=test', links[2][:href])
assert_equal('test', links[2].body.to_s)
end
def test_board
html = execbbs(:template=>"board", :board=>"test")
tables = html.find_all { |e| e.tagname == "table" }
assert_equal(7, tables.size)
end
def test_newthread
html = execbbs(:action=>"newthread", :board=>"test", :from=>"aaa", :mail=>"mail@amrita",
:subject=>"testthread", :message=>"hello\nhello")
assert_equal('', html.find { |e| e.tagname == "meta" }.to_s)
File::open("data/test/subject.txt") do |f|
f.read =~ /(\d*).dat<>(.*)/
threadid = $1
assert_equal("testthread", $2)
File::open("data/test/#{threadid}.dat") do |f|
a = f.read.chomp.split("<>")
assert_equal('aaa', a[0])
assert_equal('mail@amrita', a[1])
assert_equal('hello
hello', a[3])
end
end
html = execbbs(:board=>"test", :from=>"bbb", :mail=>"mail@amrita",
:subject=>"testthread2", :message=>"second\nthread")
assert_equal('', html.find { |e| e.tagname == "meta" }.to_s)
File::open("data/test/subject.txt") do |f|
l = f.readlines[0]
l =~ /(\d*).dat<>(.*)/
threadid = $1
assert_equal("testthread2", $2)
File::open("data/test/#{threadid}.dat") do |f|
a = f.readline.chomp.split("<>")
assert_equal('bbb', a[0])
assert_equal('mail@amrita', a[1])
assert_equal('second
thread', a[3])
end
end
end
def test_newarticle
threadid = nil
html = execbbs(:action=>"newarticle", :board=>"test", :from=>"aaa", :mail=>"mail@amrita",
:subject=>"testthread", :message=>"hello\nhello")
assert_equal('', html.find { |e| e.tagname == "meta" }.to_s)
File::open("data/test/subject.txt") do |f|
f.read =~ /(\d*).dat<>(.*)/
threadid = $1
end
html = execbbs(:board=>"test", :from=>"xxx", :mail=>"mail@amrita",
:thread=>threadid, :message=>"12345")
assert_equal('', html.find { |e| e.tagname == "meta" }.to_s)
File::open("data/test/#{threadid}.dat") do |f|
a = f.readline.chomp.split("<>")
assert_equal('aaa', a[0])
assert_equal('mail@amrita', a[1])
assert_equal('hello
hello', a[3])
a = f.readline.chomp.split("<>")
assert_equal('xxx', a[0])
assert_equal('mail@amrita', a[1])
assert_equal('12345', a[3])
end
html = execbbs(:template=>"board", :board=>"test")
tables = html.find_all { |e| e.tagname == "table" }
assert_equal(8, tables.size)
html = execbbs(:template=>"thread", :board=>"test", :thread=>threadid)
p html.to_s
tables = html.find_all { |e| e.tagname == "dt" }
assert_equal(2, tables.size)
end
end
#--- main program ----
if __FILE__ == $0
require 'runit/cui/testrunner'
if ARGV.size == 0
RUNIT::CUI::TestRunner.run(TestBBS.suite)
else
ARGV.each do |method|
RUNIT::CUI::TestRunner.run(TestBBS.new(method))
end
end
end