# Get printer Job Template attributes using get-printer-attributes
{
	# The name of the test...
	NAME "Get printer Job Template attributes using Get-Printer-Attributes"

	# The operation to use
	OPERATION Get-Printer-Attributes

	# Attributes, starting in the operation group...
	GROUP operation-attributes-tag
	ATTR charset attributes-charset utf-8
	ATTR language attributes-natural-language en
	ATTR uri printer-uri $uri
	ATTR keyword requested-attributes job-template,media-col-database

	# What statuses are OK?
	STATUS successful-ok
	STATUS successful-ok-ignored-or-substituted-attributes

	# What attributes do we expect?
	EXPECT copies-default
	EXPECT copies-supported
	EXPECT media-col-database
}
