package gplx.xowa.mediawiki.includes; import gplx.frameworks.tests.GfoTstr; import gplx.xowa.mediawiki.XophpArray; import gplx.xowa.mediawiki.XophpCallback; import gplx.xowa.mediawiki.XophpCallbackOwner; import org.junit.Before; import org.junit.Test; public class XomwHooksTest { private XomwHooksTestCallbackOwner callbackOwner; @Before public void setUp() throws Exception { callbackOwner = new XomwHooksTestCallbackOwner(); XomwHooks.clearAll(); } @Test public void isRegistered() { GfoTstr.EqBoolN(XomwHooks.isRegistered("test1")); } @Test public void register() { GfoTstr.EqBoolN(XomwHooks.isRegistered("test1")); XomwHooks.register("test1", callbackOwner.NewCallback("test1")); GfoTstr.EqBoolY(XomwHooks.isRegistered("test1")); } @Test public void clear() { GfoTstr.EqBoolN(XomwHooks.isRegistered("test1")); XomwHooks.register("test1", callbackOwner.NewCallback("test1")); GfoTstr.EqBoolY(XomwHooks.isRegistered("test1")); XomwHooks.clear("test1"); GfoTstr.EqBoolN(XomwHooks.isRegistered("test1")); } @Test public void getHandlers() { XomwHooks.register("test1", callbackOwner.NewCallback("test1a")); XomwHooks.register("test1", callbackOwner.NewCallback("test1b")); XomwHooks.register("test2", callbackOwner.NewCallback("test2")); XophpArray handlers = XomwHooks.getHandlers("test1"); GfoTstr.EqLines ( new String[] {"test1a", "test1b"} , extractKeysFromCallbackAry(handlers) ); } @Test public void run() { XomwHooks.register("test1", callbackOwner.NewCallback("test1a")); XomwHooks.register("test1", callbackOwner.NewCallback("test1b")); XomwHooks.register("test2", callbackOwner.NewCallback("test2")); GfoTstr.EqBoolY(XomwHooks.run("test1", XophpArray.New(1, 2, 3))); GfoTstr.Eq("test1a:3;test1b:3;", callbackOwner.Result()); } private static String[] extractKeysFromCallbackAry(XophpArray callbacks) { int len = callbacks.Len(); String[] rv = new String[len]; for (int i = 0; i < len; i++) { XophpCallback callback = (XophpCallback)callbacks.Get_at(i); rv[i] = callback.MethodName(); } return rv; } } class XomwHooksTestCallbackOwner implements XophpCallbackOwner { public String Result() {return result;} private String result = ""; @Override public Object Call(String method, Object... args) { result += method + ":" + (args == null ? -1 : ((XophpArray)args[0]).Len()) + ";"; return null; // NOTE: XomwHooks throws error if non-null } }