Files
simulation_core/tests/unit-tests/AdHocCompiler/adhoc-compiler.robot

132 lines
6.6 KiB
Plaintext

*** Variables ***
${SIMPLE_PLATFORM}= SEPARATOR=
... """ ${\n}
... simple: SimplePeripheral @ sysbus 0x0 ${\n}
... """
${COMPLEX_PLATFORM}= SEPARATOR=
... """ ${\n}
... simple: ReferencingPeripheral @ sysbus 0x0 ${\n}
... """
${UNSAFE_PLATFORM}= SEPARATOR=
... """ ${\n}
... simple: UnsafePeripheral @ sysbus 0x0 ${\n}
... """
# SimplePeripheral2 to avoid assembly reuse because all test cases run in the same Renode instance.
# See the comment above `Should Compile Multiple Files Referencing Each Other` for more details.
${SIMPLE_PLATFORM_WITH_PREINIT}= SEPARATOR=
... """ ${\n}
... simple: SimplePeripheral2 @ sysbus 0x0 ${\n}
... ${SPACE*4}preinit: ${\n}
... ${SPACE*8}include '${CURDIR}/SimplePeripheral2.cs' ${\n}
... """
# Init is used because dependency cycles are not allowed in platform descriptions.
${MUTUALLY_REFERENCING_PLATFORM_WITH_PREINIT}= SEPARATOR=
... """ ${\n}
... peri1: MutuallyReferencingPeripheral1 @ sysbus 0x0 ${\n}
... ${SPACE*4}Other: peri2 ${\n}
... peri2: MutuallyReferencingPeripheral2 @ sysbus 0x100 ${\n}
... ${SPACE*4}init: ${\n}
... ${SPACE*8}Other peri1 ${\n}
... sysbus: ${\n}
... ${SPACE*4}preinit add: ${\n}
... ${SPACE*8}include '${CURDIR}/MutuallyReferencingPeripheral1.cs' '${CURDIR}/MutuallyReferencingPeripheral2.cs' ${\n}
... """
*** Keywords ***
Use Peripheral
${r}= Execute Command sysbus ReadDoubleWord 0x4
Should Be Equal As Numbers ${r} 0x0
${r}= Execute Command sysbus ReadDoubleWord 0x8
Should Be Equal As Numbers ${r} 0x0
Execute Command sysbus WriteDoubleWord 0x0 0x147
${r}= Execute Command sysbus ReadDoubleWord 0x4
Should Be Equal As Numbers ${r} 0x28e
${r}= Execute Command sysbus ReadDoubleWord 0x8
Should Be Equal As Numbers ${r} 5
Use Nested Peripheral
${r}= Execute Command sysbus ReadDoubleWord 0x10c
Should Be Equal As Numbers ${r} 1
*** Test Cases ***
Should Compile Simple Peripheral
Execute Command include "${CURDIR}/SimplePeripheral.cs"
Execute Command mach create
Execute Command machine LoadPlatformDescriptionFromString ${SIMPLE_PLATFORM}
Use Peripheral
# We load dynamically compiled assemblies right away after the compilation,
# so type dependencies can be resolved automatically between separate assemblies.
# In the past we had a call to 'EnsureTypeIsLoaded "Antmicro.Renode.Peripherals.ReferencedType"'.
# 'EnsureTypeIsLoaded' is no longer necessary when files are referencing each other,
# but can still be called explicitly if needed (e.g. there is no reference to the type in any of the loaded libraries).
# To test both cases (with and without 'EnsureTypeIsLoaded') we would need to have a separate robot file
# and to run this test in a different process to make it isolated, because in .NET Framework
# there is no way to unload an individual assembly without unloading all of the application domains that contain it.
# See: https://github.com/dotnet/docs/blob/376d4347ab1d83256c81d2427051e6ff705bcd30/docs/standard/assembly/load-unload.md
# It isn't worth the effort, so legacy command was just removed.
Should Compile Multiple Files With One Referencing The Other
Execute Command include "${CURDIR}/ReferencedType.cs"
Execute Command include "${CURDIR}/ReferencingPeripheral.cs"
Execute Command mach create
Execute Command machine LoadPlatformDescriptionFromString ${COMPLEX_PLATFORM}
Use Peripheral
Should Compile Unsafe Peripheral
Execute Command include "${CURDIR}/UnsafePeripheral.cs"
Execute Command mach create
Execute Command machine LoadPlatformDescriptionFromString ${UNSAFE_PLATFORM}
Use Peripheral
Should Compile Simple Peripheral Through Preinit
Execute Command mach create
Execute Command machine LoadPlatformDescriptionFromString ${SIMPLE_PLATFORM_WITH_PREINIT}
Use Peripheral
Should Compile Two Peripherals Referencing Each Other Through Preinit
Execute Command mach create
Execute Command machine LoadPlatformDescriptionFromString ${MUTUALLY_REFERENCING_PLATFORM_WITH_PREINIT}
Execute Command sysbus WriteDoubleWord 0x0 0x859
Execute Command sysbus WriteDoubleWord 0x4 0x314
${r}= Execute Command sysbus ReadDoubleWord 0x100
Should Be Equal As Numbers ${r} 0x314
${r}= Execute Command sysbus ReadDoubleWord 0x104
Should Be Equal As Numbers ${r} 0x859
Should Compile Simple Peripherals Through Preinit In Repl File With Relative Path Lookup
Execute Command include "${CURDIR}/adhoc-compiler.repl"
Use Peripheral
Use Nested Peripheral
Should Find Simple Peripherals Through Preinit In Repl File With Origin Path Lookup
# If this test case runs after one that has already used SimplePeripheral3.cs, like
# `Should Compile Simple Peripherals Through Preinit In Repl File With Relative Path Lookup`, then
# the preinit block will not actually compile the peripheral as it will have already been compiled,
# but the important part of this test is to test the $ORIGIN-based path lookup
Execute Script ${CURDIR}/adhoc-compiler.resc
Use Peripheral
Use Nested Peripheral
EnsureTypeIsLoaded Should Throw Type Not Found
${TEST_TYPE} SetVariable Antmicro.NotExistingType
Run Keyword And Expect Error *Given type ${TEST_TYPE} was not found* Execute Command EnsureTypeIsLoaded "${TEST_TYPE}"