public void SmartContract_ValidateFormat_One_CustomStruct() { var adjustedSource = @" using System; using Stratis.SmartContracts; public class StructTest : SmartContract { public struct Item { public int Number; public string Name; } public StructTest(ISmartContractState state) : base(state) { } } "; ContractCompilationResult compilationResult = ContractCompiler.Compile(adjustedSource); Assert.True(compilationResult.Success); var validator = new NestedTypesAreValueTypesValidator(); byte[] assemblyBytes = compilationResult.Compilation; IContractModuleDefinition decomp = ContractDecompiler.GetModuleDefinition(assemblyBytes).Value; IEnumerable <ValidationResult> result = validator.Validate(decomp.ContractType); Assert.Empty(result); }
public void NestedTypesAreValueTypesValidator_Should_Allow_Nested_Value_Type() { const string source = @"public class Test {public struct A{}}"; var typeDefinition = CompileToTypeDef(source); var validator = new NestedTypesAreValueTypesValidator(); var result = validator.Validate(typeDefinition).ToList(); Assert.Empty(result); }
public void NestedTypesAreValueTypesValidator_Should_Not_Allow_Nested_Reference_Type() { const string source = @"public class Test{class A {} }"; var typeDefinition = CompileToTypeDef(source); var validator = new NestedTypesAreValueTypesValidator(); var result = validator.Validate(typeDefinition).ToList(); Assert.Single(result); Assert.IsType <NestedTypesAreValueTypesValidator.NestedTypeIsValueTypeValidationResult>(result.Single()); }