public static void ClassInitialize(TestContext context)
 {
     TypeFactory.Configuration = new ConfigurationBuilder().AddInMemoryCollection().Build();
     DeclarativeTypeLoader.AddComponent(new AdaptiveComponentRegistration());
     DeclarativeTypeLoader.AddComponent(new LanguageGenerationComponentRegistration());
     resourceExplorer = ResourceExplorer.LoadProject(GetProjectFolder());
 }
예제 #2
0
        public static async Task RunTestScript(string resourceId = null, [CallerMemberName] string testName = null, IConfiguration configuration = null)
        {
            TestScript script;

            // TODO: For now, serialize type loading because config is static and is used by LUIS type loader.
            lock (RootFolder)
            {
                if (configuration == null)
                {
                    configuration = DefaultConfiguration;
                }

                if (configuration != TypeFactory.Configuration)
                {
                    TypeFactory.Configuration = configuration;
                    DeclarativeTypeLoader.Reset();
                    TypeFactory.Configuration = configuration ?? new ConfigurationBuilder().AddInMemoryCollection().Build();
                    DeclarativeTypeLoader.AddComponent(new DialogComponentRegistration());
                    DeclarativeTypeLoader.AddComponent(new AdaptiveComponentRegistration());
                    DeclarativeTypeLoader.AddComponent(new LanguageGenerationComponentRegistration());
                    DeclarativeTypeLoader.AddComponent(new QnAMakerComponentRegistration());
                    DeclarativeTypeLoader.AddComponent(new MockLuisComponentRegistration());
                }

                script = TestUtils.ResourceExplorer.LoadType <TestScript>(resourceId ?? $"{testName}.test.dialog");
            }

            script.Description = script.Description ?? resourceId;
            await script.ExecuteAsync(testName : testName, configuration : configuration, resourceExplorer : ResourceExplorer).ConfigureAwait(false);
        }
예제 #3
0
 /// <summary>
 /// Register ILanguageGenerator as default langugage generator.
 /// </summary>
 /// <param name="botAdapter">botAdapter to add services to.</param>
 /// <param name="resourceExplorer">resourceExporer to provide to LanguageGenerator.</param>
 /// <param name="languageGenerator">LanguageGenerator to use.</param>
 /// <returns>botAdapter.</returns>
 public static BotAdapter UseLanguageGeneration(this BotAdapter botAdapter, ResourceExplorer resourceExplorer, ILanguageGenerator languageGenerator)
 {
     DeclarativeTypeLoader.AddComponent(new LanguageGenerationComponentRegistration());
     botAdapter.Use(new RegisterClassMiddleware <LanguageGeneratorManager>(new LanguageGeneratorManager(resourceExplorer ?? throw new ArgumentNullException(nameof(resourceExplorer)))));
     botAdapter.Use(new RegisterClassMiddleware <ILanguageGenerator>(languageGenerator ?? throw new ArgumentNullException(nameof(languageGenerator))));
     return(botAdapter);
 }
        public static void ClassInitialize(TestContext context)
        {
            TypeFactory.Configuration = new ConfigurationBuilder().AddInMemoryCollection().Build();
            DeclarativeTypeLoader.AddComponent(new AdaptiveComponentRegistration());
            DeclarativeTypeLoader.AddComponent(new LanguageGenerationComponentRegistration());
            DeclarativeTypeLoader.AddComponent(new QnAMakerComponentRegistration());
            TypeFactory.Register("Microsoft.RuleRecognizer", typeof(RuleRecognizer));
            string projPath = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, PathUtils.NormalizePath($@"..\..\..\..\..\tests\Microsoft.Bot.Builder.TestBot.Json\Microsoft.Bot.Builder.TestBot.Json.csproj")));

            resourceExplorer = ResourceExplorer.LoadProject(projPath);
        }
예제 #5
0
        public ComposerBot(string rootDialogFile, ConversationState conversationState, UserState userState, ResourceExplorer resourceExplorer, ISourceMap sourceMap, IBotTelemetryClient telemetryClient)
        {
            this.conversationState = conversationState;
            this.userState         = userState;
            this.dialogState       = conversationState.CreateProperty <DialogState>("DialogState");
            this.sourceMap         = sourceMap;
            this.resourceExplorer  = resourceExplorer;
            this.rootDialogFile    = rootDialogFile;
            this.telemetryClient   = telemetryClient;
            DeclarativeTypeLoader.AddComponent(new QnAMakerComponentRegistration());

            LoadRootDialogAsync();
        }
예제 #6
0
 public static void AssemblyInit(TestContext context)
 {
     lock (rootFolder)
     {
         if (ResourceExplorer == null)
         {
             ResourceExplorer          = new ResourceExplorer().AddFolder(rootFolder);
             TypeFactory.Configuration = new ConfigurationBuilder().AddInMemoryCollection().Build();
             DeclarativeTypeLoader.AddComponent(new DialogComponentRegistration());
             DeclarativeTypeLoader.AddComponent(new AdaptiveComponentRegistration());
             DeclarativeTypeLoader.AddComponent(new LanguageGenerationComponentRegistration());
             DeclarativeTypeLoader.AddComponent(new QnAMakerComponentRegistration());
         }
     }
 }
예제 #7
0
        /// <summary>
        /// Register ILanguageGenerator as default langugage generator.
        /// </summary>
        /// <param name="botAdapter">botAdapter to add services to.</param>
        /// <param name="resourceExplorer">resourceExporer to provide to LanguageGenerator.</param>
        /// <param name="languageGenerator">LanguageGenerator to use.</param>
        /// <returns>botAdapter.</returns>
        public static BotAdapter UseLanguageGeneration(this BotAdapter botAdapter, ResourceExplorer resourceExplorer, ILanguageGenerator languageGenerator)
        {
            DeclarativeTypeLoader.AddComponent(new LanguageGenerationComponentRegistration());

            lock (languageGeneratorManagers)
            {
                if (!languageGeneratorManagers.TryGetValue(resourceExplorer ?? throw new ArgumentNullException(nameof(resourceExplorer)), out var lgm))
                {
                    lgm = new LanguageGeneratorManager(resourceExplorer);
                    languageGeneratorManagers[resourceExplorer] = lgm;
                }

                botAdapter.Use(new RegisterClassMiddleware <LanguageGeneratorManager>(lgm));
                botAdapter.Use(new RegisterClassMiddleware <ILanguageGenerator>(languageGenerator ?? throw new ArgumentNullException(nameof(languageGenerator))));
                return(botAdapter);
            }
        }
예제 #8
0
 public ComposerBot(string rootDialogFile, ConversationState conversationState, UserState userState, ResourceExplorer resourceExplorer, ISourceMap sourceMap)
 {
     this.conversationState = conversationState;
     this.userState         = userState;
     this.dialogState       = conversationState.CreateProperty <DialogState>("DialogState");
     this.sourceMap         = sourceMap;
     this.resourceExplorer  = resourceExplorer;
     this.rootDialogFile    = rootDialogFile;
     DeclarativeTypeLoader.AddComponent(new QnAMakerComponentRegistration());
     // auto reload dialogs when file changes
     this.resourceExplorer.Changed += (resources) =>
     {
         if (resources.Any(resource => resource.Id == ".dialog"))
         {
             Task.Run(() => this.LoadRootDialogAsync());
         }
     };
     LoadRootDialogAsync();
 }
 /// <summary>
 /// Register QnAMaker types.
 /// </summary>
 /// <param name="botAdapter">BotAdapter to add middleware to.</param>
 /// <returns>The bot adapter.</returns>
 public static BotAdapter UseQnAMaker(this BotAdapter botAdapter)
 {
     DeclarativeTypeLoader.AddComponent(new QnAMakerComponentRegistration());
     return(botAdapter);
 }
예제 #10
0
        public static void Main(string[] args)
        {
            var    secret = "profile";
            string luis   = null;

            if (args.Length == 0)
            {
                Help();
            }

            for (var i = 0; i < args.Length; ++i)
            {
                var arg = args[i];
                if (arg.StartsWith("-"))
                {
                    if (arg == "-secret")
                    {
                        if (++i < args.Length)
                        {
                            secret = args[i];
                        }
                        else
                        {
                            throw new System.ArgumentException("Missing --secret value");
                        }
                    }
                    else if (arg == "-luis")
                    {
                        if (++i < args.Length)
                        {
                            luis = args[i];
                        }
                        else
                        {
                            throw new System.ArgumentException("Missing --luis value");
                        }
                    }
                    else
                    {
                        Console.Error.WriteLine($"Unknown arg {arg}");
                        Help();
                    }
                }
                else
                {
                    var cd     = Directory.GetCurrentDirectory();
                    var dir    = Path.GetDirectoryName(arg);
                    var name   = Path.GetFileName(arg);
                    var config = new ConfigurationBuilder()
                                 .AddInMemoryCollection()
                                 .UseLuisSettings(luis ?? dir, secret)
                                 .Build();
                    var explorer = new ResourceExplorer().AddFolder(dir);
                    DeclarativeTypeLoader.Reset();
                    TypeFactory.Configuration = config;
                    DeclarativeTypeLoader.AddComponent(new DialogComponentRegistration());
                    DeclarativeTypeLoader.AddComponent(new AdaptiveComponentRegistration());
                    DeclarativeTypeLoader.AddComponent(new LanguageGenerationComponentRegistration());
                    DeclarativeTypeLoader.AddComponent(new QnAMakerComponentRegistration());
                    DeclarativeTypeLoader.AddComponent(new MockLuisComponentRegistration());
                    var script = explorer.LoadType <TestScript>(name);
                    var timer  = new System.Diagnostics.Stopwatch();
                    Console.Write($"Executing {arg}");
                    timer.Start();
                    script.ExecuteAsync(testName: name, configuration: config, resourceExplorer: explorer).Wait();
                    timer.Stop();
                    Console.WriteLine($" took {timer.ElapsedMilliseconds} ms");
                }
            }
        }
 /// <summary>
 /// Register MessageActivityGeneration.
 /// </summary>
 /// <param name="botAdapter">botAdapter to add services to.</param>
 /// <param name="messageGenerator">(OPTIONAL) Default is TextMessageActivityGenerator(). </param>
 /// <returns>botAdapter.</returns>
 public static BotAdapter UseMessageActivityGeneration(this BotAdapter botAdapter, IActivityGenerator messageGenerator = null)
 {
     DeclarativeTypeLoader.AddComponent(new LanguageGenerationComponentRegistration());
     botAdapter.Use(new RegisterClassMiddleware <IActivityGenerator>(messageGenerator ?? new ActivityGenerator()));
     return(botAdapter);
 }
예제 #12
0
        public static void Main(string[] args)
        {
            var    secret     = "profile";
            string luis       = null;
            var    iterations = 1;

            if (args.Length == 0)
            {
                Help();
            }

            for (var i = 0; i < args.Length; ++i)
            {
                var arg = args[i];
                if (arg.StartsWith("-"))
                {
                    if (arg == "-secret")
                    {
                        if (++i < args.Length)
                        {
                            secret = args[i];
                        }
                        else
                        {
                            throw new System.ArgumentException("Missing -secret value");
                        }
                    }
                    else if (arg == "-luis")
                    {
                        if (++i < args.Length)
                        {
                            luis = args[i];
                        }
                        else
                        {
                            throw new System.ArgumentException("Missing -luis value");
                        }
                    }
                    else if (arg == "-n")
                    {
                        if (++i < args.Length)
                        {
                            iterations = int.Parse(args[i]);
                        }
                        else
                        {
                            throw new System.ArgumentException("Missing -n value");
                        }
                    }
                    else
                    {
                        Console.Error.WriteLine($"Unknown arg {arg}");
                        Help();
                    }
                }
                else
                {
                    var cd     = Directory.GetCurrentDirectory();
                    var dir    = Path.GetDirectoryName(arg);
                    var name   = Path.GetFileName(arg);
                    var config = new ConfigurationBuilder()
                                 .AddInMemoryCollection()
                                 .UseLuisSettings(luis ?? dir, secret)
                                 .Build();
                    var explorer = new ResourceExplorer().AddFolder(dir);
                    DeclarativeTypeLoader.Reset();
                    TypeFactory.Configuration = config;
                    DeclarativeTypeLoader.AddComponent(new DialogComponentRegistration());
                    DeclarativeTypeLoader.AddComponent(new AdaptiveComponentRegistration());
                    DeclarativeTypeLoader.AddComponent(new LanguageGenerationComponentRegistration());
                    DeclarativeTypeLoader.AddComponent(new QnAMakerComponentRegistration());
                    DeclarativeTypeLoader.AddComponent(new MockLuisComponentRegistration());
                    var script = explorer.LoadType <TestScript>(name);
                    var timer  = new System.Diagnostics.Stopwatch();
                    Console.WriteLine($"Executing {arg} for {iterations} iterations");
                    timer.Start();
                    var adapter = script.DefaultTestAdapter(testName: name, resourceExplorer: explorer, configuration: config);
                    timer.Stop();
                    var loading = timer.ElapsedMilliseconds;
                    Console.WriteLine($" loading took {loading} ms");

                    var iterationTime = 0L;
                    var firstTime     = 0l;
                    for (var iter = 0; iter < iterations; ++iter)
                    {
                        timer.Restart();
                        script.ExecuteAsync(adapter: adapter).Wait();
                        timer.Stop();
                        if (firstTime > 0)
                        {
                            iterationTime += timer.ElapsedMilliseconds;
                        }
                        else
                        {
                            firstTime = timer.ElapsedMilliseconds;
                        }

                        Console.WriteLine($"  {iter}: {timer.ElapsedMilliseconds} ms");
                    }

                    Console.Write($" Total time={loading + firstTime + iterationTime} ms");
                    if (iterations > 1)
                    {
                        Console.WriteLine($", per iteration after 1st={iterationTime / ((float)iterations - 1)} ms");
                    }
                }
            }
        }
 /// <summary>
 /// Replace Microsoft.LUISRecognizer declarative implementation with <see cref="MockLuisRecognizer"/>.
 /// </summary>
 /// <param name="botAdapter">Adapter to register with.</param>
 /// <returns>Modified adapter.</returns>
 public static BotAdapter UseMockLuis(this BotAdapter botAdapter)
 {
     DeclarativeTypeLoader.AddComponent(new MockLuisComponentRegistration());
     return(botAdapter);
 }
 /// <summary>
 /// Register ResourceExplorer and optionally register more types.
 /// </summary>
 /// <param name="botAdapter">BotAdapter to add middleware to.</param>
 /// <returns>The bot adapter.</returns>
 public static BotAdapter UseAdaptiveDialogs(this BotAdapter botAdapter)
 {
     DeclarativeTypeLoader.AddComponent(new AdaptiveComponentRegistration());
     DeclarativeTypeLoader.AddComponent(new LuisComponentRegistration());
     return(botAdapter);
 }