public void Lox_ScopeDomains()
        {
            UT_INIT();

            // we have tell alox to include more directories in the scope path
            Log.ClearSourcePathTrimRules(Inclusion.Include, false);
            Log.SetSourcePathTrimRule("*/alox/src.cs/", Inclusion.Exclude);

            Lox          lox           = new Lox("ReleaseLox");
            TextLogger   consoleLogger = Lox.CreateConsoleLogger();
            MemoryLogger ml            = new MemoryLogger();

            ml.MetaInfo.Format._()._("@%D#");
            lox.SetVerbosity(ml, Verbosity.Verbose);

            lox.SetVerbosity(consoleLogger, Verbosity.Verbose);
            lox.SetVerbosity(consoleLogger, Verbosity.Verbose, ALox.InternalDomains);

            // scope global
            lox.SetDomain("REPLACE", Scope.Global);  lox.Info("", ""); SDCHECK_RL("@/REPLACE#", ml);
            lox.SetDomain("GLOBAL", Scope.Global);  lox.Info("", ""); SDCHECK_RL("@/GLOBAL#", ml);

            lox.SetDomain(null, Scope.Global);  lox.Info("", ""); SDCHECK_RL("@/#", ml);

            // scope source
            lox.SetDomain("REPLACE", Scope.Filename);  lox.Info("", ""); CICHECK_RL("@/REPLACE#", ml);
            lox.SetDomain("FILE", Scope.Filename);  lox.Info("", ""); CICHECK_RL("@/FILE#", ml);

            // scope method
            lox.SetDomain("REPLACE", Scope.Method);  lox.Info("", ""); CICHECK_RL("@/FILE/REPLACE#", ml);
            lox.SetDomain("Method", Scope.Method);  lox.Info("", ""); CICHECK_RL("@/FILE/METHOD#", ml);
            lox.SetDomain("/ABS", Scope.Method);  lox.Info("", ""); CICHECK_RL("@/ABS#", ml);

            // unset method with null
            lox.SetDomain(null, Scope.Method);  lox.Info("", ""); CICHECK_RL("@/FILE#", ml);

            // unset method with ""
            lox.SetDomain("/METHOD", Scope.Method);  lox.Info("", ""); CICHECK_RL("@/METHOD#", ml);
            lox.SetDomain("", Scope.Method);  lox.Info("", ""); CICHECK_RL("@/FILE#", ml);
            lox.SetDomain("Method", Scope.Method);  lox.Info("", ""); CICHECK_RL("@/FILE/METHOD#", ml);

            // source path
            lox.SetDomain("REPLACE", Scope.Path);  lox.Info("", ""); CICHECK_RL("@/REPLACE/FILE/METHOD#", ml);
            lox.SetDomain("PATH", Scope.Path);  lox.Info("", ""); CICHECK_RL("@/PATH/FILE/METHOD#", ml);
            lox.SetDomain("REPLACE", Scope.Path, 1);  lox.Info("", ""); CICHECK_RL("@/REPLACE/PATH/FILE/METHOD#", ml);
            lox.SetDomain("PO1", Scope.Path, 1);  lox.Info("", ""); CICHECK_RL("@/PO1/PATH/FILE/METHOD#", ml);
            lox.SetDomain("REPLACE", Scope.Path, 2);  lox.Info("", ""); CICHECK_RL("@/REPLACE/PO1/PATH/FILE/METHOD#", ml);
            lox.SetDomain("PO2", Scope.Path, 2);  lox.Info("", ""); CICHECK_RL("@/PO2/PO1/PATH/FILE/METHOD#", ml);

            lox.SetDomain("GLOBAL", Scope.Global);  lox.Info("", ""); CICHECK_RL("@/GLOBAL/PO2/PO1/PATH/FILE/METHOD#", ml);


            // remove all previous scope domains
            lox.SetDomain("", Scope.Global);
            lox.SetDomain("", Scope.Path);
            lox.SetDomain("", Scope.Path, 1);
            lox.SetDomain("", Scope.Path, 2);
            lox.SetDomain("", Scope.Filename);
            lox.SetDomain("", Scope.Method);  lox.Info("LOC", ""); SDCHECK_RL("@/LOC#", ml);

            // Thread-related
            lox.SetDomain("T_O", Scope.ThreadOuter);  lox.Info("", ""); SDCHECK_RL("@/T_O#", ml);
            lox.SetDomain("GL", Scope.Global);  lox.Info("", ""); SDCHECK_RL("@/GL/T_O#", ml);
            lox.SetDomain("MET", Scope.Method);  lox.Info("", ""); CICHECK_RL("@/GL/T_O/MET#", ml);
            lox.Info("LOC", ""); CICHECK_RL("@/GL/T_O/MET/LOC#", ml);
            lox.SetDomain("T_I", Scope.ThreadInner);  lox.Info("", ""); CICHECK_RL("@/GL/T_O/MET/T_I#", ml);
            lox.Info("LOC", ""); CICHECK_RL("@/GL/T_O/MET/LOC/T_I#", ml);
            lox.SetDomain("T_O2", Scope.ThreadOuter);  lox.Info("", ""); CICHECK_RL("@/GL/T_O/T_O2/MET/T_I#", ml);
            lox.SetDomain("T_I2", Scope.ThreadInner);  lox.Info("", ""); CICHECK_RL("@/GL/T_O/T_O2/MET/T_I/T_I2#", ml);

            lox.SetDomain("/T_O3", Scope.ThreadOuter);  lox.Info("", ""); CICHECK_RL("@/T_O3/MET/T_I/T_I2#", ml);
            lox.SetDomain("/T_I3", Scope.ThreadInner);  lox.Info("", ""); SDCHECK_RL("@/T_I3#", ml);
            lox.SetDomain("", Scope.Method);  lox.Info("", ""); SDCHECK_RL("@/T_I3#", ml);

            lox.SetDomain("", Scope.ThreadInner);  lox.Info("", ""); SDCHECK_RL("@/T_O3/T_I/T_I2#", ml);
            lox.RemoveThreadDomain("T_IXX", Scope.ThreadInner);  lox.Info("", ""); SDCHECK_RL("@/T_O3/T_I/T_I2#", ml);
            lox.RemoveThreadDomain("T_I", Scope.ThreadInner);  lox.Info("", ""); SDCHECK_RL("@/T_O3/T_I2#", ml);
            lox.RemoveThreadDomain("", Scope.ThreadInner);  lox.Info("", ""); SDCHECK_RL("@/T_O3/T_I2#", ml);
            lox.SetDomain("", Scope.ThreadInner);  lox.Info("", ""); SDCHECK_RL("@/T_O3#", ml);
            lox.SetDomain("", Scope.ThreadOuter);  lox.Info("", ""); SDCHECK_RL("@/GL/T_O/T_O2#", ml);
            lox.SetDomain("T_O3", Scope.ThreadOuter);  lox.Info("", ""); SDCHECK_RL("@/GL/T_O/T_O2/T_O3#", ml);
            lox.RemoveThreadDomain("T_O2", Scope.ThreadOuter);  lox.Info("", ""); SDCHECK_RL("@/GL/T_O/T_O3#", ml);
            lox.RemoveThreadDomain("T_O", Scope.ThreadOuter);  lox.Info("", ""); SDCHECK_RL("@/GL/T_O3#", ml);
            lox.SetDomain("", Scope.ThreadOuter);  lox.Info("", ""); SDCHECK_RL("@/GL#", ml);
            lox.SetDomain("", Scope.Global);  lox.Info("", ""); SDCHECK_RL("@/#", ml);


            // second thread
            Thread thread = new Thread(new ParameterizedThreadStart(DomainTestThreadRun_RL));

            lox.SetDomain("THIS_THREAD", Scope.ThreadOuter);
            lox.SetDomain("OTHER_THREAD", Scope.ThreadOuter, thread);
            thread.Start(lox);
            while (thread.IsAlive)
            {
                ALIB.SleepMillis(1);
            }
            UT_EQ("@/OTHER_THREAD/DTT#", ml.MemoryLog);  ml.MemoryLog._(); ml.AutoSizes.Reset();
            lox.Info("ME", "");  UT_EQ("@/THIS_THREAD/ME#", ml.MemoryLog);  ml.MemoryLog._(); ml.AutoSizes.Reset();

            // cleanup
            lox.RemoveLogger(consoleLogger);
            lox.RemoveLogger(ml);
        }