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.
264 lines
6.9 KiB
Text
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
|
|
|
|
|