Quantcast
-- Create WoWMock sandbox.
local root = "../"
dofile(root .. "WoWMock.lua")
local sandbox = WoWMock:NewSandbox()

-- Addon files needed to run methods from OvaleAST.
-- The order of the the files is as listed in Ovale.toc.
local addonFiles = {
	"Ovale.lua",
	"Localization.lua",
	"Options.lua",
	"Debug.lua",
	-- Profiling module.
	"Profiler.lua",
	-- Utility modules.
	"Pool.lua",
	"Queue.lua",
	-- Core modules.
	"AST.lua",
	"Condition.lua",
	"Lexer.lua",
	"Runes.lua",
	"Scripts.lua",
	"SpellBook.lua",
	"Stance.lua",
	"State.lua",
	-- Additional modules.
	"conditions.lua",
	"scripts/files.xml",
}

-- Load addon files into the sandbox.
sandbox:SetAddonName("Ovale")
for _, filename in ipairs(addonFiles) do
	sandbox:LoadAddonFile(filename, root)
end

-- Fire events to simulate the addon-loading process.
sandbox:Fire("ADDON_LOADED")

-- Enter sandbox.
setfenv(1, sandbox)

local OvaleAST = Ovale.OvaleAST
local separator = string.rep("-", 80)

-- Parse the default Ovale script for the class.
local class = UnitClass()
local source = "Ovale"
local ast = OvaleAST:ParseScript(source)
if ast then
	OvaleAST:Optimize(ast)
	print(OvaleAST:NodeToString(ast))
	print(separator)
	print(OvaleAST:Unparse(ast))
	OvaleAST:Release(ast)
	print(separator)
	OvaleAST:DebugAST()
end