def test(store):
	from Foo import Foo

	f = Foo()

	# legal sets:
	f.setRi(1)
	f.setNi(2)
	f.setRs('a')
	f.setNs('b')
	f.setNi(None)
	f.setNs(None)

	# illegal sets:
	errMsg = 'Set None for required attribute, but no exception was raised.'
	try:
		f.setRi(None)
	except Exception:
		pass
	else:
		raise Exception, errMsg

	try:
		f.setRs(None)
	except Exception:
		pass
	else:
		raise Exception, errMsg

	store.addObject(f)
	store.saveChanges()
	store.clear()

	results = store.fetchObjectsOfClass(Foo)
	assert len(results) == 1
	f = results[0]
	assert f.ri() == 1
	assert f.ni() is None
	assert f.rs() == 'a'
	assert f.ns() is None

	return

	from MiscUtils.DataTable import DataTable

	dataSource = '''
b:int,i:int,l:long,f:float,s:string
0,0,0,0,0
0,0,0,0.0,0.0
1,1,1,1,a
0,-1,8589934592,-3.14,'x'
'''

	data = DataTable()
	data.readString(dataSource)

	for values in data:
		print values

		t = Thing()
		t.setB(values['b'])
		t.setI(values['i'])
		t.setL(values['l'])
		t.setF(values['f'])
		t.setS(values['s'])

		store.addObject(t)
		store.saveChanges()

		# Try an immediate fetch
		results = store.fetchObjectsOfClass(Thing)
		assert len(results) == 1
		# This tests the uniquing feature of MiddleKit:
		assert id(results[0]) == id(t)

		# Clear the store's in memory objects and try a fetch again
		store.clear()
		results = store.fetchObjectsOfClass(Thing)
		assert len(results) == 1
		assert results[0].allAttrs() == t.allAttrs()

		# Make sure what we got from the store is what we put in
		assert t.b() == values['b']
		assert t.i() == values['i']
		assert t.l() == values['l']
		assert t.f() == values['f']
		assert t.s() == values['s']

		# Reset
		store.clear()
		store.executeSQLTransaction('delete from Thing;')
		del t
