Beispiel #1
0
        public async Task TestNotSupportStructuredType()
        {
            var context = await GetTurnContext("NormalStructuredLG.lg");

            var mg     = new ActivityGenerator();
            var result = await mg.Generate(context, "[notSupport]", null) as Activity;
        }
Beispiel #2
0
        public void GetActivity_500Response_ReturnsNull()
        {
            // Arrange

            // This is the HTTP response message class we want the API to
            // return
            var httpResponseMessage = new HttpResponseMessage(HttpStatusCode.InternalServerError);

            // Here, we setup a mock ApiClient instance and program it to
            // return our canned HTTP response above.
            var apiClient = Mock.Of <IApiClient>();

            Mock.Get(apiClient)
            .Setup(m => m.GetAsync(It.IsAny <string>()))
            .ReturnsAsync(httpResponseMessage);

            // We instantiate the SUT and pass in the mock dependency
            var activityGenerator = new ActivityGenerator(apiClient);

            // Act
            var activity = activityGenerator.GetActivity();

            // Assert
            Assert.True(string.IsNullOrEmpty(activity));
        }
        public async Task TestInlineActivityGenerator()
        {
            var context  = GetTurnContext(new MockLanguageGenerator());
            var mg       = new ActivityGenerator();
            var activity = await mg.Generate(context, "text", data : null) as Activity;

            Assert.AreEqual(ActivityTypes.Message, activity.Type);
            Assert.AreEqual("text", activity.Text);
            Assert.AreEqual("text", activity.Speak);
        }
Beispiel #4
0
        public void GetActivity_APIThrowsException_RaisesException()
        {
            // Arrange
            // Here, we setup a mock ApiClient instance and program it to
            // throw a WebException.
            var apiClient = Mock.Of <IApiClient>();

            Mock.Get(apiClient)
            .Setup(m => m.GetAsync(It.IsAny <string>()))
            .ThrowsAsync(new WebException("network error", WebExceptionStatus.ConnectFailure));

            // We instantiate the SUT and pass in the mock dependency
            var activityGenerator = new ActivityGenerator(apiClient);

            // Act
            var ex = Assert.Throws <AggregateException>(() => activityGenerator.GetActivity());

            // Assert
            Assert.IsType <WebException>(ex.GetBaseException());
        }
Beispiel #5
0
        public void GetActivity_ValidResponse_ReturnsActivity()
        {
            // Arrange

            // This is the json response we want the API to return
            var responseJson = @"{
                ""activity"": ""Make a new friend"",
                ""type"": ""social"",
                ""participants"": 1,
                ""price"": 0,
                ""link"": """",
                ""key"": ""1000000"",
                ""accessibility"": 0
            }";

            // This is the HTTP response message class we want the API to
            // return
            var httpResponseMessage = new HttpResponseMessage(HttpStatusCode.OK);

            httpResponseMessage.Content = new StringContent(responseJson);

            // Here, we setup a mock ApiClient instance and program it to
            // return our canned HTTP response above.
            var apiClient = Mock.Of <IApiClient>();

            Mock.Get(apiClient)
            .Setup(m => m.GetAsync(It.IsAny <string>()))
            .ReturnsAsync(httpResponseMessage);

            // We instantiate the SUT and pass in the mock dependency
            var activityGenerator = new ActivityGenerator(apiClient);

            // Act
            var activity = activityGenerator.GetActivity();

            // Assert
            Assert.True(!string.IsNullOrEmpty(activity));
        }
        public async Task ActivityGeneratorTest()
        {
            var context = await GetTurnContext("NormalStructuredLG.lg");

            var     mg   = new ActivityGenerator();
            dynamic data = new JObject();

            data.title = "titleContent";
            data.text  = "textContent";

            var activity = await mg.Generate(context, "[HerocardWithCardAction]", data : data) as Activity;

            AssertCardActionActivity(activity);

            data.adaptiveCardTitle = "test";
            activity = await mg.Generate(context, "[adaptivecardActivity]", data : data) as Activity;

            AssertAdaptiveCardActivity(activity);

            activity = await mg.Generate(context, "[eventActivity]", data : data) as Activity;

            AssertEventActivity(activity);

            activity = await mg.Generate(context, "[activityWithHeroCardAttachment]", data : data) as Activity;

            AssertActivityWithHeroCardAttachment(activity);

            activity = await mg.Generate(context, "[activityWithMultiAttachments]", data : data) as Activity;

            AssertActivityWithMultiAttachments(activity);

            activity = await mg.Generate(context, "[activityWithSuggestionActions]", data : data) as Activity;

            AssertActivityWithSuggestionActions(activity);

            activity = await mg.Generate(context, "[messageActivityAll]", data : data) as Activity;

            AssertMessageActivityAll(activity);

            activity = await mg.Generate(context, "[activityWithMultiStructuredSuggestionActions]", data : data) as Activity;

            AssertActivityWithMultiStructuredSuggestionActions(activity);

            activity = await mg.Generate(context, "[activityWithMultiStringSuggestionActions]", data : data) as Activity;

            AssertActivityWithMultiStringSuggestionActions(activity);

            data.type = "herocard";
            activity  = await mg.Generate(context, "[HeroCardTemplate]", data : data) as Activity;

            AssertHeroCardActivity(activity);

            data.type = "thumbnailcard";
            activity  = await mg.Generate(context, "[ThumbnailCardTemplate]", data : data) as Activity;

            AssertThumbnailCardActivity(activity);

            data.type = "audiocard";
            activity  = await mg.Generate(context, "[AudioCardTemplate]", data : data) as Activity;

            AssertAudioCardActivity(activity);

            data.type = "videocard";
            activity  = await mg.Generate(context, "[VideoCardTemplate]", data : data) as Activity;

            AssertVideoCardActivity(activity);

            data.signinlabel = "Sign in";
            data.url         = "https://login.microsoftonline.com/";
            activity         = await mg.Generate(context, "[SigninCardTemplate]", data : data) as Activity;

            AssertSigninCardActivity(activity);

            data.connectionName = "MyConnection";
            activity            = await mg.Generate(context, "[OAuthCardTemplate]", data : data) as Activity;

            AssertOAuthCardActivity(activity);
        }
        public void TestGenerateFromLG()
        {
            var     r    = GetLGTFilePath("NormalStructuredLG.lg");
            dynamic data = new JObject();

            data.title = "titleContent";
            data.text  = "textContent";

            var engine = new TemplateEngine().AddFile(GetLGTFilePath("NormalStructuredLG.lg"));

            var activity = ActivityGenerator.GenerateFromLG(engine.EvaluateTemplate("HerocardWithCardAction", data));

            AssertCardActionActivity(activity);

            data.adaptiveCardTitle = "test";
            activity = ActivityGenerator.GenerateFromLG(engine.EvaluateTemplate("adaptivecardActivity", data));
            AssertAdaptiveCardActivity(activity);

            activity = ActivityGenerator.GenerateFromLG(engine.EvaluateTemplate("eventActivity", data));
            AssertEventActivity(activity);

            activity = ActivityGenerator.GenerateFromLG(engine.EvaluateTemplate("activityWithHeroCardAttachment", data));
            AssertActivityWithHeroCardAttachment(activity);

            activity = ActivityGenerator.GenerateFromLG(engine.EvaluateTemplate("activityWithMultiAttachments", data));
            AssertActivityWithMultiAttachments(activity);

            activity = ActivityGenerator.GenerateFromLG(engine.EvaluateTemplate("activityWithSuggestionActions", data));
            AssertActivityWithSuggestionActions(activity);

            activity = ActivityGenerator.GenerateFromLG(engine.EvaluateTemplate("messageActivityAll", data));
            AssertMessageActivityAll(activity);

            activity = ActivityGenerator.GenerateFromLG(engine.EvaluateTemplate("activityWithMultiStructuredSuggestionActions", data));
            AssertActivityWithMultiStructuredSuggestionActions(activity);

            activity = ActivityGenerator.GenerateFromLG(engine.EvaluateTemplate("activityWithMultiStringSuggestionActions", data));
            AssertActivityWithMultiStringSuggestionActions(activity);

            data.type = "herocard";
            activity  = ActivityGenerator.GenerateFromLG(engine.EvaluateTemplate("HeroCardTemplate", data));
            AssertHeroCardActivity(activity);

            data.type = "thumbnailcard";
            activity  = ActivityGenerator.GenerateFromLG(engine.EvaluateTemplate("ThumbnailCardTemplate", data));
            AssertThumbnailCardActivity(activity);

            data.type = "audiocard";
            activity  = ActivityGenerator.GenerateFromLG(engine.EvaluateTemplate("AudioCardTemplate", data));
            AssertAudioCardActivity(activity);

            data.type = "videocard";
            activity  = ActivityGenerator.GenerateFromLG(engine.EvaluateTemplate("VideoCardTemplate", data));
            AssertVideoCardActivity(activity);

            data.signinlabel = "Sign in";
            data.url         = "https://login.microsoftonline.com/";
            activity         = ActivityGenerator.GenerateFromLG(engine.EvaluateTemplate("SigninCardTemplate", data));
            AssertSigninCardActivity(activity);

            data.connectionName = "MyConnection";
            activity            = ActivityGenerator.GenerateFromLG(engine.EvaluateTemplate("OAuthCardTemplate", data));
            AssertOAuthCardActivity(activity);
        }
        public void Process(ConfigurationFile configurationFile)
        {
            Dictionary <string, string> aliases = configurationFile.Aliases.ToDictionary(x => x.Alias, x => x.FullClassName);
            ViewFileReader    viewFileReader    = new ViewFileReader(aliases);
            ViewFileProcessor viewFileProcessor = new ViewFileProcessor();
            ViewFileWriter    viewFileWriter    = new ViewFileWriter();

            DataTemplateProcessor dataTemplateProcessor = new DataTemplateProcessor(viewFileProcessor, viewFileWriter);

            List <Resource>             globalResources             = new List <Resource>();
            List <StyleResource>        globalStyleResources        = new List <StyleResource>();
            List <DataTemplateResource> globalDataTemplateResources = new List <DataTemplateResource>();

            foreach (string resourceFile in configurationFile.GlobalResourceFiles)
            {
                string resourceRelativePath = PathHelper.GetRelativePath(resourceFile);

                Log.LogMessage(MessageImportance.High, "\t# Preprocessing resource file {0}", resourceRelativePath);

                List <Resource>      resources      = viewFileProcessor.ExtractGlobalResources(viewFileReader.Read(resourceFile));
                List <StyleResource> styleResources = resources.Where(x => ParsingHelper.IsStyleTag(x.ResourceElement)).Select(x => new StyleResource(x)).ToList();
                resources.RemoveAll(x => ParsingHelper.IsStyleTag(x.ResourceElement));
                List <DataTemplateResource> dataTemplatesResources = resources.Where(x => ParsingHelper.IsDataTemplateTag(x.ResourceElement)).Select(x => new DataTemplateResource(x)).ToList();
                resources.RemoveAll(x => ParsingHelper.IsDataTemplateTag(x.ResourceElement));

                //assign an id to all data template before processing it (could be loop or just unordered things)
                string viewName = Path.GetFileNameWithoutExtension(resourceFile);
                foreach (DataTemplateResource dataTemplate in dataTemplatesResources)
                {
                    dataTemplate.ViewId = string.Format("G_{0}_DT_{1}", viewName, dataTemplate.Key);
                    dataTemplate.ViewHolderClassName = NameGeneratorHelper.GetViewHolderName();
                }

                globalResources.AddRange(resources);
                globalStyleResources.AddRange(styleResources);
                globalDataTemplateResources.AddRange(dataTemplatesResources);
            }
            //process each data template
            foreach (DataTemplateResource dataTemplate in globalDataTemplateResources)
            {
                dataTemplateProcessor.Process(dataTemplate, globalResources, globalStyleResources, globalDataTemplateResources, configurationFile);
            }


            foreach (FileBindingDescription fileBindingDescription in configurationFile.FileDescriptions)
            {
                string viewInputRelativePath  = PathHelper.GetRelativePath(fileBindingDescription.View.InputFile);
                string viewOutputRelativePath = PathHelper.GetRelativePath(fileBindingDescription.View.OutputFile);

                Log.LogMessage(MessageImportance.High, "\t# Preprocessing activity {0}.{1} with view {2}", fileBindingDescription.Activity.NamespaceName, fileBindingDescription.Activity.ClassName, viewInputRelativePath);

                XmlElement rootViewElement = viewFileReader.Read(fileBindingDescription.View.InputFile);
                //Parse expression, Extract resources and simplify the view file
                var expressionParsingResult              = viewFileProcessor.ExtractExpressions(rootViewElement);
                List <IdViewObject> viewObjects          = expressionParsingResult.Item2;
                List <XmlAttribute> expressionAttributes = expressionParsingResult.Item1;
                List <Resource>     resources            = viewFileProcessor.ExtractResources(rootViewElement);
                //filter resources for DataTemplate
                List <DataTemplateResource> dataTemplatesResources = resources.Where(x => ParsingHelper.IsDataTemplateTag(x.ResourceElement)).Select(x => new DataTemplateResource(x)).ToList();
                resources.RemoveAll(x => ParsingHelper.IsDataTemplateTag(x.ResourceElement));
                //filter resources for Style
                List <StyleResource> styleResources = resources.Where(x => ParsingHelper.IsStyleTag(x.ResourceElement)).Select(x => new StyleResource(x)).ToList();
                resources.RemoveAll(x => ParsingHelper.IsStyleTag(x.ResourceElement));


                List <StyleResource> totalStyleResources = new List <StyleResource>(styleResources);
                totalStyleResources.AddRange(globalStyleResources);

                //Write the view file for Android (axml format)
                Log.LogMessage(MessageImportance.High, "\t\t Generating view file {0}", viewOutputRelativePath);
                viewFileWriter.Write(rootViewElement, fileBindingDescription.View.OutputFile, totalStyleResources);
                ResourceFiles.Add(viewOutputRelativePath);


                //assign an id to all data template before processing it (could be loop or just unordered things)
                string viewName = Path.GetFileNameWithoutExtension(fileBindingDescription.View.OutputFile);
                foreach (DataTemplateResource dataTemplate in dataTemplatesResources)
                {
                    dataTemplate.ViewId = string.Format("{0}_DT_{1}", viewName, dataTemplate.Key);
                    dataTemplate.ViewHolderClassName = NameGeneratorHelper.GetViewHolderName();
                }

                List <Resource> totalResources = new List <Resource>(resources);
                totalResources.AddRange(globalResources);
                List <DataTemplateResource> totalDataTemplateResources = new List <DataTemplateResource>(dataTemplatesResources);
                totalDataTemplateResources.AddRange(globalDataTemplateResources);

                //process each data template
                foreach (DataTemplateResource dataTemplate in dataTemplatesResources)
                {
                    dataTemplateProcessor.Process(dataTemplate, totalResources, totalStyleResources, totalDataTemplateResources, configurationFile);
                }

                string classOutputFile         = fileBindingDescription.Activity.OutputFile;
                string classOutputRelativePath = PathHelper.GetRelativePath(classOutputFile);

                List <Resource> mergedResources = new List <Resource>(totalResources);
                mergedResources.AddRange(totalDataTemplateResources);
                AbstractBindingHandlerClassGenerator generator;
                if (fileBindingDescription.Activity.IsFragment)
                {
                    Log.LogMessage(MessageImportance.High, "\t\t Generating class file for Fragment to {0}", classOutputRelativePath);

                    generator = new FragmentGenerator
                    {
                        BaseClassType  = null,
                        ClassName      = fileBindingDescription.Activity.ClassName,
                        Configuration  = configurationFile,
                        IsPartialClass = true,
                        NamespaceName  = fileBindingDescription.Activity.NamespaceName,
                    };
                }
                else
                {
                    Log.LogMessage(MessageImportance.High, "\t\t Generating class file for Activity to {0}", classOutputRelativePath);

                    generator = new ActivityGenerator
                    {
                        BaseClassType  = null,
                        ClassName      = fileBindingDescription.Activity.ClassName,
                        Configuration  = configurationFile,
                        IsPartialClass = true,
                        NamespaceName  = fileBindingDescription.Activity.NamespaceName,
                    };
                }

                generator.Preprocess(expressionAttributes, mergedResources, viewObjects);
                generator.Generate(classOutputFile);

                ClassFiles.Add(classOutputRelativePath);
            }

            ClassFiles.AddRange(dataTemplateProcessor.ClassFiles);
            ResourceFiles.AddRange(dataTemplateProcessor.ResourceFiles);

            CreateDummyClass(configurationFile);
        }
 public void Initialize()
 {
     _sampleActivity1 = ActivityGenerator.GenerateActivity1();
     _sampleActivity2 = ActivityGenerator.GenerateActivity2();
     _manyActivities  = ActivityGenerator.GenerateManyActivities();
 }