From 3661d649be602e114f32ee42307ebe25c0c06fa9 Mon Sep 17 00:00:00 2001 From: Axel Suarez Date: Tue, 28 Jan 2020 14:33:30 -0800 Subject: [PATCH] fixed namespace scenario for lugen cs --- packages/lu/src/commands/luis/generate/cs.ts | 9 +- .../lu/test/commands/luis/generate/cs.test.ts | 13 +++ .../test/fixtures/generate/NamespaceClass.cs | 89 +++++++++++++++++++ 3 files changed, 107 insertions(+), 4 deletions(-) create mode 100644 packages/lu/test/fixtures/generate/NamespaceClass.cs diff --git a/packages/lu/src/commands/luis/generate/cs.ts b/packages/lu/src/commands/luis/generate/cs.ts index 860898950..0f45a761a 100644 --- a/packages/lu/src/commands/luis/generate/cs.ts +++ b/packages/lu/src/commands/luis/generate/cs.ts @@ -47,12 +47,13 @@ export default class LuisGenerateCs extends Command { } flags.className = flags.className || app.name - flags.className = upperFirst(camelCase(flags.className)) - const dot_index = flags.className ? flags.className.indexOf('.') : -1 + const dot_index = flags.className ? flags.className.lastIndexOf('.') : -1 if (dot_index !== -1) { - space = flags.className.substr(dot_index + 1) - flags.className = flags.className.substr(0, dot_index) + space = flags.className.substr(0, dot_index) + flags.className = flags.className.substr(dot_index + 1) + } else { + flags.className = upperFirst(camelCase(flags.className)) } this.reorderEntities(app, 'entities') diff --git a/packages/lu/test/commands/luis/generate/cs.test.ts b/packages/lu/test/commands/luis/generate/cs.test.ts index 730c287b3..4a35b5591 100644 --- a/packages/lu/test/commands/luis/generate/cs.test.ts +++ b/packages/lu/test/commands/luis/generate/cs.test.ts @@ -127,4 +127,17 @@ describe('luis:generate:cs', () => { expect(ctx.stdout).to.include('Generating file at stdout') expect(ctx.stdout).to.include('// ') }) + + test + .stdout() + .command(['luis:generate:cs', + '--in', + `${path.join(__dirname, '../../../fixtures/generate/SimpleEntities.json')}`, + '--className', + 'Test.Namespace.NameOfTheClass', + '--out', + `${path.join(__dirname, '../../../fixtures/generate/results/')}`]) + .it('Generates class with namespace correctly', async () => { + await compareSourceFiles('../../../fixtures/generate/NameSpaceClass.cs', '../../../fixtures/generate/results/NameOfTheClass.cs') + }) }) diff --git a/packages/lu/test/fixtures/generate/NamespaceClass.cs b/packages/lu/test/fixtures/generate/NamespaceClass.cs new file mode 100644 index 000000000..9f0757da8 --- /dev/null +++ b/packages/lu/test/fixtures/generate/NamespaceClass.cs @@ -0,0 +1,89 @@ +// +// Code generated by luis:generate:cs +// Tool github: https://github.com/microsoft/botframwork-cli +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// +using Newtonsoft.Json; +using System.Collections.Generic; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.AI.Luis; +namespace Test.Namespace +{ + public partial class NameOfTheClass: IRecognizerConvert + { + [JsonProperty("text")] + public string Text; + + [JsonProperty("alteredText")] + public string AlteredText; + + public enum Intent { + }; + [JsonProperty("intents")] + public Dictionary Intents; + + public class _Entities + { + // Simple entities + public string[] City; + public string[] To; + public string[] From; + public string[] Name; + public string[] likee; + public string[] liker; + public string[] State; + public string[] Weather_Location; + public string[] destination; + public string[] source; + + + // Instance + public class _Instance + { + public InstanceData[] City; + public InstanceData[] From; + public InstanceData[] Name; + public InstanceData[] State; + public InstanceData[] To; + public InstanceData[] Weather_Location; + public InstanceData[] destination; + public InstanceData[] likee; + public InstanceData[] liker; + public InstanceData[] source; + } + [JsonProperty("$instance")] + public _Instance _instance; + } + [JsonProperty("entities")] + public _Entities Entities; + + [JsonExtensionData(ReadData = true, WriteData = true)] + public IDictionary Properties {get; set; } + + public void Convert(dynamic result) + { + var app = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(result, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore })); + Text = app.Text; + AlteredText = app.AlteredText; + Intents = app.Intents; + Entities = app.Entities; + Properties = app.Properties; + } + + public (Intent intent, double score) TopIntent() + { + Intent maxIntent = Intent.None; + var max = 0.0; + foreach (var entry in Intents) + { + if (entry.Value.Score > max) + { + maxIntent = entry.Key; + max = entry.Value.Score.Value; + } + } + return (maxIntent, max); + } + } +}