132 lines
6.6 KiB
Plaintext
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}"
|