dofile("wow_api.lua")
dofile("LibStub.lua")
dofile("../CallbackHandler-1.0/CallbackHandler-1.0.lua")
dofile("../AceDB-3.0/AceDB-3.0.lua")
dofile("serialize.lua")

-- Test OnProfileChanged
do
	local testdb = LibStub("AceDB-3.0"):New({})

	local triggers = {}

	local function OnCallback(message, db, ...)
		if db == testdb then
			if message == "OnProfileChanged" then
				local profile = ...
				assert(profile == "Healers" or profile == "Tanks")
			elseif message == "OnProfileDeleted" then
				local profile = ...
				assert(profile == "Healers")
			elseif message == "OnProfileCopied" then
				local profile = ...
				assert(profile == "Healers")
			elseif message == "OnNewProfile" then
				local profile = ...
				assert(profile == "Healers" or profile == "Tanks")
			end
			triggers[message] = triggers[message] and triggers[message] + 1 or 1
		end
	end

	testdb:RegisterCallback("OnProfileChanged", OnCallback)
	testdb:RegisterCallback("OnProfileDeleted", OnCallback)
	testdb:RegisterCallback("OnProfileCopied", OnCallback)
	testdb:RegisterCallback("OnDatabaseReset", OnCallback)
	testdb:RegisterCallback("OnNewProfile", OnCallback)
	testdb:ResetDB("Healers")
	testdb:SetProfile("Tanks")
	testdb:CopyProfile("Healers")
	testdb:DeleteProfile("Healers")
	assert(triggers.OnProfileChanged == 2)
	assert(triggers.OnDatabaseReset == 1)
	assert(triggers.OnProfileDeleted == 1)
	assert(triggers.OnProfileCopied == 1)
	assert(triggers.OnNewProfile == 2)
end

do
	local dbDefaults = {
		profile = { bla = 0, },
	}
	local db = LibStub("AceDB-3.0"):New({}, dbDefaults, true)
	db:RegisterCallback("OnNewProfile", function()
		db.profile.bla = 1
	end)
	db:SetProfile("blatest")
	assert(db.profile.bla == 1)
end
