Mercurial > projects > mde
view mde/exception.d @ 26:611f7b9063c6
Changed the licensing and removed a few dead files.
Changed licensing to "GPL version 2 or later" to avoid future compatibility issues.
Also a unittest fix to the previous commit.
committer: Diggory Hardy <diggory.hardy@gmail.com>
author | Diggory Hardy <diggory.hardy@gmail.com> |
---|---|
date | Thu, 03 Apr 2008 18:15:02 +0100 |
parents | 2c28ee04a4ed |
children | f985c28c0ec9 |
line wrap: on
line source
/* LICENSE BLOCK Part of mde: a Modular D game-oriented Engine Copyright © 2007-2008 Diggory Hardy This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /// Contains the base class for all mde exceptions plus some exception classes. module mde.exception; /** Base class for all mde Exceptions. * * All packages should have their own base exception type extending this one, and for each package * level a CTOR taking a message should pass the message to the super. * A CTOR not taking a message and calling the super without a parameter may also be provided. * * The static string symbol * should be overriden as below so that it ends up as something like "mde.file" or * "mde.pkg.file.Class" describing where the exception was thrown. (Since only methods overload * correctly, symbol is made static and an overloadable method is used to access the correct symbol.) */ class mdeException : Exception { /// Override in derived classes to name the module where the error occured. char[] getSymbol () { return "mde"; } /// Prefix msg, e.g.: "mde.foo: message" char[] prefixedMsg () { return getSymbol() ~ ": " ~ msg; } this (char[] msg) { super(msg); } this () { // No supplied error message. super(""); } } /// Thrown when loading options fails. class optionsLoadException : mdeException { char[] getSymbol () { return super.getSymbol ~ ".options"; } this (char[] msg) { super(msg); } } /// Thrown when loading strings for the requested name and current locale fails. class L10nLoadException : mdeException { char[] getSymbol () { return super.getSymbol ~ ".i18n.I18nTranslation"; } this (char[] msg) { super(msg); } } debug (mdeUnitTest) { import tango.util.log.Log : Log, Logger; private Logger logger; static this() { logger = Log.getLogger ("mde.exception"); } unittest { // Check message prepending works correctly. mdeException mE = new optionsLoadException(""); assert (mE.getSymbol() == "mde.options", mE.getSymbol()); try { throw new mdeException ("ABC"); assert (false); } catch (mdeException e) { assert (e.msg == "ABC", e.msg); assert (e.prefixedMsg == "mde: ABC", e.prefixedMsg); } logger.info ("Unittest complete."); } }