require 'runit/testcase'
require 'runit/cui/testrunner'
require 'rexml/document'

class AttributesTester < RUNIT::TestCase
	include REXML
	def test_accessor
		doc = Document.new "<a foo:att='1' bar:att='2' att='3'/>"
		assert_equal '3', doc.root.attributes['att']
		assert_equal '2', doc.root.attributes['bar:att']
	end

	def test_each_attribute
		doc = Document.new '<a x="1" y="2"/>'
		doc.root.attributes.each_attribute {|attr|
			if attr.expanded_name == 'x'
				assert_equals '1', attr.value
			elsif attr.expanded_name == 'y'
				assert_equals '2', attr.value
			else
				assert_fail "No such attribute!!"
			end
		}
	end

	def test_each
		doc = Document.new '<a x="1" y="2"/>'
		doc.root.attributes.each {|name, value|
			if name == 'x'
				assert_equals '1', value
			elsif name == 'y'
				assert_equals '2', value
			else
				assert_fail "No such attribute!!"
			end
		}
	end

	def test_get_attribute
		doc = Document.new '<a x:foo="1" foo="2" bar="3"/>'
		assert_equals '2', doc.root.attributes.get_attribute("foo").value
		assert_equals '1', doc.root.attributes.get_attribute("x:foo").value
	end

	def test_size
		doc = Document.new "<a x='1' y='2' foo:x='3'/>"
		assert_equal 3, doc.root.attributes.length
	end

	def test_setter
		doc = Document.new "<a x:foo='1' foo='3'/>"
		doc.root.attributes['y:foo'] = '2'
		assert_equals '2', doc.root.attributes['y:foo']
		doc.root.attributes['foo'] = '4'
		assert_equals '4', doc.root.attributes['foo']
		doc.root.attributes['x:foo'] = nil
		assert_equals 2, doc.root.attributes.size
	end

	def test_delete
		doc = Document.new "<a y:foo='0' x:foo='1' foo='3' z:foo='4'/>"
		doc.root.attributes.delete 'foo'
		assert_equals 3, doc.root.attributes.size
		assert_equals '1', doc.root.attributes['x:foo']

		doc.root.attributes.delete 'x:foo'
		assert_equals 2, doc.root.attributes.size

		attr = doc.root.attributes.get_attribute('y:foo')
		doc.root.attributes.delete attr
		assert_equals 1, doc.root.attributes.size

		assert_equals '4', doc.root.attributes['z:foo']
	end

	def test_prefixes
		doc = Document.new "<a xmlns='foo' xmlns:x='bar' xmlns:y='twee' z='glorp' p:k='gru'/>"
		prefixes = doc.root.attributes.prefixes
		assert_equals 2, prefixes.size
		assert_equals 0, (prefixes - ['x', 'y']).size
	end
end
