You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2021/06/06 16:25:13 UTC

[isis] 03/08: ISIS-2717: adds refguide-index for testing/fixtures module

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-2717
in repository https://gitbox.apache.org/repos/asf/isis.git

commit bbf835987857bc5e7977e6ce50fef6f27931240a
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Jun 6 15:58:47 2021 +0100

    ISIS-2717: adds refguide-index for testing/fixtures module
---
 .../IsisIntegrationTestAbstractWithFixtures.adoc   |  12 ++
 .../fixturescripts/BuilderScriptAbstract.adoc      |  17 +++
 .../fixturescripts/BuilderScriptWithResult.adoc    |  14 ++
 .../fixturescripts/BuilderScriptWithoutResult.adoc |  13 ++
 .../applib/fixturescripts/ExecutionParameters.adoc |  49 +++++++
 .../fixturescripts/ExecutionParametersService.adoc |  17 +++
 .../applib/fixturescripts/FixtureResult.adoc       |  17 +++
 .../applib/fixturescripts/FixtureResultList.adoc   |  36 ++++++
 .../applib/fixturescripts/FixtureScript.adoc       |  63 +++++++++
 .../applib/fixturescripts/FixtureScripts.adoc      | 142 +++++++++++++++++++++
 .../FixtureScript~ExecutionContext.adoc            | 132 +++++++++++++++++++
 .../fixturespec/FixtureScriptsSpecification.adoc   |  44 +++++++
 .../applib/modules/ModuleWithFixtures.adoc         |  50 ++++++++
 .../applib/modules/ModuleWithFixturesService.adoc  |  17 +++
 .../applib/setup/PersonaEnumPersistAll.adoc        |  17 +++
 .../teardown/jdo/TeardownFixtureJdoAbstract.adoc   |  12 ++
 16 files changed, 652 insertions(+)

diff --git a/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/IsisIntegrationTestAbstractWithFixtures.adoc b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/IsisIntegrationTestAbstractWithFixtures.adoc
new file mode 100644
index 0000000..8c042dc
--- /dev/null
+++ b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/IsisIntegrationTestAbstractWithFixtures.adoc
@@ -0,0 +1,12 @@
+= IsisIntegrationTestAbstractWithFixtures
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+
+== API
+
+[source,java]
+.IsisIntegrationTestAbstractWithFixtures.java
+----
+class IsisIntegrationTestAbstractWithFixtures {
+}
+----
+
diff --git a/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/BuilderScriptAbstract.adoc b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/BuilderScriptAbstract.adoc
new file mode 100644
index 0000000..2649d1e
--- /dev/null
+++ b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/BuilderScriptAbstract.adoc
@@ -0,0 +1,17 @@
+= BuilderScriptAbstract
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+
+== API
+
+[source,java]
+.BuilderScriptAbstract.java
+----
+class BuilderScriptAbstract<T> {
+  BuilderScriptAbstract<T> build(final FixtureScript parentFixtureScript, final ExecutionContext executionContext)
+  T objectFor(final PersonaWithBuilderScript<BuilderScriptAbstract<T>> persona, final ExecutionContext executionContext)
+  T findUsing(final PersonaWithFinder<T> persona)
+  BuilderScriptAbstract<T> setPrereq(WithPrereqs.Block<T> prereq)
+  void execPrereqs(final ExecutionContext executionContext)
+}
+----
+
diff --git a/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/BuilderScriptWithResult.adoc b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/BuilderScriptWithResult.adoc
new file mode 100644
index 0000000..f50ddc2
--- /dev/null
+++ b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/BuilderScriptWithResult.adoc
@@ -0,0 +1,14 @@
+= BuilderScriptWithResult
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+
+== API
+
+[source,java]
+.BuilderScriptWithResult.java
+----
+class BuilderScriptWithResult<T> {
+  @Getter(onMethod = @__({ @Override }))
+public T object;
+}
+----
+
diff --git a/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/BuilderScriptWithoutResult.adoc b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/BuilderScriptWithoutResult.adoc
new file mode 100644
index 0000000..d4588be
--- /dev/null
+++ b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/BuilderScriptWithoutResult.adoc
@@ -0,0 +1,13 @@
+= BuilderScriptWithoutResult
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+
+== API
+
+[source,java]
+.BuilderScriptWithoutResult.java
+----
+class BuilderScriptWithoutResult {
+  Object getObject()
+}
+----
+
diff --git a/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/ExecutionParameters.adoc b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/ExecutionParameters.adoc
new file mode 100644
index 0000000..1e9e99c
--- /dev/null
+++ b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/ExecutionParameters.adoc
@@ -0,0 +1,49 @@
+= ExecutionParameters
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+
+== API
+
+[source,java]
+.ExecutionParameters.java
+----
+class ExecutionParameters {
+  ExecutionParameters(final String parameters)
+  Map<String, String> asKeyValueMap(final String parameters)
+  String getParameters()
+  String getParameter(final String parameterName)
+  T getParameterAsT(final String parameterName, final Class<T> cls)
+  Boolean getParameterAsBoolean(final String parameterName)
+  Byte getParameterAsByte(final String parameterName)
+  Short getParameterAsShort(final String parameterName)
+  Integer getParameterAsInteger(final String parameterName)
+  Long getParameterAsLong(final String parameterName)
+  Float getParameterAsFloat(final String parameterName)
+  Double getParameterAsDouble(final String parameterName)
+  Character getParameterAsCharacter(final String parameterName)
+  BigInteger getParameterAsBigInteger(final String parameterName)
+  BigDecimal getParameterAsBigDecimal(final String parameterName)
+  LocalDate getParameterAsLocalDate(final String parameterName)
+  LocalDateTime getParameterAsLocalDateTime(final String parameterName)
+  T getParameterAsEnum(final String parameterName, final Class<T> enumClass)
+  Map<String, String> getParameterMap()
+  void setParameterIfNotPresent(final String parameterName, final String parameterValue)
+  void setParameter(final String parameterName, final Boolean parameterValue)
+  void setParameter(final String parameterName, final Byte parameterValue)
+  void setParameter(final String parameterName, final Short parameterValue)
+  void setParameter(final String parameterName, final Integer parameterValue)
+  void setParameter(final String parameterName, final Long parameterValue)
+  void setParameter(final String parameterName, final Float parameterValue)
+  void setParameter(final String parameterName, final Double parameterValue)
+  void setParameter(final String parameterName, final Character parameterValue)
+  void setParameter(final String parameterName, final BigInteger parameterValue)
+  void setParameter(final String parameterName, final java.util.Date parameterValue)
+  void setParameter(final String parameterName, final java.sql.Date parameterValue)
+  void setParameter(final String parameterName, final LocalDate parameterValue)
+  void setParameter(final String parameterName, final LocalDateTime parameterValue)
+  void setParameter(final String parameterName, final DateTime parameterValue)
+  void setParameter(final String parameterName, final BigDecimal parameterValue)
+  void setParameter(final String parameterName, final Enum<?> parameterValue)
+  void setParameter(final String parameterName, final String parameterValue)
+}
+----
+
diff --git a/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/ExecutionParametersService.adoc b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/ExecutionParametersService.adoc
new file mode 100644
index 0000000..931ac52
--- /dev/null
+++ b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/ExecutionParametersService.adoc
@@ -0,0 +1,17 @@
+= ExecutionParametersService
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+
+Acts as a factory by the xref:refguide:testing:index/fixtures/applib/fixturescripts/FixtureScripts.adoc[FixtureScripts] when instantiating the _FixtureScript.ExecutionContext_ .
+
+Factoring this out as a service potentially allows for extensions to parsing; and also acts as an insurance policy to allow this part of the testing framework to be patched if the chosen parsing algorithms need refinement in the future).
+
+== API
+
+[source,java]
+.ExecutionParametersService.java
+----
+class ExecutionParametersService {
+  ExecutionParameters newExecutionParameters(final String parameters)
+}
+----
+
diff --git a/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/FixtureResult.adoc b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/FixtureResult.adoc
new file mode 100644
index 0000000..87a7815
--- /dev/null
+++ b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/FixtureResult.adoc
@@ -0,0 +1,17 @@
+= FixtureResult
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+
+== API
+
+[source,java]
+.FixtureResult.java
+----
+class FixtureResult {
+  // secman seeding
+public static final String LOGICAL_TYPE_NAME;
+  Object getObject()
+  void setObject(Object object)
+  String getClassName()
+}
+----
+
diff --git a/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/FixtureResultList.adoc b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/FixtureResultList.adoc
new file mode 100644
index 0000000..4fa16cf
--- /dev/null
+++ b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/FixtureResultList.adoc
@@ -0,0 +1,36 @@
+= FixtureResultList
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+
+Collecting parameter.
+
+Instantiate using _FixtureScripts#newExecutionContext(String)_
+
+== API
+
+[source,java]
+.FixtureResultList.java
+----
+class FixtureResultList {
+  FixtureResultList(final FixtureScripts fixtureScripts, final FixtureScript.ExecutionContext executionContext)
+  T add(final FixtureScript script, final T object)
+  T add(final FixtureScript fixtureScript, final String key, final T object)     // <.>
+  List<FixtureResult> getResults()
+  String nextItemFor(final FixtureScript script)
+  T lookup(final String key, Class<T> cls)
+}
+----
+
+<.> xref:#add__FixtureScript_String_T[add(FixtureScript, String, T)]
++
+--
+Wraps the object within a xref:refguide:testing:index/fixtures/applib/fixturescripts/FixtureResult.adoc[FixtureResult] and add to this list.
+--
+
+== Members
+
+[#add__FixtureScript_String_T]
+=== add(FixtureScript, String, T)
+
+Wraps the object within a xref:refguide:testing:index/fixtures/applib/fixturescripts/FixtureResult.adoc[FixtureResult] and add to this list.
+
+If the object is not yet persisted, then the _FixtureScripts#getNonPersistedObjectsStrategy() FixtureScripts_ ' configuration will determine whether it is _FixtureScripts.NonPersistedObjectsStrategy#PERSIST eagerly persisted_ or simply _FixtureScripts.NonPersistedObjectsStrategy#IGNORE ignored_ .
diff --git a/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/FixtureScript.adoc b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/FixtureScript.adoc
new file mode 100644
index 0000000..a4e7ba5
--- /dev/null
+++ b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/FixtureScript.adoc
@@ -0,0 +1,63 @@
+= FixtureScript
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+
+== API
+
+[source,java]
+.FixtureScript.java
+----
+class FixtureScript {
+  public static final FixtureScript NOOP;
+  FixtureScript()     // <.>
+  FixtureScript(final String friendlyName, final String localName)     // <.>
+  String getQualifiedName()
+  List<FixtureResult> run(final String parameters, final FixtureScripts fixtureScripts)     // <.>
+  String validateRun(final String parameters)     // <.>
+  String pathWith(final String subkey)
+}
+----
+
+<.> xref:#FixtureScript__[FixtureScript()]
++
+--
+Initializes a fixture, with _#getFriendlyName()_ and _#getLocalName()_ derived from the class name.
+--
+<.> xref:#FixtureScript__String_String[FixtureScript(String, String)]
++
+--
+Initializes a fixture.
+--
+<.> xref:#run__String_FixtureScripts[run(String, FixtureScripts)]
++
+--
+Entry point for xref:refguide:testing:index/fixtures/applib/fixturescripts/FixtureScripts.adoc[FixtureScripts] service to call.
+--
+<.> xref:#validateRun__String[validateRun(String)]
++
+--
+Optional hook to validate parameters.
+--
+
+== Members
+
+[#FixtureScript__]
+=== FixtureScript()
+
+Initializes a fixture, with _#getFriendlyName()_ and _#getLocalName()_ derived from the class name.
+
+[#FixtureScript__String_String]
+=== FixtureScript(String, String)
+
+Initializes a fixture.
+
+[#run__String_FixtureScripts]
+=== run(String, FixtureScripts)
+
+Entry point for xref:refguide:testing:index/fixtures/applib/fixturescripts/FixtureScripts.adoc[FixtureScripts] service to call.
+
+Package-visibility only, not public API.
+
+[#validateRun__String]
+=== validateRun(String)
+
+Optional hook to validate parameters.
diff --git a/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/FixtureScripts.adoc b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/FixtureScripts.adoc
new file mode 100644
index 0000000..ae753b7
--- /dev/null
+++ b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/FixtureScripts.adoc
@@ -0,0 +1,142 @@
+= FixtureScripts
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+
+== API
+
+[source,java]
+.FixtureScripts.java
+----
+class FixtureScripts {
+  // secman seeding
+public static final String LOGICAL_TYPE_NAME;
+  public static final String PACKAGE_PREFIX;     // <.>
+  FixtureScripts(final Optional<FixtureScriptsSpecificationProvider> fixtureScriptsSpecificationProvider, final ServiceRegistry serviceRegistry)
+  NonPersistedObjectsStrategy getNonPersistedObjectsStrategy()
+  MultipleExecutionStrategy getMultipleExecutionStrategy()     // <.>
+  List<FixtureResult> runFixtureScript(final String fixtureScriptName, final String parameters)
+  List<FixtureResult> runFixtureScript(final FixtureScript fixtureScript, final String parameters)
+  String disableRunFixtureScript()
+  String default0RunFixtureScript()
+  Set<String> choices0RunFixtureScript()
+  String validateRunFixtureScript(final String fixtureScriptName, final String parameters)
+  Object recreateObjectsAndReturnFirst()
+  boolean hideRecreateObjectsAndReturnFirst()
+  void run(final FixtureScript... fixtureScriptList)
+  void runPersonas(PersonaWithBuilderScript<? extends BuilderScriptAbstract<?>>... personaScripts)
+  T runPersona(final PersonaWithBuilderScript<? extends BuilderScriptAbstract<? extends T>> persona)
+  T runBuilder(final BuilderScriptAbstract<T> builderScript)     // <.>
+  T runBuilderScriptNonTransactional(final BuilderScriptAbstract<T> builderScript)     // <.>
+  String findFixtureScriptNameFor(final Class<? extends FixtureScript> fixtureScriptClass)
+  FixtureScript.ExecutionContext newExecutionContext(final String parameters)
+  String mementoFor(final FixtureScript fs)
+  void initOf(final String xml, final FixtureScript fs)
+  FixtureResult newFixtureResult(final FixtureScript script, final String subkey, final Object object, final boolean firstTime)
+  String titleOf(final FixtureResult fixtureResult)
+  T fixtureScript(final PersonaWithBuilderScript<BuilderScriptAbstract<T>> persona)     // <.>
+  void runFixtureScript(final FixtureScript... fixtureScriptList)     // <.>
+  T runBuilderScript(final BuilderScriptAbstract<T> builderScript)     // <.>
+}
+----
+
+<.> xref:#PACKAGE_PREFIX[PACKAGE_PREFIX]
++
+--
+The package prefix to search for fixture scripts. This default value will result in no fixture scripts being found. However, normally it will be overridden.
+--
+<.> xref:#getMultipleExecutionStrategy__[getMultipleExecutionStrategy()]
++
+--
+Global setting as to how to handle fixture scripts that are executed more than once. See _MultipleExecutionStrategy_ for more details.
+--
+<.> xref:#runBuilder__BuilderScriptAbstract[runBuilder(BuilderScriptAbstract)]
++
+--
+Runs the builderScript within its own transactional boundary.
+--
+<.> xref:#runBuilderScriptNonTransactional__BuilderScriptAbstract[runBuilderScriptNonTransactional(BuilderScriptAbstract)]
++
+--
+Runs the builderScript without its own transactional boundary.The caller is responsible to provide a transactional context/boundary.
+--
+<.> xref:#fixtureScript__PersonaWithBuilderScript[fixtureScript(PersonaWithBuilderScript)]
++
+--
+[WARNING]
+====
+[red]#_deprecated:_#
+
+renamed to _#runPersona(PersonaWithBuilderScript)_
+====
+--
+<.> xref:#runFixtureScript__FixtureScript[runFixtureScript(FixtureScript)]
++
+--
+[WARNING]
+====
+[red]#_deprecated:_#
+
+renamed to _#run(FixtureScript...)_
+====
+--
+<.> xref:#runBuilderScript__BuilderScriptAbstract[runBuilderScript(BuilderScriptAbstract)]
++
+--
+[WARNING]
+====
+[red]#_deprecated:_#
+
+renamed to _#runBuilder(BuilderScriptAbstract)_
+====
+--
+
+== Members
+
+[#PACKAGE_PREFIX]
+=== PACKAGE_PREFIX
+
+The package prefix to search for fixture scripts. This default value will result in no fixture scripts being found. However, normally it will be overridden.
+
+[#getMultipleExecutionStrategy__]
+=== getMultipleExecutionStrategy()
+
+Global setting as to how to handle fixture scripts that are executed more than once. See _MultipleExecutionStrategy_ for more details.
+
+[#runBuilder__BuilderScriptAbstract]
+=== runBuilder(BuilderScriptAbstract)
+
+Runs the builderScript within its own transactional boundary.
+
+[#runBuilderScriptNonTransactional__BuilderScriptAbstract]
+=== runBuilderScriptNonTransactional(BuilderScriptAbstract)
+
+Runs the builderScript without its own transactional boundary.The caller is responsible to provide a transactional context/boundary.
+
+[#fixtureScript__PersonaWithBuilderScript]
+=== fixtureScript(PersonaWithBuilderScript)
+
+[WARNING]
+====
+[red]#_deprecated:_#
+
+renamed to _#runPersona(PersonaWithBuilderScript)_
+====
+
+[#runFixtureScript__FixtureScript]
+=== runFixtureScript(FixtureScript)
+
+[WARNING]
+====
+[red]#_deprecated:_#
+
+renamed to _#run(FixtureScript...)_
+====
+
+[#runBuilderScript__BuilderScriptAbstract]
+=== runBuilderScript(BuilderScriptAbstract)
+
+[WARNING]
+====
+[red]#_deprecated:_#
+
+renamed to _#runBuilder(BuilderScriptAbstract)_
+====
diff --git a/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/FixtureScript~ExecutionContext.adoc b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/FixtureScript~ExecutionContext.adoc
new file mode 100644
index 0000000..5cac98c
--- /dev/null
+++ b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/FixtureScript~ExecutionContext.adoc
@@ -0,0 +1,132 @@
+= FixtureScript.ExecutionContext
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+
+== API
+
+[source,java]
+.FixtureScript~ExecutionContext.java
+----
+class ExecutionContext {
+  public static final ExecutionContext NOOP;     // <.>
+  ExecutionContext(final String parameters, final FixtureScripts fixtureScripts)
+  ExecutionContext create(final ExecutionParameters executionParameters, final FixtureScripts fixtureScripts)
+  String getParameters()
+  Map<String, String> getParameterMap()
+  String getParameter(final String parameterName)
+  T getParameterAsT(final String parameterName, final Class<T> cls)
+  Boolean getParameterAsBoolean(final String parameterName)
+  Byte getParameterAsByte(final String parameterName)
+  Short getParameterAsShort(final String parameterName)
+  Integer getParameterAsInteger(final String parameterName)
+  Long getParameterAsLong(final String parameterName)
+  Float getParameterAsFloat(final String parameterName)
+  Double getParameterAsDouble(final String parameterName)
+  Character getParameterAsCharacter(final String parameterName)
+  BigInteger getParameterAsBigInteger(final String parameterName)
+  BigDecimal getParameterAsBigDecimal(final String parameterName)
+  LocalDate getParameterAsLocalDate(final String parameterName)
+  LocalDateTime getParameterAsLocalDateTime(final String parameterName)
+  T getParameterAsEnum(final String parameterName, final Class<T> enumClass)
+  void setParameterIfNotPresent(final String parameterName, final String parameterValue)
+  void setParameter(final String parameterName, final Boolean parameterValue)
+  void setParameter(final String parameterName, final Byte parameterValue)
+  void setParameter(final String parameterName, final Short parameterValue)
+  void setParameter(final String parameterName, final Integer parameterValue)
+  void setParameter(final String parameterName, final Long parameterValue)
+  void setParameter(final String parameterName, final Float parameterValue)
+  void setParameter(final String parameterName, final Double parameterValue)
+  void setParameter(final String parameterName, final Character parameterValue)
+  void setParameter(final String parameterName, final BigInteger parameterValue)
+  void setParameter(final String parameterName, final java.util.Date parameterValue)
+  void setParameter(final String parameterName, final java.sql.Date parameterValue)
+  void setParameter(final String parameterName, final LocalDate parameterValue)
+  void setParameter(final String parameterName, final LocalDateTime parameterValue)
+  void setParameter(final String parameterName, final org.joda.time.DateTime parameterValue)
+  void setParameter(final String parameterName, final BigDecimal parameterValue)
+  void setParameter(final String parameterName, final Enum<?> parameterValue)
+  void setParameter(final String parameterName, final String parameterValue)
+  List<FixtureResult> getResults()
+  T addResult(final FixtureScript script, final T object)
+  T addResult(final FixtureScript script, final String key, final T object)
+  T lookup(final String key, final Class<T> cls)
+  void executeChild(final FixtureScript callingFixtureScript, final PersonaWithBuilderScript<?> personaWithBuilderScript)
+  T executeChildT(final FixtureScript callingFixtureScript, final PersonaWithBuilderScript<F> personaWithBuilderScript)
+  void executeChild(final FixtureScript callingFixtureScript, final FixtureScript childFixtureScript)     // <.>
+  void executeChildren(final FixtureScript callingFixtureScript, final PersonaWithBuilderScript<?>... personaWithBuilderScripts)
+  void executeChildren(final FixtureScript callingFixtureScript, final Class<T> personaClass)
+  void executeChildren(final FixtureScript callingFixtureScript, final FixtureScript... fixtureScripts)
+  void executeChildren(final FixtureScript callingFixtureScript, final List<FixtureScript> fixtureScripts)
+  void executeChildren(final FixtureScript callingFixtureScript, final Stream<FixtureScript> fixtureScripts)
+  T executeChildT(final FixtureScript callingFixtureScript, final T childFixtureScript)     // <.>
+  void executeChild(final FixtureScript callingFixtureScript, final String localNameOverride, final FixtureScript childFixtureScript)     // <.>
+  T executeChildT(final FixtureScript callingFixtureScript, final String localNameOverride, final T childFixtureScript)     // <.>
+  List<FixtureScript> getPreviouslyExecuted()     // <.>
+  int roundup(final int n, final int roundTo)
+  T clearUserData(final Class<T> cls)
+}
+----
+
+<.> xref:#NOOP[NOOP]
++
+--
+Null implementation, to assist with unit testing of xref:refguide:testing:index/fixtures/applib/fixturescripts/FixtureScript.adoc[FixtureScript] s.
+--
+<.> xref:#executeChild__FixtureScript_FixtureScript[executeChild(FixtureScript, FixtureScript)]
++
+--
+Executes a child xref:refguide:testing:index/fixtures/applib/fixturescripts/FixtureScript.adoc[FixtureScript] , injecting services into it first, and (for any results that are _FixtureScript.ExecutionContext#addResult(FixtureScript, Object)_ added), uses a key that is derived from the fixture's class name.
+--
+<.> xref:#executeChildT__FixtureScript_T[executeChildT(FixtureScript, T)]
++
+--
+Executes a child xref:refguide:testing:index/fixtures/applib/fixturescripts/FixtureScript.adoc[FixtureScript] , injecting services into it first, and (for any results that are _FixtureScript.ExecutionContext#addResult(FixtureScript, Object)_ added), uses a key that is derived from the fixture's class name.
+--
+<.> xref:#executeChild__FixtureScript_String_FixtureScript[executeChild(FixtureScript, String, FixtureScript)]
++
+--
+Executes a child xref:refguide:testing:index/fixtures/applib/fixturescripts/FixtureScript.adoc[FixtureScript] , injecting services into it first, and (for any results that are _FixtureScript.ExecutionContext#addResult(FixtureScript, Object)_ added), uses a key that overriding the default name of the fixture script with one more meaningful in the context of this fixture.
+--
+<.> xref:#executeChildT__FixtureScript_String_T[executeChildT(FixtureScript, String, T)]
++
+--
+Executes a child xref:refguide:testing:index/fixtures/applib/fixturescripts/FixtureScript.adoc[FixtureScript] , injecting services into it first, and (for any results that are _FixtureScript.ExecutionContext#addResult(FixtureScript, Object)_ added), uses a key that overriding the default name of the fixture script with one more meaningful in the context of this fixture.
+--
+<.> xref:#getPreviouslyExecuted__[getPreviouslyExecuted()]
++
+--
+Returns a list of the xref:refguide:testing:index/fixtures/applib/fixturescripts/FixtureScript.adoc[FixtureScript] instances that have already been executed.
+--
+
+== Members
+
+[#NOOP]
+=== NOOP
+
+Null implementation, to assist with unit testing of xref:refguide:testing:index/fixtures/applib/fixturescripts/FixtureScript.adoc[FixtureScript] s.
+
+[#executeChild__FixtureScript_FixtureScript]
+=== executeChild(FixtureScript, FixtureScript)
+
+Executes a child xref:refguide:testing:index/fixtures/applib/fixturescripts/FixtureScript.adoc[FixtureScript] , injecting services into it first, and (for any results that are _FixtureScript.ExecutionContext#addResult(FixtureScript, Object)_ added), uses a key that is derived from the fixture's class name.
+
+[#executeChildT__FixtureScript_T]
+=== executeChildT(FixtureScript, T)
+
+Executes a child xref:refguide:testing:index/fixtures/applib/fixturescripts/FixtureScript.adoc[FixtureScript] , injecting services into it first, and (for any results that are _FixtureScript.ExecutionContext#addResult(FixtureScript, Object)_ added), uses a key that is derived from the fixture's class name.
+
+[#executeChild__FixtureScript_String_FixtureScript]
+=== executeChild(FixtureScript, String, FixtureScript)
+
+Executes a child xref:refguide:testing:index/fixtures/applib/fixturescripts/FixtureScript.adoc[FixtureScript] , injecting services into it first, and (for any results that are _FixtureScript.ExecutionContext#addResult(FixtureScript, Object)_ added), uses a key that overriding the default name of the fixture script with one more meaningful in the context of this fixture.
+
+[#executeChildT__FixtureScript_String_T]
+=== executeChildT(FixtureScript, String, T)
+
+Executes a child xref:refguide:testing:index/fixtures/applib/fixturescripts/FixtureScript.adoc[FixtureScript] , injecting services into it first, and (for any results that are _FixtureScript.ExecutionContext#addResult(FixtureScript, Object)_ added), uses a key that overriding the default name of the fixture script with one more meaningful in the context of this fixture.
+
+[#getPreviouslyExecuted__]
+=== getPreviouslyExecuted()
+
+Returns a list of the xref:refguide:testing:index/fixtures/applib/fixturescripts/FixtureScript.adoc[FixtureScript] instances that have already been executed.
+
+This allows each individual xref:refguide:testing:index/fixtures/applib/fixturescripts/FixtureScript.adoc[FixtureScript] to determine whether they need to execute; the _FixtureScripts#getMultipleExecutionStrategy()_ can then be left as simply _FixtureScripts.MultipleExecutionStrategy#EXECUTE_ .
diff --git a/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturespec/FixtureScriptsSpecification.adoc b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturespec/FixtureScriptsSpecification.adoc
new file mode 100644
index 0000000..2a67a30
--- /dev/null
+++ b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturespec/FixtureScriptsSpecification.adoc
@@ -0,0 +1,44 @@
+= FixtureScriptsSpecification
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+
+Specifies the behaviour of the _org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts#runFixtureScript(String, String) runFixtureScript_ menu action and the execution characteristics of (graphs of) xref:refguide:testing:index/fixtures/applib/fixturescripts/FixtureScript.adoc[FixtureScript] s.
+
+== API
+
+[source,java]
+.FixtureScriptsSpecification.java
+----
+class FixtureScriptsSpecification {
+  FixtureScriptsSpecification(final String packagePrefix, final FixtureScripts.NonPersistedObjectsStrategy nonPersistedObjectsStrategy, final FixtureScripts.MultipleExecutionStrategy multipleExecutionStrategy, final Class<? extends FixtureScript> runScriptDefaultScriptClass, final Class<? extends FixtureScript> recreateScriptClass)     // <.>
+  String getPackagePrefix()
+  FixtureScripts.NonPersistedObjectsStrategy getNonPersistedObjectsStrategy()
+  FixtureScripts.MultipleExecutionStrategy getMultipleExecutionStrategy()     // <.>
+  Class<? extends FixtureScript> getRunScriptDefaultScriptClass()
+  Class<? extends FixtureScript> getRecreateScriptClass()
+  Builder builder(final Class<?> contextClass)
+  Builder builder(final String packagePrefix)
+}
+----
+
+<.> xref:#FixtureScriptsSpecification__String_FixtureScripts.NonPersistedObjectsStrategy_FixtureScripts.MultipleExecutionStrategy_Class_Class[FixtureScriptsSpecification(String, FixtureScripts.NonPersistedObjectsStrategy, FixtureScripts.MultipleExecutionStrategy, Class, Class)]
++
+--
+Typically preferable to use the create using the _FixtureScriptsSpecification.Builder_ (obtained from _#builder(Class)_ ).
+--
+<.> xref:#getMultipleExecutionStrategy__[getMultipleExecutionStrategy()]
++
+--
+Note that this can be overridden on a fixture-by-fixture basis if the fixture implements _FixtureScriptWithExecutionStrategy_ .
+--
+
+== Members
+
+[#FixtureScriptsSpecification__String_FixtureScripts.NonPersistedObjectsStrategy_FixtureScripts.MultipleExecutionStrategy_Class_Class]
+=== FixtureScriptsSpecification(String, FixtureScripts.NonPersistedObjectsStrategy, FixtureScripts.MultipleExecutionStrategy, Class, Class)
+
+Typically preferable to use the create using the _FixtureScriptsSpecification.Builder_ (obtained from _#builder(Class)_ ).
+
+[#getMultipleExecutionStrategy__]
+=== getMultipleExecutionStrategy()
+
+Note that this can be overridden on a fixture-by-fixture basis if the fixture implements _FixtureScriptWithExecutionStrategy_ .
diff --git a/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/modules/ModuleWithFixtures.adoc b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/modules/ModuleWithFixtures.adoc
new file mode 100644
index 0000000..844e3ee
--- /dev/null
+++ b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/modules/ModuleWithFixtures.adoc
@@ -0,0 +1,50 @@
+= ModuleWithFixtures _(interface)_
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+
+A module is a class that implements this xref:refguide:testing:index/fixtures/applib/modules/ModuleWithFixtures.adoc[ModuleWithFixtures] interface, but in addition is expected to be annotated with _Configuration @Configuration_ and which defines a dependency other modules by _Import @Import_ ing them, and conversely may be a dependency of other modules if they import it.
+
+Modules are therefore classes that define a module hierarchy using these Spring annotations.
+
+These are, in effect, a module hierarchy, declared using types.
+
+Optionally, the `@Configuration` class can implements this xref:refguide:testing:index/fixtures/applib/modules/ModuleWithFixtures.adoc[ModuleWithFixtures] interface. Doing so allows it to declare setup and teardown fixtures, eg to set up permanent ref data or to teardown test entities within the module.
+
+These setup/teardown fixtures will be called in the correct order as per the transitive dependency graph inferred from the `@Configuration` imports.
+
+== API
+
+[source,java]
+.ModuleWithFixtures.java
+----
+interface ModuleWithFixtures {
+  FixtureScript getRefDataSetupFixture()     // <.>
+  FixtureScript getTeardownFixture()     // <.>
+}
+----
+
+<.> xref:#getRefDataSetupFixture__[getRefDataSetupFixture()]
++
+--
+Optionally each module can define a xref:refguide:testing:index/fixtures/applib/fixturescripts/FixtureScript.adoc[FixtureScript] which holds immutable "reference data".
+--
+<.> xref:#getTeardownFixture__[getTeardownFixture()]
++
+--
+Optionally each module can define a tear-down xref:refguide:testing:index/fixtures/applib/fixturescripts/FixtureScript.adoc[FixtureScript] , used to remove the contents of _all_ transactional entities (both reference data and operational/transactional data).
+--
+
+== Members
+
+[#getRefDataSetupFixture__]
+=== getRefDataSetupFixture()
+
+Optionally each module can define a xref:refguide:testing:index/fixtures/applib/fixturescripts/FixtureScript.adoc[FixtureScript] which holds immutable "reference data".
+
+By default, returns a _FixtureScript#NOOP noop_ .
+
+[#getTeardownFixture__]
+=== getTeardownFixture()
+
+Optionally each module can define a tear-down xref:refguide:testing:index/fixtures/applib/fixturescripts/FixtureScript.adoc[FixtureScript] , used to remove the contents of _all_ transactional entities (both reference data and operational/transactional data).
+
+By default, returns a _FixtureScript#NOOP noop_ .
diff --git a/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/modules/ModuleWithFixturesService.adoc b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/modules/ModuleWithFixturesService.adoc
new file mode 100644
index 0000000..442677f
--- /dev/null
+++ b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/modules/ModuleWithFixturesService.adoc
@@ -0,0 +1,17 @@
+= ModuleWithFixturesService
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+
+== API
+
+[source,java]
+.ModuleWithFixturesService.java
+----
+class ModuleWithFixturesService {
+  ModuleWithFixturesService(final SpringBeansService springBeansService)
+  FixtureScript getRefDataSetupFixture()
+  FixtureScript getTeardownFixture()
+  List<ModuleWithFixturesDescriptor> modules()
+  void onContextRefreshed(ContextRefreshedEvent event)
+}
+----
+
diff --git a/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/setup/PersonaEnumPersistAll.adoc b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/setup/PersonaEnumPersistAll.adoc
new file mode 100644
index 0000000..45cf716
--- /dev/null
+++ b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/setup/PersonaEnumPersistAll.adoc
@@ -0,0 +1,17 @@
+= PersonaEnumPersistAll
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+
+== API
+
+[source,java]
+.PersonaEnumPersistAll.java
+----
+class PersonaEnumPersistAll<E, T> {
+  PersonaEnumPersistAll(final Class<E> personaEnumClass)
+  Integer getNumber()
+  void setNumber(final Integer number)
+  List<T> getObjects()
+  FixtureScripts.MultipleExecutionStrategy getMultipleExecutionStrategy()
+}
+----
+
diff --git a/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/teardown/jdo/TeardownFixtureJdoAbstract.adoc b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/teardown/jdo/TeardownFixtureJdoAbstract.adoc
new file mode 100644
index 0000000..1981f89
--- /dev/null
+++ b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/teardown/jdo/TeardownFixtureJdoAbstract.adoc
@@ -0,0 +1,12 @@
+= TeardownFixtureJdoAbstract
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+
+== API
+
+[source,java]
+.TeardownFixtureJdoAbstract.java
+----
+class TeardownFixtureJdoAbstract {
+}
+----
+