module Test
	module Unit
		module Assertions

			def assert_parse(rss, assert_method, *args)
				send("assert_#{assert_method}", *args) do
					::RSS::Parser.parse(rss)
				end
				send("assert_#{assert_method}", *args) do
					::RSS::Parser.parse(rss, false).validate
				end
			end
			
			def assert_ns(prefix, uri)
				_wrap_assertion do
					begin
						yield
						flunk("Not raise NSError")
					rescue ::RSS::NSError => e
						assert_equal(prefix, e.prefix)
						assert_equal(uri, e.uri)
					end
				end
			end
			
			def assert_missing_tag(tag, parent)
				_wrap_assertion do
					begin
						yield
						flunk("Not raise MissingTagError")
					rescue ::RSS::MissingTagError => e
						assert_equal(tag, e.tag)
						assert_equal(parent, e.parent)
					end
				end
			end
			
			def assert_too_much_tag(tag, parent)
				_wrap_assertion do
					begin
						yield
						flunk("Not raise TooMuchTagError")
					rescue ::RSS::TooMuchTagError => e
						assert_equal(tag, e.tag)
						assert_equal(parent, e.parent)
					end
				end
			end
			
			def assert_missing_attribute(tag, attrname)
				_wrap_assertion do
					begin
						yield
						flunk("Not raise MissingAttributeError")
					rescue ::RSS::MissingAttributeError => e
						assert_equal(tag, e.tag)
						assert_equal(attrname, e.attribute)
					end
				end
			end
			
			def assert_not_excepted_tag(tag, parent)
				_wrap_assertion do
					begin
						yield
						flunk("Not raise NotExceptedTagError")
					rescue ::RSS::NotExceptedTagError => e
						assert_equal(tag, e.tag)
						assert_equal(parent, e.parent)
					end
				end
			end
			
			def assert_not_available_value(tag, value)
				_wrap_assertion do
					begin
						yield
						flunk("Not raise NotAvailableValueError")
					rescue ::RSS::NotAvailableValueError => e
						assert_equal(tag, e.tag)
						assert_equal(value, e.value)
					end
				end
			end
			
		end
	end
end

