lumiera_/tests/25fundamental.tests
Ichthyostega 6b4bf0a6ea Library: allow to check if Advice was explicitly given
For context: The »Advice System« was coined a long time ago, in 2010,
based on the vague impression that it might be useful for that kind of application
we are about to build here. And, as can be expected, none of the usage situations
envisioned at that time was brought to bear. Non the less, the facility came in
handy at times, precisely because it is cross-cutting and allows to pass
information without imposing any systematic relationship between the
communication partners.

And now we've got again such a situation.
The global style manager in the UI has to build a virtual CSS path,
which is needed by drawing code somewhere deep down, and we absolutely
do not want to pass a reference to the style manager over 20 recursive calls.

The alternatives would be
 (1) to turn the style manager into a public service
 (2) to have a static access function somewhere
 (3) to use a global variable.
For rationale, (1) would be overblown, because we do not actually request
a service to do work for us, rather we need some global piece of information.
(2) would be equivalent to (1), just more confusing. And (3) is basically
what the Advice system does, with the added benefit of a clear-cut service
access point and a well defined lifecycle.

This changeset adds the ability to check if actual Advice has been published,
which allows us to invoke the (possibly expensive) GTK path building and
style context building code only once.
2019-07-13 17:00:23 +02:00

264 lines
6.9 KiB
Text

TESTING "Core Component Test Suite: fundamental concepts and frameworks" ./test-suite --group=common
TEST "basic application state" Appconfig_test <<END
return: 0
END
TEST "Advice collaboration (basics)" AdviceBasics_test <<END
return: 0
END
TEST "Advice constellations" AdviceSituations_test <<END
return: 0
END
PLANNED "Advice variants and configurations" AdviceConfiguration_test <<END
return: 0
END
PLANNED "Advice multiplicity and concurrency" AdviceMultiplicity_test <<END
return: 0
END
TEST "Advice binding patterns" AdviceBindingPattern_test <<END
out-lit: --->Binding[]
out-lit: aSymbol --->Binding[aSymbol/0()]
out-lit: a.compound_Symbol-with-various.parts --->Binding[a.compound_Symbol-with-various.parts/0()]
out-lit: trailing Garbage allowed. ☢☢ eat ☠☠☠ atomic ☠☠☠ waste ☢☢ --->Binding[Garbage/0(), allowed/0(), trailing/0()]
out-lit: a, list , of ,symbols. --->Binding[a/0(), list/0(), of/0(), symbols/0()]
out-lit: nullary(). --->Binding[nullary/0()]
out-lit: nullary( ) --->Binding[nullary/0()]
out-lit: nullary . --->Binding[nullary/0()]
out-lit: predicate( with-argument ) --->Binding[predicate/1(with-argument)]
out-lit: Binding[advice.type.dummyAdvice/0(), one/0(), three/1(four), two/0()]
out-lit: b0==Binding[]
out-lit: b1==Binding[cat1/0(), cat2/0()]
out-lit: b2==Binding[cat1/0(), cat2/0()]
out-lit: b2==Binding[advice.type.time/0(), cat1/0(), cat2/0(), cat3/1(zzz)]
return: 0
END
TEST "Advice index implementation" AdviceIndex_test <<END
return: 0
END
TEST "Dependency Singleton" Singleton_test 23 <<END
out-lit: testing TargetObj(23) as Singleton
out-lit: ctor TargetObj(23) successful
out-lit: calling a non-static method on the Singleton instance
out-lit: .....TargetObj(23): data="***********************", array[23]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,}
out-lit: dtor ~TargetObj(23) successful
return: 0
END
TEST "Dependency Singleton-Subclass" SingletonSubclass_test 13 <<END
out-lit: using the Singleton should create TargetObj(13)...
out-lit: ctor TargetObj(13) successful
out-lit: calling a non-static method on the Singleton-Implementation
out-lit: .....TargetObj(13): data="*************", array[13]={0,1,2,3,4,5,6,7,8,9,10,11,12,}
out-lit: dtor ~TargetObj(13) successful
return: 0
END
TEST "Dependency Mock Test Support" SingletonTestMock_test <<END
out-lit: TestSingO::doIt() call=1
out-lit: TestSingO::doIt() call=2
out-lit: Mock_1::doIt() call=1
out-lit: Mock_1::doIt() call=2
out-lit: Mock_1::doIt() call=3
out-lit: Mock_1::doIt() call=4
out-lit: Mock_1::doIt() call=5
out: Mock_.::doIt\(\) call=1
out-lit: TestSingO::doIt() call=3
return: 0
END
TEST "Dependency Injection flavours" DependencyFactory_test <<END
out-lit: ctor TargetObj(0) successful
out-lit: ctor TargetObj(1) successful
out-lit: ctor TargetObj(2) successful
out-lit: ctor TargetObj(3) successful
out-lit: dtor ~TargetObj(3) successful
out-lit: ctor TargetObj(4) successful
out-lit: dtor ~TargetObj(4) successful
out-lit: dtor ~TargetObj(2) successful
out-lit: dtor ~TargetObj(1) successful
out-lit: dtor ~TargetObj(0) successful
return: 0
END
TEST "Dependency Injection configuration" DependencyConfiguration_test <<END
return: 0
END
TEST "Dispatch functors into other threads" CallQueue_test <<END
return: 0
END
TEST "Lifecycle events and hooks" LifeCycle_test <<END
return: 0
END
TEST "Multithread Locking by Monitor" SyncLocking_test <<END
return: 0
END
TEST "Multithread Locking whole class" SyncClasslock_test <<END
return: 0
END
TEST "Wrapper thread-local pointers" ThreadLocal_test <<END
return: 0
END
TEST "Thread-local diagnostic context" DiagnosticContext_test <<END
return: 0
END
TEST "Wait/Notify on Object Monitor" SyncWaiting_test <<END
return: 0
END
TEST "Create 20 Threads passing context" ThreadWrapper_test <<END
return: 0
END
TEST "Waiting on Thread termination" ThreadWrapperJoin_test <<END
return: 0
END
TEST "Detect code runing in a given Thread" ThreadWrapperSelfRecognitionTest_test <<END
return: 0
END
TEST "Starting and stopping subsystems" SubsystemRunner_test <<END
out: -----singleSubsys_complete_cycle-----
out: -----singleSubsys_start_failure-----
out: -----singleSubsys_emegency_exit-----
out: -----dependentSubsys_complete_cycle-----
out: -----dependentSubsys_start_failure-----
return: 0
END
TEST "Lumiera Time Wrapper" TimeBasics_test <<END
out: .?.:..:..\....
return: 0
END
TEST "Times and time intervals" TimeValue_test <<END
return: 0
END
PLANNED "Time Quantisation" TimeQuantisation_test <<END
return: 0
END
TEST "Changing time specifications" TimeMutation_test <<END
return: 0
END
TEST "Life changing time specifications with feedback" TimeControl_test <<END
out-lit: Test-Case. Target=Duration <--feed--- TimeValue
out-lit: Test-Case. Target=Duration <--feed--- Time
out-lit: Test-Case. Target=Duration <--feed--- Duration
out-lit: Test-Case. Target=Duration <--feed--- TimeSpan
out-lit: Test-Case. Target=Duration <--feed--- QuTime
out-lit: Test-Case. Target=TimeSpan <--feed--- TimeValue
out-lit: Test-Case. Target=TimeSpan <--feed--- Time
out-lit: Test-Case. Target=TimeSpan <--feed--- Duration
out-lit: Test-Case. Target=TimeSpan <--feed--- TimeSpan
out-lit: Test-Case. Target=TimeSpan <--feed--- QuTime
out-lit: Test-Case. Target=QuTime <--feed--- TimeValue
out-lit: Test-Case. Target=QuTime <--feed--- Time
out-lit: Test-Case. Target=QuTime <--feed--- Duration
out-lit: Test-Case. Target=QuTime <--feed--- TimeSpan
out-lit: Test-Case. Target=QuTime <--feed--- QuTime
return: 0
END
TEST "Quantiser API basics" QuantiserBasics_test <<END
return: 0
END
TEST "Suppport for specific timecode formats" FormatSupport_test <<END
return: 0
END
TEST "Time formats and timecodes" TimeFormats_test <<END
out: Framecount=".+#" time = .+:..:..
out: SMPTE=".+:..:..:.." time = .+:..:..
out-lit: ----SMPTE-----
out-lit: SMPTE=" 5:42:23:13" time = 5:42:23.520
return: 0
END
TEST "Parsing time values" TimeParsing_test <<END
return: 0
END
TEST "VisitingTool_test" VisitingTool_test <<END
out: === Babbler meets Boss and BigBoss ===
out: Hello Boss, nice to meet you...
out: Hello Big Boss, nice to meet you...
out: === Babbler meets HomoSapiens and Leader ===
out: Hello Boss, nice to meet you...
return: 0
END
TEST "VisitingToolExtended_test" VisitingToolExtended_test <<END
out: === Babbler meets Boss and BigBoss ===
out: Hello Boss, nice to meet you...
out: Hello Big Boss, nice to meet you...
out: === Babbler meets HomoSapiens and Leader ===
out: Hello Boss, nice to meet you...
out: === Blatherer meets Leader and Visionary masqueraded as Chief ===
out: we-do-everything-for-YOU!
out: Hello Mr.Future, nice to meet you...
out: === Babbler masqueraded as Tool meets Leader and Visionary masqueraded as HomoSapiens ===
out: Hello Boss, nice to meet you...
out: === Babbler masqueraded as Tool meets Leader and Visionary masqueraded as Leader ===
out: Hello Boss, nice to meet you...
return: 0
END
TEST "Zombie tripwire" ZombieCheck_test <<END
return: 0
END