예제 #1
0
        private static string GetPopularRoutes(Area area, ResultParameters parameters)
        {
            string result = "Popular routes:\n";

            List <Route> popularRoutes = new List <Route>();

            if (area.PopularRouteUrls.Count == 0) //MountainProject doesn't list any popular routes. Figure out some ourselves
            {
                popularRoutes = area.GetPopularRoutes(3);
            }
            else
            {
                List <MPObject> itemsToSearch = new List <MPObject>();
                itemsToSearch.AddRange(area.SubAreas);
                itemsToSearch.AddRange(area.Routes);

                area.PopularRouteUrls.ForEach(p => popularRoutes.Add(MountainProjectDataSearch.GetItemWithMatchingUrl(p, itemsToSearch) as Route));
            }

            foreach (Route popularRoute in popularRoutes)
            {
                result += $"\n- {Markdown.Link(popularRoute.Name, popularRoute.URL)} {GetRouteAdditionalInfo(popularRoute, parameters)}";
            }

            if (string.IsNullOrEmpty(result))
            {
                return("");
            }

            result += Markdown.NewLine;

            return(result);
        }
예제 #2
0
        private static string GetRouteAdditionalInfo(Route route, ResultParameters parameters, bool showGrade = true, bool showHeight = true)
        {
            List <string> parts = new List <string>();

            if (showGrade)
            {
                parts.Add(GetRouteGrade(route, parameters).ToString());
            }

            if (showHeight && route.Height != null && route.Height.Value != 0)
            {
                parts.Add($"{Math.Round(route.Height.GetValue(Dimension.Units.Feet), 1)} ft/" +
                          $"{Math.Round(route.Height.GetValue(Dimension.Units.Meters), 1)} m");
            }

            if (!string.IsNullOrEmpty(route.AdditionalInfo))
            {
                parts.Add(route.AdditionalInfo);
            }

            if (parts.Count > 0)
            {
                return($"[{string.Join(", ", parts)}]");
            }
            else
            {
                return("");
            }
        }
        public bool UpdateResponseLog(MainLogDTO log, MyLogDBEntities logContext)
        {
            MainLog dbLog = logContext.MainLog.FirstOrDefault(x => x.ID == log.ID);

            if (dbLog != null)
            {
                dbLog.Succeed   = log.Succeed;
                dbLog.Exception = log.Exception;
                if (dbLog.Exception == true)
                {
                    dbLog.ExceptionDetail             = new MyLogManager.ExceptionDetail();
                    dbLog.ExceptionDetail.Description = log.ExceptionDesc;
                }
                dbLog.Duration = (int)(DateTime.Now.TimeOfDay - dbLog.Time).TotalSeconds;
                foreach (var parameter in log.ResultParameters)
                {
                    var dbparameter = new ResultParameters()
                    {
                        Name = parameter.Name, Value = parameter.Value
                    };
                    dbLog.ResultParameters.Add(dbparameter);
                }
                logContext.SaveChanges();
                return(true);
            }



            return(false);
        }
예제 #4
0
        public void TestSearch()
        {
            InitMPData();

            for (int i = 0; i < testCriteria_search.GetLength(0); i++)
            {
                string query       = testCriteria_search[i, 0];
                string expectedUrl = testCriteria_search[i, 1];

                _ = ResultParameters.ParseParameters(ref query); //This is here just to filter out any query items (not to be used)
                SearchParameters searchParameters = SearchParameters.ParseParameters(ref query);

                SearchResult searchResult = MountainProjectDataSearch.Search(query, searchParameters);

                if (string.IsNullOrEmpty(expectedUrl))
                {
                    Assert.IsNull(searchResult.FilteredResult, "Failed for " + testCriteria_search[i, 0]);
                }
                else
                {
                    Assert.AreEqual(Utilities.GetSimpleURL(Utilities.MPBASEURL + expectedUrl),
                                    searchResult.FilteredResult.URL, "Failed for " + testCriteria_search[i, 0]);
                }

                Assert.IsTrue(searchResult.TimeSpanTaken().TotalSeconds < 5, $"{query} took too long ({searchResult.TimeTakenMS} ms)");
            }
        }
        public ResultParameters CalculateStockPrice(decimal StartEarningPerShare, decimal EarningPerShareTTM, int IntervalYears, double MinimalAcceptableGrowthRate = 0.15)
        {
            InputParameters  inputParameters = new InputParameters(StartEarningPerShare, EarningPerShareTTM, IntervalYears, MinimalAcceptableGrowthRate);
            ResultParameters result          = _stickerPriceCalculator.CalculateStickPrice(inputParameters);

            return(result);
        }
예제 #6
0
        private static string GetPopularRoutes(Area area, ResultParameters parameters)
        {
            string result = "";

            List <Route> popularRoutes = new List <Route>();

            if (area.PopularRouteIDs.Count == 0) //MountainProject doesn't list any popular routes. Figure out some ourselves
            {
                popularRoutes = area.GetPopularRoutes(3);
            }
            else
            {
                area.PopularRouteIDs.ForEach(id => popularRoutes.Add(MountainProjectDataSearch.GetItemWithMatchingID(id, MountainProjectDataSearch.DestAreas) as Route));
            }

            foreach (Route popularRoute in popularRoutes)
            {
                result += $"\n- {Markdown.Link(popularRoute.Name, popularRoute.URL)} {GetRouteAdditionalInfo(popularRoute, parameters)}";
            }

            if (string.IsNullOrEmpty(result))
            {
                return("");
            }

            return("Popular routes:" + Markdown.NewLine + result + Markdown.NewLine);
        }
예제 #7
0
        private async Task UpdateResultAsync(ResultParameters parameters, Result result)
        {
            using (var context = this.factory.GetContext())
            {
                var entity = await context.Results.AsTracking()
                             .Where(x => x.Id == parameters.Id)
                             .SingleAsync();

                try
                {
                    entity.Ends          = result.Ends;
                    entity.IsClosed      = result.Closed;
                    entity.IsSold        = result.Sold;
                    entity.BidPrice      = result.BidPrice ?? entity.BidPrice;
                    entity.PurchasePrice = result.PurchasePrice ?? entity.PurchasePrice;
                    entity.FinalPrice    = result.FinalPrice ?? entity.FinalPrice;
                }
                catch
                {
                    // todo add log
                    // we assume the result does no longer exist
                    entity.IsClosed = true;
                }

                await context.SaveChangesAsync();
            }
        }
예제 #8
0
        private ResultParameters CalculateIntermediateVariable(IntermediateVariable intermediateVariable)
        {
            ResultParameters resultParameter = new ResultParameters();

            resultParameter.StickerPrice   = (decimal)Financial.PV(intermediateVariable.FutureGrowthRate, 10, 0, -(double)intermediateVariable.FutureStockPrice);
            resultParameter.MarginOfSafety = resultParameter.StickerPrice / 2.0m;
            return(resultParameter);
        }
예제 #9
0
        public static string GetFormattedString(SearchResult searchResult, ResultParameters parameters = null, bool includeUrl = true)
        {
            if (searchResult.IsEmpty())
            {
                return(null);
            }

            string result = "";

            if (searchResult.FilteredResult is Area)
            {
                Area inputArea = searchResult.FilteredResult as Area;
                if (!string.IsNullOrEmpty(inputArea.Statistics.ToString()))
                {
                    result += $"{Markdown.Bold(inputArea.Name)} [{inputArea.Statistics}]" + Markdown.NewLine;
                }
                else
                {
                    result += $"{Markdown.Bold(inputArea.Name)}" + Markdown.NewLine;
                }

                result += $"{Markdown.Bold(inputArea.Name)} [{inputArea.Statistics}]" + Markdown.NewLine;
                result += GetLocationString(inputArea, searchResult.RelatedLocation);
                result += GetPopularRoutes(inputArea, parameters);

                if (includeUrl)
                {
                    result += inputArea.URL;
                }
            }
            else if (searchResult.FilteredResult is Route)
            {
                Route inputRoute = searchResult.FilteredResult as Route;
                result += $"{Markdown.Bold(inputRoute.Name)} {GetRouteAdditionalInfo(inputRoute, parameters, showGrade: false, showHeight: false)}";

                result += Markdown.NewLine;

                result += $"Type: {string.Join(", ", inputRoute.Types)}" + Markdown.NewLine;
                result += $"Grade: {inputRoute.GetRouteGrade(parameters)}" + Markdown.NewLine;

                if (inputRoute.Height != null && inputRoute.Height.Value != 0)
                {
                    result += $"Height: {Math.Round(inputRoute.Height.GetValue(Dimension.Units.Feet), 1)} ft/" +
                              $"{Math.Round(inputRoute.Height.GetValue(Dimension.Units.Meters), 1)} m" +
                              Markdown.NewLine;
                }

                result += $"Rating: {inputRoute.Rating}/4" + Markdown.NewLine;
                result += GetLocationString(inputRoute, searchResult.RelatedLocation);

                if (includeUrl)
                {
                    result += inputRoute.URL;
                }
            }

            return(result);
        }
예제 #10
0
        public ResultParameters CalculateStickPrice(InputParameters inputParameter)
        {
            IntermediateVariable intermediateVariable = new IntermediateVariable();

            intermediateVariable = CalculateIntermediateVariable(inputParameter);
            ResultParameters resultParameters = CalculateIntermediateVariable(intermediateVariable);

            return(resultParameters);
        }
예제 #11
0
        public static async Task <Result> ResultFromSourceAsync(ResultParameters parameters)
        {
            var url      = Url.FromResultParameters(parameters);
            var response = await WebRequest.Create(url).GetResponseAsync();

            var document = new HtmlDocument();

            document.Load(response.GetResponseStream());
            return(new Result(document.DocumentNode));
        }
예제 #12
0
        /// <summary>
        /// Gets the name and value for each metadata property in this object that is not null.
        /// </summary>
        /// <returns>Name and value for each metadata property in this
        /// object that is not null as a MetaDataParameter object.</returns>
        public static List <MetaDataParameter> GetMetaDataParameters(object obj)
        {
            if (obj == null)
            {
                throw new ArgumentNullException("obj");
            }
            var metadata = ResultParameters.GetMetadataFromObject(obj);

            return(metadata.Select(meta => new MetaDataParameter(meta.Name, meta.Value)).ToList());
        }
예제 #13
0
        public override void Run()
        {
            Param1 = 5;
            var param = ResultParameters.GetParams(this);
            var dict  = param.ToDictionary();

            Assert.IsTrue((double)dict["Param1"] == Param1);
            Assert.IsTrue(dict.ContainsKey("sub/Index"));
            Assert.IsTrue(dict.ContainsKey("sub/Index2") == false);
            Console.WriteLine(param);
        }
예제 #14
0
        public static string GetRouteGrade(Route route, ResultParameters parameters)
        {
            if (parameters != null)
            {
                return(route.GetRouteGrade(parameters.GradeSystem).ToString());
            }
            else
            {
                List <Grade> grades = new List <Grade>();

                //Add "American" grades
                grades.AddRange(route.Grades.Where(g => g.System == GradeSystem.YDS || g.System == GradeSystem.Hueco));

                //Add ice grade (if necessary)
                Grade iceGrade = route.Grades.Find(g => g.System == GradeSystem.Ice);
                if ((route.Types.Contains(Route.RouteType.Ice) || route.Types.Contains(Route.RouteType.Snow) || route.Types.Contains(Route.RouteType.Alpine)) &&
                    iceGrade != null)
                {
                    grades.Add(iceGrade);
                }

                //Add international grades
                grades.AddRange(route.Grades.Where(g => g.System == GradeSystem.French || g.System == GradeSystem.UIAA || g.System == GradeSystem.Fontainebleau));

                if (grades.Count > 0)
                {
                    //Convert grades to strings, but "inject" Aid grade if it exists
                    Grade         aidGrade     = route.Grades.Find(g => g.System == GradeSystem.Aid);
                    List <string> gradeStrings = grades.Select(g =>
                    {
                        if (g.System == GradeSystem.YDS && aidGrade != null)
                        {
                            return($"{g.ToString(false)} ({aidGrade.ToString(false)})");
                        }
                        else
                        {
                            return(g.ToString(false));
                        }
                    }).ToList();

                    return(string.Join(" | ", gradeStrings));
                }
                else if (route.Grades.Count == 1)
                {
                    return(route.Grades.First().ToString(false));
                }
                else
                {
                    return("");
                }
            }
        }
예제 #15
0
        private async Task UnloadResultAsync(ResultParameters parameters)
        {
            using (var context = this.factory.GetContext())
            {
                var entity = await context.Results.AsTracking()
                             .Where(x => x.Id == parameters.Id)
                             .SingleAsync();

                entity.Updated  = DateTimeOffset.Now;
                entity.IsLocked = false;

                await context.SaveChangesAsync();
            }
        }
예제 #16
0
        public static string GetReplyForRequest(string commentBody)
        {
            //Get everything AFTER the keyword, but on the same line
            string queryText = Regex.Match(commentBody, BOTKEYWORDREGEX).Groups[1].Value.Trim();

            if (string.IsNullOrWhiteSpace(queryText))
            {
                return("I didn't understand what you were looking for. Please use the Feedback button below if you think this is a bug");
            }

            ResultParameters resultParameters = ResultParameters.ParseParameters(ref queryText);
            SearchParameters searchParameters = SearchParameters.ParseParameters(ref queryText);

            SearchResult searchResult = MountainProjectDataSearch.Search(queryText, searchParameters);

            return(GetResponse(queryText, searchParameters?.SpecificLocation, searchResult, resultParameters));
        }
예제 #17
0
        public ResultParameters Report()
        {
            SubmitParameters submits = this._submits;

            if (submits != null && submits.Valid())
            {
                if (General.IsNullable(submits.ClientIP))
                    submits.ClientIP = HttpContext.Current.Request.GetUserIP();

                if (General.IsNullable(submits.Sign))
                    submits.Sign = submits.MakeSign();

                string response = submits.Post(this.url);
                this._results = ResultParameters.Pares(response);
            }

            return this._results;
        }
예제 #18
0
        public void TestMethod1()
        {
            IStickerPriceCalculator iStickerPriceCalculator = new StickerPriceCalculator.BLL.StickerPriceCalculator();

            var     controller = new StickerPriceCalculatorController(iStickerPriceCalculator);
            decimal startEPS   = -1.36m;                // for example, RH has EPS=-1.36 in 2013
            decimal EPSTTM     = 2.16m;                 // for example , RH has trailing twelve month EPS for 2.16 in 2017 June
            int     years      = 3;                     //2013,2014,2015,2016 , that's N(4) - 1 = 3 years.
            double  MinimalAcceptableGrowthRate = 0.15; // that means MinimalAcceptableGrowthRate=15%;

            ResultParameters testedResult = controller.CalculateStockPrice(startEPS, EPSTTM, years, MinimalAcceptableGrowthRate);

            ResultParameters targetResultParameter = new ResultParameters();

            targetResultParameter.StickerPrice   = 64.80m;
            targetResultParameter.MarginOfSafety = 32.40m;

            Assert.AreEqual(testedResult.MarginOfSafety, targetResultParameter.MarginOfSafety);
            Assert.AreEqual(testedResult.StickerPrice, targetResultParameter.StickerPrice);
        }
예제 #19
0
 public static string FromResultParameters(ResultParameters parameters)
 {
     return(string.Format(ResultUrlPattern, parameters.ExternalId));
 }
예제 #20
0
파일: MacroPath.cs 프로젝트: ZHJEE/OpenTAP
        /// <summary> Expands the text. Macros are harvested from the optional TestPlanRun or the test step.</summary>
        /// <param name="run">A place to find additional metadata for macro expansion.</param>
        /// <param name="date">If no date was found in the metadata, this date will be used. If date is not supplied, DateTime.Now will be used.</param>
        /// <param name="testPlanDir">If no TestPlanDir was found in the metata, this TestPlanDir will be used.</param>
        /// <param name="replacements">Overrides other macro parameters.</param>
        /// <returns>The expanded string.</returns>
        public string Expand(TestPlanRun run, DateTime?date, string testPlanDir, Dictionary <string, object> replacements)
        {
            ITestStepParent context = Context;

            IEnumerable <(string, object)> getMacro()
            {
                // note: macros are case-insensitive.

                if (testPlanDir != null)
                {
                    yield return("TestPlanDir", testPlanDir);
                }

                if (date != null)
                {
                    yield return("date", date);
                }

                if (replacements != null)
                {
                    foreach (var elem in replacements)
                    {
                        yield return(elem.Key, elem.Value);
                    }
                }

                if (run != null)
                {
                    var runparams = run.Parameters.Concat(ResultParameters.GetMetadataFromObject(run)).Where(y => y.IsMetaData);

                    foreach (var v in runparams)
                    {
                        var path = v.Value;
                        yield return(v.Name, path);

                        yield return(v.MacroName, path);
                    }
                }

                ITestStepParent ctx = context;

                while (ctx != null)
                {
                    var p = ResultParameters.GetMetadataFromObject(ctx);
                    foreach (var v in p)
                    {
                        if (v.IsMetaData == false)
                        {
                            continue;
                        }
                        var path = v.Value;
                        yield return(v.Name, path);

                        yield return(v.MacroName, path);
                    }
                    ctx = ctx.Parent;
                }
                yield return("date", DateTime.Now);

                yield return("Verdict", Verdict.NotSet);

                var met = ResultParameters.GetComponentSettingsMetadataLazy(false);

                foreach (var ps in met)
                {
                    foreach (var v in ps)
                    {
                        if (v.IsMetaData == false)
                        {
                            continue;
                        }

                        var path = v.Value;
                        yield return(v.Name, path);

                        yield return(v.MacroName, path);
                    }
                }
            }

            return(ReplaceMacros(Text, getMacro().Select(x => (x.Item1, StringConvertProvider.GetString(x.Item2)))));
        }
예제 #21
0
 /// <summary> Creates a new TestRun </summary>
 public TestRun()
 {
     Id         = Guid.NewGuid();
     Parameters = new ResultParameters();
 }
예제 #22
0
        failState execTestPlan(TestPlanRun execStage, IList <ITestStep> steps)
        {
            WaitHandle.WaitAny(new[] { execStage.PromptWaitHandle, TapThread.Current.AbortToken.WaitHandle });
            bool resultListenerError = false;

            execStage.ScheduleInResultProcessingThread <IResultListener>(resultListener =>
            {
                try
                {
                    using (TimeoutOperation.Create(() => PrintWaitingMessage(new List <IResource>()
                    {
                        resultListener
                    })))
                        execStage.ResourceManager.WaitUntilResourcesOpened(TapThread.Current.AbortToken, resultListener);
                    try
                    {
                        // some resources might set metadata in the Open methods.
                        // this information needs to be propagated to result listeners as well.
                        // this returns quickly if its a lazy resource manager.
                        using (TimeoutOperation.Create(
                                   () => PrintWaitingMessage(new List <IResource>()
                        {
                            resultListener
                        })))
                            execStage.ResourceManager.WaitUntilAllResourcesOpened(TapThread.Current.AbortToken);
                    }
                    catch // this error will also be handled somewhere else.
                    {
                    }

                    execStage.WaitForSerialization();
                    foreach (var res in execStage.PromptedResources)
                    {
                        execStage.Parameters.AddRange(ResultParameters.GetMetadataFromObject(res));
                    }
                    resultListener.OnTestPlanRunStart(execStage);
                }
                catch (OperationCanceledException) when(execStage.MainThread.AbortToken.IsCancellationRequested)
                {
                    // test plan thread was aborted, this is OK.
                }
                catch (Exception ex)
                {
                    Log.Error("Error in OnTestPlanRunStart for '{0}': '{1}'", resultListener, ex.Message);
                    Log.Debug(ex);
                    resultListenerError = true;
                }
            }, true);

            if (resultListenerError)
            {
                return(failState.StartFail);
            }

            var sw = Stopwatch.StartNew();

            try
            {
                execStage.StepsWithPrePlanRun.Clear();
                if (!runPrePlanRunMethods(steps, execStage))
                {
                    return(failState.StartFail);
                }
            }
            catch (Exception e)
            {
                Log.Error(e.GetInnerMostExceptionMessage());
                Log.Debug(e);
                return(failState.StartFail);
            }
            finally{
                {
                    Log.Debug(sw, "PrePlanRun Methods completed");
                }
            }

            Stopwatch planRunOnlyTimer = Stopwatch.StartNew();
            var       runs             = new List <TestStepRun>();

            try
            {
                for (int i = 0; i < steps.Count; i++)
                {
                    var step = steps[i];
                    if (step.Enabled == false)
                    {
                        continue;
                    }
                    var run = step.DoRun(execStage, execStage);
                    if (!run.Skipped)
                    {
                        runs.Add(run);
                    }
                    run.CheckBreakCondition();

                    // note: The following is copied inside TestStep.cs
                    if (run.SuggestedNextStep is Guid id)
                    {
                        int nextindex = steps.IndexWhen(x => x.Id == id);
                        if (nextindex >= 0)
                        {
                            i = nextindex - 1;
                        }
                        // if skip to next step, dont add it to the wait queue.
                    }
                }
            }
            catch (TestStepBreakException breakEx)
            {
                Log.Info("{0}", breakEx.Message);
            }
            finally
            {
                // Now wait for them to actually complete. They might defer internally.
                foreach (var run in runs)
                {
                    run.WaitForCompletion();
                    execStage.UpgradeVerdict(run.Verdict);
                }
            }



            Log.Debug(planRunOnlyTimer, "Test step runs finished.");

            return(failState.Ok);
        }
예제 #23
0
        public static string GetFormattedString(SearchResult searchResult, ResultParameters parameters = null, bool includeUrl = true)
        {
            if (searchResult.IsEmpty())
            {
                return(null);
            }

            string result = "";

            if (searchResult.FilteredResult is Area)
            {
                Area inputArea = searchResult.FilteredResult as Area;

                Area latestAreaData = new Area {
                    ID = inputArea.ID
                };
                Parsers.ParseAreaAsync(latestAreaData, false, false).Wait(); //Get most updated data (straight from MountainProject page)

                if (!string.IsNullOrEmpty(latestAreaData.Statistics.ToString()))
                {
                    result += $"{Markdown.Bold(latestAreaData.Name)} [{latestAreaData.Statistics}]" + Markdown.NewLine;
                }
                else
                {
                    result += $"{Markdown.Bold(latestAreaData.Name)}" + Markdown.NewLine;
                }

                result += GetLocationString(latestAreaData, searchResult.RelatedLocation);
                result += GetPopularRoutes(latestAreaData, parameters);

                if (includeUrl)
                {
                    result += latestAreaData.URL;
                }
            }
            else if (searchResult.FilteredResult is Route)
            {
                Route inputRoute = searchResult.FilteredResult as Route;

                Route latestRouteData = new Route {
                    ID = inputRoute.ID
                };
                Parsers.ParseRouteAsync(latestRouteData, false).Wait(); //Get most updated data (straight from MountainProject page)

                result += $"{Markdown.Bold(latestRouteData.Name)} {GetRouteAdditionalInfo(latestRouteData, parameters, showGrade: false, showHeight: false)}";

                result += Markdown.NewLine;

                result += $"Type: {string.Join(", ", latestRouteData.Types)}" + Markdown.NewLine;
                result += $"Grade: {GetRouteGrade(latestRouteData, parameters)}" + Markdown.NewLine;

                if (latestRouteData.Height != null && latestRouteData.Height.Value != 0)
                {
                    result += $"Height: {Math.Round(latestRouteData.Height.GetValue(Dimension.Units.Feet), 1)} ft/" +
                              $"{Math.Round(latestRouteData.Height.GetValue(Dimension.Units.Meters), 1)} m" +
                              Markdown.NewLine;
                }

                result += $"Rating: {latestRouteData.Rating}/4" + Markdown.NewLine;
                result += GetLocationString(latestRouteData, searchResult.RelatedLocation);

                if (includeUrl)
                {
                    result += latestRouteData.URL;
                }
            }

            return(result);
        }
예제 #24
0
 public static string GetFormattedString(MPObject finalResult, ResultParameters parameters = null, bool includeUrl = true)
 {
     return(GetFormattedString(new SearchResult(finalResult), parameters, includeUrl));
 }
예제 #25
0
 private static string GetResponse(string queryText, string queryLocation, SearchResult searchResult, ResultParameters resultParameters)
 {
     if (searchResult.IsEmpty())
     {
         if (!string.IsNullOrEmpty(queryLocation))
         {
             return($"I could not find anything for \"{queryText}\" in \"{queryLocation}\". Please use the Feedback button below if you think this is a bug");
         }
         else
         {
             return($"I could not find anything for \"{queryText}\". Please use the Feedback button below if you think this is a bug");
         }
     }
     else if (searchResult.AllResults.Count > 1)
     {
         return($"I found the following info (out of {searchResult.AllResults.Count} total results):" + Markdown.HRule + GetFormattedString(searchResult, resultParameters));
     }
     else
     {
         return($"I found the following info:" + Markdown.HRule + GetFormattedString(searchResult, resultParameters));
     }
 }
예제 #26
0
        private static void ParseInputString()
        {
            MountainProjectDataSearch.InitMountainProjectData(serializationPath);
            if (MountainProjectDataSearch.DestAreas.Count() == 0)
            {
                Console.WriteLine("The xml either doesn't exist or is empty");
                Environment.Exit(0);
            }

            Console.WriteLine("File read.");

            bool keepSearching = true;

            while (keepSearching)
            {
                Console.WriteLine("\n\nPlease input the string you would like to parse: ");
                string input = Console.ReadLine();

                SearchParameters searchParameters = SearchParameters.ParseParameters(ref input);
                ResultParameters resultParameters = ResultParameters.ParseParameters(ref input);

                bool allResults = input.Contains("-all");
                if (allResults)
                {
                    input = input.Replace("-all", "").Trim();
                }

                Stopwatch    stopwatch    = Stopwatch.StartNew();
                SearchResult searchResult = MountainProjectDataSearch.Search(input, searchParameters);
                stopwatch.Stop();

                if (searchResult.IsEmpty())
                {
                    Console.WriteLine("Nothing found matching \"" + input + "\"");
                }
                else if (allResults)
                {
                    List <MPObject> matchedObjectsByPopularity = searchResult.AllResults.OrderByDescending(p => p.Popularity).ToList();
                    Console.WriteLine($"Found {matchedObjectsByPopularity.Count} items match that search query (found in {stopwatch.ElapsedMilliseconds} ms):");
                    foreach (MPObject result in matchedObjectsByPopularity)
                    {
                        string url = result.URL.Replace(Utilities.MPBASEURL, "");
                        if (result is Route)
                        {
                            Console.WriteLine($"    Route: {result.Name} (Pop: {result.Popularity}) | Location: {GetLocationString(result)} | {url}");
                        }
                        else if (result is Area)
                        {
                            Console.WriteLine($"    Area: {result.Name} (Pop: {result.Popularity}) | Location: {GetLocationString(result)} | {url}");
                        }
                    }
                }
                else
                {
                    string   resultStr = "";
                    MPObject result    = searchResult.FilteredResult;
                    if (result is Area)
                    {
                        resultStr = (result as Area).ToString();
                    }
                    else if (result is Route)
                    {
                        resultStr = (result as Route).ToString(resultParameters);
                    }

                    Console.WriteLine($"The following was found (found in {stopwatch.ElapsedMilliseconds} ms):");
                    Console.WriteLine("    " + resultStr);
                    Console.WriteLine($"    Location: {GetLocationString(result, searchResult.RelatedLocation)}");
                    Console.WriteLine("\nOpen result? (y/n) ");
                    if (Console.ReadLine().ToLower() == "y")
                    {
                        Process.Start(result.URL);
                    }
                }

                Console.WriteLine("\nSearch something else? (y/n) ");
                keepSearching = Console.ReadLine().ToLower() == "y";
            }
        }
예제 #27
0
        private TestPlanRun DoExecute(IEnumerable <IResultListener> resultListeners, IEnumerable <ResultParameter> metaDataParameters, HashSet <ITestStep> stepsOverride)
        {
            if (resultListeners == null)
            {
                throw new ArgumentNullException("resultListeners");
            }

            if (PrintTestPlanRunSummary && !resultListeners.Contains(summaryListener))
            {
                resultListeners = resultListeners.Concat(new IResultListener[] { summaryListener });
            }
            resultListeners = resultListeners.Where(r => r is IEnabledResource ? ((IEnabledResource)r).IsEnabled : true);
            IList <ITestStep> steps;

            if (stepsOverride == null)
            {
                steps = Steps;
            }
            else
            {
                // Remove steps that are already included via their parent steps.
                foreach (var step in stepsOverride)
                {
                    if (step == null)
                    {
                        throw new ArgumentException("stepsOverride may not contain null", "stepsOverride");
                    }

                    var p = step.GetParent <ITestStep>();
                    while (p != null)
                    {
                        if (stepsOverride.Contains(p))
                        {
                            throw new ArgumentException("stepsOverride may not contain steps and their parents.", "stepsOverride");
                        }
                        p = p.GetParent <ITestStep>();
                    }
                }
                steps = Utils.FlattenHeirarchy(Steps, step => step.ChildTestSteps).Where(stepsOverride.Contains).ToList();
            }

            long initTimeStamp = Stopwatch.GetTimestamp();
            var  initTime      = DateTime.Now;

            Log.Info("-----------------------------------------------------------------");

            var fileStreamFile = FileSystemHelper.CreateTempFile();
            var logStream      = new HybridStream(fileStreamFile, 1024 * 1024);

            var planRunLog = new FileTraceListener(logStream)
            {
                IsRelative = true
            };

            OpenTap.Log.AddListener(planRunLog);

            var allSteps        = Utils.FlattenHeirarchy(steps, step => step.ChildTestSteps);
            var allEnabledSteps = Utils.FlattenHeirarchy(steps.Where(x => x.Enabled), step => step.GetEnabledChildSteps());

            var enabledSinks = new HashSet <IResultSink>();

            TestStepExtensions.GetObjectSettings <IResultSink, ITestStep, IResultSink>(allEnabledSteps, true, null, enabledSinks);
            if (enabledSinks.Count > 0)
            {
                var sinkListener = new ResultSinkListener(enabledSinks);
                resultListeners = resultListeners.Append(sinkListener);
            }

            Log.Info("Starting TestPlan '{0}' on {1}, {2} of {3} TestSteps enabled.", Name, initTime, allEnabledSteps.Count, allSteps.Count);

            // Reset step verdict.
            foreach (var step in allSteps)
            {
                if (step.Verdict != Verdict.NotSet)
                {
                    step.Verdict = Verdict.NotSet;
                    step.OnPropertyChanged("Verdict");
                }
            }

            if (currentExecutionState != null)
            {
                // load result listeners that are _not_ used in the previous runs.
                // otherwise they wont get opened later.
                foreach (var rl in resultListeners)
                {
                    if (!currentExecutionState.ResultListeners.Contains(rl))
                    {
                        currentExecutionState.ResultListeners.Add(rl);
                    }
                }
            }

            var currentListeners = currentExecutionState != null ? currentExecutionState.ResultListeners : resultListeners;

            TestPlanRun execStage;
            bool        continuedExecutionState = false;

            if (currentExecutionState != null)
            {
                execStage = new TestPlanRun(currentExecutionState, initTime, initTimeStamp);

                continuedExecutionState = true;
            }
            else
            {
                execStage = new TestPlanRun(this, resultListeners.ToList(), initTime, initTimeStamp);

                execStage.Parameters.AddRange(PluginManager.GetPluginVersions(allEnabledSteps));
                execStage.ResourceManager.ResourceOpened += r =>
                {
                    execStage.Parameters.AddRange(PluginManager.GetPluginVersions(new List <object> {
                        r
                    }));
                };
            }


            if (metaDataParameters != null)
            {
                execStage.Parameters.AddRange(metaDataParameters);
            }

            var prevExecutingPlanRun = executingPlanRun.LocalValue;

            executingPlanRun.LocalValue = execStage;
            CurrentRun = execStage;

            failState runWentOk = failState.StartFail;

            // ReSharper disable once InconsistentNaming
            var preRun_Run_PostRunTimer = Stopwatch.StartNew();

            try
            {
                execStage.FailedToStart = true; // Set it here in case OpenInternal throws an exception. Could happen if a step is missing an instrument

                OpenInternal(execStage, continuedExecutionState, currentListeners.Cast <IResource>().ToList(), allEnabledSteps);

                execStage.WaitForSerialization();
                execStage.ResourceManager.BeginStep(execStage, this, TestPlanExecutionStage.Execute, TapThread.Current.AbortToken);

                if (continuedExecutionState)
                {  // Since resources are not opened, getting metadata cannot be done in the wait for resources continuation
                   // like shown in TestPlanRun. Instead we do it here.
                    foreach (var res in execStage.ResourceManager.Resources)
                    {
                        execStage.Parameters.AddRange(ResultParameters.GetMetadataFromObject(res));
                    }
                }

                runWentOk = failState.ExecFail; //important if test plan is aborted and runWentOk is never returned.
                runWentOk = execTestPlan(execStage, steps);
            }
            catch (Exception e)
            {
                if (e is OperationCanceledException && execStage.MainThread.AbortToken.IsCancellationRequested)
                {
                    Log.Warning(String.Format("TestPlan aborted. ({0})", e.Message));
                    execStage.UpgradeVerdict(Verdict.Aborted);
                }
                else if (e is ThreadAbortException)
                {
                    // It seems this actually never happens.
                    Log.Warning("TestPlan aborted.");
                    execStage.UpgradeVerdict(Verdict.Aborted);
                    //Avoid entering the finally clause.
                    Thread.Sleep(500);
                }
                else if (e is System.ComponentModel.LicenseException)
                {
                    Log.Error(e.Message);
                    execStage.UpgradeVerdict(Verdict.Error);
                }
                else
                {
                    Log.Warning("TestPlan aborted.");
                    Log.Error(e.Message);
                    Log.Debug(e);
                    execStage.UpgradeVerdict(Verdict.Error);
                }
            }
            finally
            {
                execStage.FailedToStart = (runWentOk == failState.StartFail);

                try
                {
                    finishTestPlanRun(execStage, preRun_Run_PostRunTimer, runWentOk, planRunLog, logStream);
                }
                catch (Exception ex)
                {
                    Log.Error("Error while finishing TestPlan.");
                    Log.Debug(ex);
                }

                OpenTap.Log.RemoveListener(planRunLog);
                planRunLog.Dispose();

                logStream.Dispose();
                File.Delete(fileStreamFile);

                // Clean all test steps StepRun, otherwise the next test plan execution will be stuck at TestStep.DoRun at steps that does not have a cleared StepRun.
                foreach (var step in allSteps)
                {
                    step.StepRun = null;
                }

                executingPlanRun.LocalValue = prevExecutingPlanRun;
                CurrentRun = prevExecutingPlanRun;
            }
            return(execStage);
        }
예제 #28
0
        public override void Run()
        {
            base.Run();

            var selected       = SelectedMembers.ToArray();
            var originalValues = selected.Select(set => set.GetValue(this)).ToArray();


            IEnumerable <decimal> range = LinearRange(SweepStart, SweepStop, (int)SweepPoints);

            if (SweepBehavior == SweepBehavior.Exponential)
            {
                range = ExponentialRange(SweepStart, SweepStop, (int)SweepPoints);
            }

            var    disps = selected.Select(x => x.GetDisplayAttribute()).ToList();
            string names = string.Join(", ", disps.Select(x => x.Name));

            if (disps.Count > 1)
            {
                names = string.Format("{{{0}}}", names);
            }

            foreach (var Value in range)
            {
                var val = StringConvertProvider.GetString(Value, CultureInfo.InvariantCulture);
                foreach (var set in selected)
                {
                    try
                    {
                        var value = StringConvertProvider.FromString(val, set.TypeDescriptor, this, CultureInfo.InvariantCulture);
                        set.SetValue(this, value);
                    }
                    catch (TargetInvocationException ex)
                    {
                        Log.Error("Unable to set '{0}' to value '{2}': {1}", set.GetDisplayAttribute().Name, ex.InnerException.Message, Value);
                        Log.Debug(ex.InnerException);
                    }
                }
                // Notify that values might have changes
                OnPropertyChanged("");

                var AdditionalParams = new ResultParameters();

                foreach (var disp in disps)
                {
                    AdditionalParams.Add(new ResultParameter(disp.Group.FirstOrDefault() ?? "", disp.Name, Value));
                }

                Log.Info("Running child steps with {0} = {1} ", names, Value);

                var runs = RunChildSteps(AdditionalParams, BreakLoopRequested).ToList();
                if (BreakLoopRequested.IsCancellationRequested)
                {
                    break;
                }
                runs.ForEach(r => r.WaitForCompletion());
            }
            for (int i = 0; i < selected.Length; i++)
            {
                selected[i].SetValue(this, originalValues[i]);
            }
        }
예제 #29
0
            /// <summary>
            /// 根据微信服务器响应的XML文本构建测速上报返回数据的对象
            /// </summary>
            /// <param name="xml">设置微信服务器响应的XML文本</param>
            /// <returns>返回构建成功的测速上报返回数据的对象</returns>
            public static ResultParameters Pares(string xml)
            {
                ResultParameters result = null;

                if (!General.IsNullable(xml))
                {
                    result = new ResultParameters();
                    result.FromXml(xml);
                }

                return result;
            }