Esempio n. 1
0
        public async Task EvaluateNullStringTestAsync()
        {
            var evaluator = new MacroEvaluator(new Mock <IProjectProperties>().Object, _emptyTransients, EmptyRemoteEnv, new DebuggerOptions(), new ProfileOptions());

            // Null strings may come from external sources (e.g. the .user.json file) and should be treated as empty
            Assert.True((await evaluator.EvaluateAsync(null)).TryGetResult(out var evaluated, out _));
            Assert.Equal("", evaluated);
        }
Esempio n. 2
0
        public async Task <Result <IActionStep> > EvaluateStepAsync(IActionStep step, string sourceAction)
        {
            await VSPackage.TaskFactory.SwitchToMainThreadAsync();

            var transients = GetMacroTransients();
            var evaluator  = new MacroEvaluator(ProjectProperties, transients, RemoteEnvironment, _project.Options.DebuggerOptions, _dirtyProfile);

            var actionEvalEnv = new ActionEvaluationEnvironment("", "", _dirtyProfile.General.RunActionsLocally,
                                                                new DebugServer.IPC.CapabilityInfo(default, default, default), _dirtyProfile.Actions);
Esempio n. 3
0
        void OnGUI()
        {
            _macro = EditorGUILayout.TextArea(_macro, GUILayout.ExpandHeight(true));

            if (GUILayout.Button("Execute"))
            {
                MacroEvaluator.Eval(_macro);
            }
        }
Esempio n. 4
0
    void OnGUI()
    {
        macro = EditorGUILayout.TextArea(macro, GUILayout.ExpandHeight(true));

        if (GUILayout.Button(executeLabel))
        {
            MacroEvaluator.Eval(macro);
        }
    }
Esempio n. 5
0
        public async Task EmptyMacroNameTestAsync()
        {
            var props     = new Mock <IProjectProperties>(MockBehavior.Strict); // fails the test if called
            var evaluator = new MacroEvaluator(props.Object, _emptyTransients, EmptyRemoteEnv, new DebuggerOptions(), new ProfileOptions());

            Assert.True((await evaluator.EvaluateAsync("$()")).TryGetResult(out var evaluated, out _));
            Assert.Equal("$()", evaluated);
            Assert.True((await evaluator.EvaluateAsync("")).TryGetResult(out evaluated, out _));
            Assert.Equal("", evaluated);
        }
Esempio n. 6
0
        public async Task RecursiveMacroInEvaluationChainTestAsync()
        {
            var props   = new Mock <IProjectProperties>();
            var options = new ProfileOptions();

            options.Macros.Add(new MacroItem("A", "$(A)", userDefined: true));
            options.Macros.Add(new MacroItem("B", "$(A)", userDefined: true));

            var evaluator = new MacroEvaluator(props.Object, _emptyTransients, EmptyRemoteEnv, new DebuggerOptions(), options);

            Assert.False((await evaluator.EvaluateAsync("$(B)")).TryGetResult(out _, out var error));
            Assert.Equal("$(B) contains a cycle: $(B) -> $(A) -> $(A)", error.Message);
        }
Esempio n. 7
0
        private string LogCreatedConcepts(MacroEvaluator macroEvaluator, IConceptInfo conceptInfo, IEnumerable <IConceptInfo> macroCreatedConcepts, DslContainer.AddNewConceptsReport newConceptsReport)
        {
            var report = new StringBuilder();

            report.Append(macroEvaluator.Name + " on " + conceptInfo.GetShortDescription()
                          + " created: " + string.Join(", ", macroCreatedConcepts.Select(c => c.GetShortDescription())) + ".");

            var newUniqueIndex = new HashSet <string>(newConceptsReport.NewUniqueConcepts.Select(c => c.GetKey()));

            LogConcepts(report, "New resolved", newConceptsReport.NewlyResolvedConcepts.Where(c => newUniqueIndex.Contains(c.GetKey())));
            LogConcepts(report, "Old resolved", newConceptsReport.NewlyResolvedConcepts.Where(c => !newUniqueIndex.Contains(c.GetKey())));
            LogConcepts(report, "New unresolved", newConceptsReport.NewUniqueConcepts.Where(c => _dslContainer.FindByKey(c.GetKey()) == null));

            return(report.ToString());
        }
Esempio n. 8
0
        public async Task NullRemoteEnvironmentTreatedAsLocalTestAsync()
        {
            var props     = new Mock <IProjectProperties>();
            var localPath = Environment.GetEnvironmentVariable("PATH");

            var evaluator = new MacroEvaluator(props.Object, _emptyTransients, remoteEnvironment: null, new DebuggerOptions(), new ProfileOptions());
            var result    = await evaluator.EvaluateAsync("Local: $ENV(PATH), Remote: $ENVR(PATH)");

            Assert.True(result.TryGetResult(out var evaluated, out _));
            Assert.Equal($"Local: {localPath}, Remote: {localPath}", evaluated);

            result = await evaluator.EvaluateAsync("Local: $ENV(HOPEFULLY_NON_EXISTENT_VAR), Remote: $ENVR(HOPEFULLY_NON_EXISTENT_VAR)");

            Assert.True(result.TryGetResult(out evaluated, out _));
            Assert.Equal("Local: , Remote: ", evaluated);
        }
Esempio n. 9
0
        public async Task ParserEdgeCaseTestAsync()
        {
            var props = new Mock <IProjectProperties>();

            props.Setup((p) => p.GetEvaluatedPropertyValueAsync("S")).ReturnsAsync("start");
            props.Setup((p) => p.GetEvaluatedPropertyValueAsync("M")).ReturnsAsync("middle");
            props.Setup((p) => p.GetEvaluatedPropertyValueAsync("E")).ReturnsAsync("end");

            var evaluator = new MacroEvaluator(props.Object, _emptyTransients, EmptyRemoteEnv, new DebuggerOptions(), new ProfileOptions());

            Assert.True((await evaluator.EvaluateAsync("$(S) $(M) $(E)")).TryGetResult(out var evaluated, out _));
            Assert.Equal("start middle end", evaluated);
            Assert.True((await evaluator.EvaluateAsync("$(S) $$() $( $(M) $(E)")).TryGetResult(out evaluated, out _));
            Assert.Equal("start $$() $( middle end", evaluated);
            Assert.True((await evaluator.EvaluateAsync("$( nested $(M) $( $")).TryGetResult(out evaluated, out _));
            Assert.Equal("$( nested middle $( $", evaluated);
        }
Esempio n. 10
0
        public async Task ProjectPropertiesTestAsync()
        {
            var options = new ProfileOptions();

            options.Macros.Add(new MacroItem("RadDeployDir", "/home/sayaka/projects", userDefined: true));
            options.Macros.Add(new MacroItem("RadDebugScript", "$(RadDeployDir)/debug_bin.py", userDefined: true));
            options.Macros.Add(new MacroItem("RadDebugArgs", "$(RadDebugScript) --solution $(SolutionDir)", userDefined: true));

            var props = new Mock <IProjectProperties>();

            props.Setup((p) => p.GetEvaluatedPropertyValueAsync("SolutionDir")).ReturnsAsync("/opt/rocm/examples/h");

            var evaluator = new MacroEvaluator(props.Object, _emptyTransients, EmptyRemoteEnv, new DebuggerOptions(), options);
            var result    = await evaluator.EvaluateAsync("$(RadDebugArgs)");

            Assert.True(result.TryGetResult(out var evaluated, out _));
            Assert.Equal("/home/sayaka/projects/debug_bin.py --solution /opt/rocm/examples/h", evaluated);
        }
Esempio n. 11
0
        public async Task EnvironmentVariablesTestAsync()
        {
            var props     = new Mock <IProjectProperties>();
            var remoteEnv = GetRemoteEnv(new Dictionary <string, string>()
            {
                { "MAMI_BREAKPOINT", "head" }, { "PATH", "/usr/bin:/root/soulgems" }
            });
            var localPath = Environment.GetEnvironmentVariable("PATH");

            var evaluator = new MacroEvaluator(props.Object, _emptyTransients, remoteEnv, new DebuggerOptions(), new ProfileOptions());
            var result    = await evaluator.EvaluateAsync("Local: $ENV(PATH), Remote: $ENVR(PATH), Break at: $ENVR(MAMI_BREAKPOINT)");

            Assert.True(result.TryGetResult(out var evaluated, out _));
            Assert.Equal($"Local: {localPath}, Remote: /usr/bin:/root/soulgems, Break at: head", evaluated);

            result = await evaluator.EvaluateAsync("Local: $ENV(HOPEFULLY_NON_EXISTENT_VAR), Remote: $ENVR(HOPEFULLY_NON_EXISTENT_VAR)");

            Assert.True(result.TryGetResult(out evaluated, out _));
            Assert.Equal("Local: , Remote: ", evaluated);
        }
Esempio n. 12
0
        public void RecursiveMacroPreviewTest()
        {
            TestHelper.InitializePackageTaskFactory();

            var profile = new ProfileOptions();

            profile.Macros.Add(new MacroItem("A", "$(B)", userDefined: true));
            profile.Macros.Add(new MacroItem("B", "$(A)", userDefined: true));
            profile.Macros.Add(new MacroItem("C", "some independent value", userDefined: true));

            var props     = new Mock <IProjectProperties>();
            var evaluator = new MacroEvaluator(props.Object,
                                               new MacroEvaluatorTransientValues(0, @"I:\C\ftg", Array.Empty <uint>(), new ReadOnlyCollection <string>(Array.Empty <string>())),
                                               MacroEvaluatorTests.EmptyRemoteEnv,
                                               new DebuggerOptions(), profile);
            var context = new MacroEditContext("A", "$(B)", evaluator);

            var preview = context.EvaluatedValue;

            Assert.Equal("$(B) contains a cycle: $(B) -> $(A) -> $(B)", preview);
        }
Esempio n. 13
0
        public async Task TransientValuesTestAsync()
        {
            var props      = new Mock <IProjectProperties>();
            var transients = new MacroEvaluatorTransientValues(sourceLine: 666, sourcePath: @"B:\welcome\home",
                                                               new[] { 13u }, new ReadOnlyCollection <string>(new[] { "m", "c", "ride" }));
            var evaluator = new MacroEvaluator(props.Object, transients, EmptyRemoteEnv, new DebuggerOptions(), new ProfileOptions());

            var result = await evaluator.GetMacroValueAsync(RadMacros.Watches);

            Assert.True(result.TryGetResult(out var evaluated, out _));
            Assert.Equal("m:c:ride", evaluated);

            result = await evaluator.EvaluateAsync($"$({RadMacros.ActiveSourceDir})\\$({RadMacros.ActiveSourceFile}):$({RadMacros.ActiveSourceFileLine}), stop at $({RadMacros.BreakLine})");

            Assert.True(result.TryGetResult(out evaluated, out _));
            Assert.Equal(@"B:\welcome\home:666, stop at 13", evaluated);

            transients = new MacroEvaluatorTransientValues(0, "nofile", new[] { 20u, 1u, 9u }, new ReadOnlyCollection <string>(new[] { "watch" }));
            evaluator  = new MacroEvaluator(props.Object, transients, EmptyRemoteEnv, new DebuggerOptions(), new ProfileOptions());
            result     = await evaluator.EvaluateAsync($"-l $({RadMacros.BreakLine})");

            Assert.True(result.TryGetResult(out evaluated, out _));
            Assert.Equal("-l 20:1:9", evaluated);
        }
Esempio n. 14
0
        public async Task RecursiveMacroInListTestAsync()
        {
            TestHelper.InitializePackageTaskFactory();

            var profile = new ProfileOptions();

            profile.Macros.Add(new MacroItem("A", "$(B)", userDefined: true));
            profile.Macros.Add(new MacroItem("B", "$(A)", userDefined: true));
            profile.Macros.Add(new MacroItem("C", "some independent value", userDefined: true));

            var props     = new Mock <IProjectProperties>();
            var evaluator = new MacroEvaluator(props.Object,
                                               new MacroEvaluatorTransientValues(0, @"I:\C\ftg", Array.Empty <uint>(), new ReadOnlyCollection <string>(Array.Empty <string>())),
                                               MacroEvaluatorTests.EmptyRemoteEnv,
                                               new DebuggerOptions(), profile);
            var context = new MacroEditContext("A", "$(B)", evaluator);

            await context.LoadPreviewListAsync(profile.Macros, props.Object, MacroEvaluatorTests.EmptyRemoteEnv);

            var displayedMacros = context.MacroListView.SourceCollection.Cast <KeyValuePair <string, string> >();

            Assert.Contains(new KeyValuePair <string, string>("$(B)", "<$(B) contains a cycle: $(B) -> $(A) -> $(B)>"), displayedMacros);
            Assert.Contains(new KeyValuePair <string, string>("$(C)", "some independent value"), displayedMacros);
        }