From e16eb03cf89612ac1ddde85e4935b75bf24f517f Mon Sep 17 00:00:00 2001 From: "Johnny C. Lam" Date: Sun, 6 Apr 2014 18:45:29 +0000 Subject: [PATCH] Add partial implementation of WoW API for unit-testing and development. git-svn-id: svn://svn.curseforge.net/wow/ovale/mainline/trunk@1262 d5049fe3-3747-40f7-a4b5-f36d6801af5f --- WoWAPI.lua | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 WoWAPI.lua diff --git a/WoWAPI.lua b/WoWAPI.lua new file mode 100644 index 0000000..934cc93 --- /dev/null +++ b/WoWAPI.lua @@ -0,0 +1,87 @@ +--[[-------------------------------------------------------------------- + Ovale Spell Priority + Copyright (C) 2013 Johnny C. Lam + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License in the LICENSE + file accompanying this program. +--]]-------------------------------------------------------------------- + +--[[ + This file implements parts of the WoW API for development and unit-testing. + + This file is not meant to be loaded into the addon. It should be used only + outside of the WoW environment, such as when loaded by a standalone Lua 5.1 + interpreter. + + It provides global symbols. +--]] + +-- RAID_CLASS_COLORS is useful mostly as a table to loop through the keys, which are +-- the class tokens for all playable classes. +RAID_CLASS_COLORS = RAID_CLASS_COLORS or { + DEATHKNIGHT = true, + DRUID = true, + HUNTER = true, + MAGE = true, + MONK = true, + PALADIN = true, + PRIEST = true, + ROGUE = true, + SHAMAN = true, + WARLOCK = true, + WARRIOR = true, +} + +-- wipe() is a non-standard Lua function that clears the contents of a table +-- and leaves the table pointer intact. +wipe = wipe or function(t) + for k in pairs(t) do + t[k] = nil + end +end +table.wipe = table.wipe or wipe + +-- strsplit() is a non-standard Lua function that splits a string and returns +-- multiple return values for each substring delimited by the named delimiter +-- character. +-- +-- This implementaiton is taken verbatim from http://lua-users.org/wiki/SplitJoin +strsplit = strsplit or function(delim, str, maxNb) + -- Eliminate bad cases... + if string.find(str, delim) == nil then + return str + end + if maxNb == nil or maxNb < 1 then + maxNb = 0 -- No limit + end + local result = {} + local pat = "(.-)" .. delim .. "()" + local nb = 0 + local lastPos + for part, pos in string.gfind(str, pat) do + nb = nb + 1 + result[nb] = part + lastPos = pos + if nb == maxNb then break end + end + -- Handle the last field + if nb ~= maxNb then + result[nb + 1] = string.sub(str, lastPos) + end + return unpack(result) +end + +-- LoadAddonFile() does the equivalent of dofile(), but strips out the WoW addon +-- file line that uses ... to get the file arguments. +LoadAddonFile = LoadAddonFile or function(filename) + local lineList = {} + for line in io.lines(filename) do + if not string.match(line, "^%s*local%s+[%w%s_,]*%s*=%s*[.][.][.]%s*$") then + table.insert(lineList, line) + end + end + local fileString = table.concat(lineList, "\n") + local func = loadstring(fileString) + func() +end -- 1.7.9.5