public void GenerateProxyTypes_ComponentDefinitionWithMissingConnection_ThrowsException()
        {
            var generator            = new ProxyGenerator();
            var componentDefinitions = new List <ComponentDefinition>();

            var stubA = ProxyGeneratorTestsMissingConnectionStubA.GetComponentDefinition();
            var stubB = ProxyGeneratorTestsMissingConnectionStubB.GetComponentDefinition();

            componentDefinitions.Add(stubA);
            componentDefinitions.Add(stubB);

            Assert.ThrowsException <MissingConnectionException>(() => generator.GenerateProxyTypes(componentDefinitions));
        }
        public void GenerateProxyTypes_ValidComponentDefinitions_ProxyTypesAreCreated()
        {
            var generator            = new ProxyGenerator();
            var componentDefinitions = new List <ComponentDefinition>();

            var signalStub  = ProxyGeneratorTestsSimpleSignalStub.GetComponentDefinition();
            var triggerStub = ProxyGeneratorTestsSimpleTriggerStub.GetComponentDefinition();

            componentDefinitions.Add(signalStub);
            componentDefinitions.Add(triggerStub);

            Assert.IsNull(signalStub.ProxyType);
            Assert.IsNull(triggerStub.ProxyType);

            generator.GenerateProxyTypes(componentDefinitions);

            Assert.IsNotNull(signalStub.ProxyType);
            Assert.IsNotNull(triggerStub.ProxyType);
        }
        public void Init()
        {
            Model model;

            using (var stream = new FileStream(_modelFilename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                using (var textReader = new StreamReader(stream))
                    using (var jsonReader = new JsonTextReader(textReader))
                    {
                        var serializer = new JsonSerializer();
                        model = serializer.Deserialize <Model>(jsonReader) ?? throw new InvalidModelException($"The model file \"{_modelFilename}\" cannot be parsed.");
                    }

            foreach (var assemblyFilename in model.Assemblies)
            {
                if (AppDomain.CurrentDomain.GetAssemblies().Any(a => a.GetName().Name == assemblyFilename))
                {
                    continue;
                }

                if (File.Exists(assemblyFilename + ".dll"))
                {
                    Assembly.LoadFrom(assemblyFilename + ".dll");
                }
                else
                {
                    Assembly.LoadFrom(assemblyFilename + ".so");
                }
            }

            var componentDefinitionGenerator = new ComponentDefinitionGenerator();

            _componentDefinitions = componentDefinitionGenerator.GenerateComponentDefinitions(model);

            var proxyGenerator = new ProxyGenerator();

            proxyGenerator.GenerateProxyTypes(_componentDefinitions);

            foreach (var componentDefinition in _componentDefinitions)
            {
                CreateProxyInstancesRecursive(componentDefinition);
            }
        }