Exemplo n.º 1
0
 public TruffleFileWrapper(string jsonDirectory, string fileName)
 {
     ContractName    = System.IO.Path.GetFileNameWithoutExtension(fileName);
     Content         = GetEmbeddedFileContent(fileName);
     Path            = System.IO.Path.Combine(jsonDirectory, fileName);
     TruffleContract = JsonConvert.DeserializeObject <TruffleContract>(Content);
     ContractAbi     =
         new GeneratorModelABIDeserialiser().DeserialiseABI(TruffleContract.Abi.ToString());
 }
Exemplo n.º 2
0
        public void GeneratedProjectBuildsSuccessfully(CodeGenLanguage codeGenLanguage)
        {
            var context = new ProjectTestContext(GetType().Name,
                                                 $"{MethodBase.GetCurrentMethod().Name}{codeGenLanguage}");

            try
            {
                //given
                context.TargetFramework = "netstandard2.0";
                context.CreateEmptyProject();
                var fullProjectFilePath = Path.Combine(context.TargetProjectFolder,
                                                       context.ProjectName + CodeGenLanguageExt.ProjectFileExtensions[codeGenLanguage]);

                var generator = new NetStandardLibraryGenerator(fullProjectFilePath, codeGenLanguage)
                {
                    NethereumWeb3Version = Constants.NethereumWeb3Version
                };

                //when
                //code gen proj file
                var projectFile = generator.GenerateFileContent(context.TargetProjectFolder);
                GeneratedFileWriter.WriteFileToDisk(projectFile);

                //add in some code gen class files
                var contractMetaData = TestContracts.StandardContract;
                var contractABI      = new GeneratorModelABIDeserialiser().DeserialiseABI(contractMetaData.ABI);

                var contractProjectGenerator = new ContractProjectGenerator(
                    contractABI,
                    "StandardContract",
                    contractMetaData.ByteCode,
                    context.ProjectName,
                    "StandardContract.Service",
                    "StandardContract.CQS",
                    "StandardContract.DTO",
                    context.TargetProjectFolder,
                    Path.DirectorySeparatorChar.ToString(),
                    codeGenLanguage)
                {
                    AddRootNamespaceOnVbProjectsToImportStatements = false
                };

                var generatedFiles = contractProjectGenerator.GenerateAll();
                GeneratedFileWriter.WriteFilesToDisk(generatedFiles);

                context.BuildProject();

                //then
                Assert.True(context.BuildHasSucceeded());
            }
            finally
            {
                context.CleanUp();
            }
        }
Exemplo n.º 3
0
        public void WriteClasses(GenerateClassesCommand command)
        {
            var contractAbi = new GeneratorModelABIDeserialiser().DeserialiseABI(command.Abi);
            var generator   = new ContractProjectGenerator(
                contractAbi,
                command.ContractName, command.ContractByteCode, command.BaseNamespace,
                command.ServiceNamespace, command.CqsNamespace, command.DtoNamesapce, command.BasePath,
                command.PathDelimiter, command.CodeGenLanguage);
            var generatedClasses = generator.GenerateAll();

            GeneratedFileWriter.WriteFilesToDisk(generatedClasses);
        }
Exemplo n.º 4
0
        public void ShouldRetrieveAllStructsFromABI()
        {
            var abi          = @"[{""anonymous"":false,""inputs"":[{""indexed"":false,""internalType"":""address"",""name"":""sender"",""type"":""address""},{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""},{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""},{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""}],""internalType"":""struct Test.SubSubStruct"",""name"":""sub"",""type"":""tuple""},{""internalType"":""string"",""name"":""id2"",""type"":""string""}],""internalType"":""struct Test.SubStruct"",""name"":""subStruct1"",""type"":""tuple""},{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""},{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""}],""internalType"":""struct Test.SubSubStruct"",""name"":""sub"",""type"":""tuple""},{""internalType"":""string"",""name"":""id2"",""type"":""string""}],""internalType"":""struct Test.SubStruct"",""name"":""subStruct2"",""type"":""tuple""},{""internalType"":""string"",""name"":""id2"",""type"":""string""}],""indexed"":false,""internalType"":""struct Test.TestStruct"",""name"":""testStruct"",""type"":""tuple""}],""name"":""TestStructStorageChanged"",""type"":""event""},{""inputs"":[],""name"":""GetTest"",""outputs"":[{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""},{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""},{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""}],""internalType"":""struct Test.SubSubStruct"",""name"":""sub"",""type"":""tuple""},{""internalType"":""string"",""name"":""id2"",""type"":""string""}],""internalType"":""struct Test.SubStruct"",""name"":""subStruct1"",""type"":""tuple""},{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""},{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""}],""internalType"":""struct Test.SubSubStruct"",""name"":""sub"",""type"":""tuple""},{""internalType"":""string"",""name"":""id2"",""type"":""string""}],""internalType"":""struct Test.SubStruct"",""name"":""subStruct2"",""type"":""tuple""},{""internalType"":""string"",""name"":""id2"",""type"":""string""}],""internalType"":""struct Test.TestStruct"",""name"":""testStruct"",""type"":""tuple""},{""internalType"":""int256"",""name"":""test1"",""type"":""int256""},{""internalType"":""int256"",""name"":""test2"",""type"":""int256""}],""stateMutability"":""pure"",""type"":""function""},{""inputs"":[{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""},{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""},{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""}],""internalType"":""struct Test.SubSubStruct"",""name"":""sub"",""type"":""tuple""},{""internalType"":""string"",""name"":""id2"",""type"":""string""}],""internalType"":""struct Test.SubStruct"",""name"":""subStruct1"",""type"":""tuple""},{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""},{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""}],""internalType"":""struct Test.SubSubStruct"",""name"":""sub"",""type"":""tuple""},{""internalType"":""string"",""name"":""id2"",""type"":""string""}],""internalType"":""struct Test.SubStruct"",""name"":""subStruct2"",""type"":""tuple""},{""internalType"":""string"",""name"":""id2"",""type"":""string""}],""internalType"":""struct Test.TestStruct"",""name"":""testStruct"",""type"":""tuple""}],""name"":""SetStorageStruct"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""},{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""},{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""}],""internalType"":""struct Test.SubSubStruct"",""name"":""sub"",""type"":""tuple""},{""internalType"":""string"",""name"":""id2"",""type"":""string""}],""internalType"":""struct Test.SubStruct"",""name"":""subStruct1"",""type"":""tuple""},{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""},{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""}],""internalType"":""struct Test.SubSubStruct"",""name"":""sub"",""type"":""tuple""},{""internalType"":""string"",""name"":""id2"",""type"":""string""}],""internalType"":""struct Test.SubStruct"",""name"":""subStruct2"",""type"":""tuple""},{""internalType"":""string"",""name"":""id2"",""type"":""string""}],""internalType"":""struct Test.TestStruct"",""name"":""testScrut"",""type"":""tuple""}],""name"":""Test"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[],""name"":""TestArray"",""outputs"":[{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""},{""internalType"":""uint256"",""name"":""id2"",""type"":""uint256""}],""internalType"":""struct Test.SimpleStruct[2]"",""name"":""structArray"",""type"":""tuple[2]""}],""stateMutability"":""pure"",""type"":""function""},{""inputs"":[],""name"":""id1"",""outputs"":[{""internalType"":""uint256"",""name"":"""",""type"":""uint256""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""id2"",""outputs"":[{""internalType"":""uint256"",""name"":"""",""type"":""uint256""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""id3"",""outputs"":[{""internalType"":""uint256"",""name"":"""",""type"":""uint256""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""id4"",""outputs"":[{""internalType"":""string"",""name"":"""",""type"":""string""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""testStructStorage"",""outputs"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""},{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""},{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""}],""internalType"":""struct Test.SubSubStruct"",""name"":""sub"",""type"":""tuple""},{""internalType"":""string"",""name"":""id2"",""type"":""string""}],""internalType"":""struct Test.SubStruct"",""name"":""subStruct1"",""type"":""tuple""},{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""},{""components"":[{""internalType"":""uint256"",""name"":""id"",""type"":""uint256""}],""internalType"":""struct Test.SubSubStruct"",""name"":""sub"",""type"":""tuple""},{""internalType"":""string"",""name"":""id2"",""type"":""string""}],""internalType"":""struct Test.SubStruct"",""name"":""subStruct2"",""type"":""tuple""},{""internalType"":""string"",""name"":""id2"",""type"":""string""}],""stateMutability"":""view"",""type"":""function""}]";
            var deserialiser = new GeneratorModelABIDeserialiser();
            var contractAbi  = deserialiser.DeserialiseABI(abi);

            Assert.Equal(4, contractAbi.Structs.Length);
            Assert.NotNull(contractAbi.Structs.FirstOrDefault(x => x.Name == "SubSubStruct"));
            Assert.NotNull(contractAbi.Structs.FirstOrDefault(x => x.Name == "SubStruct"));
            Assert.NotNull(contractAbi.Structs.FirstOrDefault(x => x.Name == "TestStruct"));
            Assert.NotNull(contractAbi.Structs.FirstOrDefault(x => x.Name == "SimpleStruct"));
        }
        public ContractProjectGeneratorTests()
        {
            var contractMetaData = TestContractsUtils.StandardContract;

            var contractABI = new GeneratorModelABIDeserialiser().DeserialiseABI(contractMetaData.ABI);

            _contractProjectGenerator = new ContractProjectGenerator(
                contractABI,
                "StandardContract",
                contractMetaData.ByteCode,
                "ContractProjectGenerator.Tests",
                "StandardContract.Service",
                "StandardContract.CQS",
                "StandardContract.DTO",
                @"c:\Temp\",
                "\\");
        }
        public void With_Single_Messages_File_Generated_Code_Builds(CodeGenLanguage codeGenLanguage)
        {
            //given
            var context = new ProjectTestContext(BaseName,
                                                 $"{MethodBase.GetCurrentMethod().Name}{codeGenLanguage}");

            try
            {
                context.CreateProject(codeGenLanguage, new[]
                {
                    new Tuple <string, string>("Nethereum.Web3", Constants.NethereumWeb3Version)
                });

                var contractMetaData = TestContracts.StandardContract;
                var contractABI      = new GeneratorModelABIDeserialiser().DeserialiseABI(contractMetaData.ABI);

                //when
                var contractProjectGenerator = new ContractProjectGenerator(
                    contractABI,
                    "StandardContract",
                    contractMetaData.ByteCode,
                    context.ProjectName,
                    "StandardContract.Service",
                    "StandardContract.CQS",
                    "StandardContract.DTO",
                    context.TargetProjectFolder,
                    Path.DirectorySeparatorChar.ToString(),
                    codeGenLanguage)
                {
                    AddRootNamespaceOnVbProjectsToImportStatements = true,
                };

                var generatedFiles = contractProjectGenerator.GenerateAllMessagesFileAndService();
                GeneratedFileWriter.WriteFilesToDisk(generatedFiles);
                context.BuildProject();

                //then
                Assert.True(context.BuildHasSucceeded());
            }
            finally
            {
                context.CleanUp();
            }
        }
Exemplo n.º 7
0
        public ContractProjectGenerator CreateGenerator(string defaultNamespace, string projectFolder)
        {
            SetBinPath();

            var abiString = ABI ?? GeneratorConfigurationUtils.GetFileContent(projectFolder, ABIFile);
            var byteCode  = ByteCode ?? GeneratorConfigurationUtils.GetFileContent(projectFolder, BinFile);
            var abi       = new GeneratorModelABIDeserialiser().DeserialiseABI(abiString);

            return(new ContractProjectGenerator(
                       abi,
                       ContractName,
                       byteCode,
                       BaseNamespace ?? defaultNamespace,
                       ServiceNamespace ?? $"{ContractName}.Service",
                       CQSNamespace ?? $"{ContractName}.CQS",
                       DTONamespace ?? $"{ContractName}.DTO",
                       BaseOutputPath ?? projectFolder,
                       Path.DirectorySeparatorChar.ToString(),
                       CodeGenLanguage
                       ));
        }
Exemplo n.º 8
0
 public ContractDefinition(string abi)
 {
     Abi = new GeneratorModelABIDeserialiser().DeserialiseABI(abi);
 }