コード例 #1
0
 public static string ToPascalCase(string str)
 {
     ArgumentGuard.NotEmpty(str, nameof(str));
     return(str.Substring(0, 1).ToUpper() + str.Substring(1).ToLower());
 }
コード例 #2
0
 public static void TrimNotEmpty(ref string param, string paramName)
 {
     ArgumentGuard.NotNull(param, paramName);
     param = param.Trim();
     ArgumentGuard.NotEmpty(param, paramName);
 }
コード例 #3
0
        /// <summary>
        /// Parses the input user-agent string.
        /// </summary>
        /// <param name="userAgent">User agent string to parse</param>
        /// <param name="unknowns">Whether to treat unknown products as <c>Unknown</c> or
        /// throw exceptions</param>
        public static UserAgent ParseUserAgentString(string userAgent, bool unknowns = true)
        {
            ArgumentGuard.NotNull(userAgent, nameof(userAgent));

            userAgent = userAgent.Trim();
            var result = new UserAgent();

            result.OriginalUserAgentString = userAgent;
            // OS
            var oss     = new Dictionary <string, Match>();
            var matches = OSRegex_.Matches(userAgent);

            foreach (Match m in matches)
            {
                oss[m.Groups["os"].Value.ToLowerInvariant()] = m;
            }

            Match osmatch = null;

            if (matches.Count == 0)
            {
                if (unknowns)
                {
                    result.OS = OSNames.Unknown;
                }
                else
                {
                    throw new NotSupportedException("Unknown OS: {0}".Fmt(userAgent));
                }
            }
            else
            {
                if (oss.Count > 1 && oss.ContainsKey("android"))
                {
                    osmatch = oss["android"];
                }
                else
                {
                    osmatch = oss.First().Value;
                }

                result.OS             = osmatch.Groups["os"].Value;
                result.OSMajorVersion = osmatch.Groups["major"].Value;
                result.OSMinorVersion = osmatch.Groups["minor"].Value;
                if (!string.IsNullOrWhiteSpace(result.OSMajorVersion) && string.IsNullOrWhiteSpace(result.OSMinorVersion))
                {
                    result.OSMinorVersion = "0";
                }
            }

            // OS Normalization
            if (result.OS.StartsWithOrdinal("CPU"))
            {
                result.OS = OSNames.IOS;
            }
            else if (result.OS == "Windows XP")
            {
                result.OS             = OSNames.Windows;
                result.OSMajorVersion = "5";
                result.OSMinorVersion = "1";
            }
            else if (result.OS == "Windows 2000")
            {
                result.OS             = OSNames.Windows;
                result.OSMajorVersion = "5";
                result.OSMinorVersion = "0";
            }
            else if (result.OS == "Windows NT")
            {
                result.OS = OSNames.Windows;
                if (result.OSMajorVersion == "6" && result.OSMinorVersion == "1")
                {
                    result.OSMajorVersion = "7";
                    result.OSMinorVersion = "0";
                }
                else if (string.IsNullOrWhiteSpace(result.OSMajorVersion))
                {
                    result.OSMajorVersion = "4";
                    result.OSMinorVersion = "0";
                }
            }
            else if (result.OS == "Mac_PowerPC")
            {
                result.OS = OSNames.Macintosh;
            }
            else if (result.OS == "CrOS")
            {
                result.OS = OSNames.ChromeOS;
            }

            // Browser
            var browserMatch = BrowserRegex_.Match(userAgent);

            result.Browser             = browserMatch.Groups["product"].Value;
            result.BrowserMajorVersion = browserMatch.Groups["major"].Value;
            result.BrowserMinorVersion = browserMatch.Groups["minor"].Value;

            var browserOK = browserMatch.Success;

            if (result.OS == OSNames.Windows)
            {
                var edgeMatch = Edge_.Match(userAgent);
                if (edgeMatch.Success)
                {
                    result.Browser             = BrowserNames.Edge;
                    result.BrowserMajorVersion = edgeMatch.Groups["major"].Value;
                    result.BrowserMinorVersion = edgeMatch.Groups["minor"].Value;
                }

                // IE11 and later is "hidden" on purpose.
                // http://blogs.msdn.com/b/ieinternals/archive/2013/09/21/
                //   internet-explorer-11-user-agent-string-ua-string-sniffing-
                //   compatibility-with-gecko-webkit.aspx
                var iematch = HiddenIE_.Match(userAgent);
                if (iematch.Success)
                {
                    result.Browser             = BrowserNames.IE;
                    result.BrowserMajorVersion = iematch.Groups["major"].Value;
                    result.BrowserMinorVersion = iematch.Groups["minor"].Value;

                    browserOK = true;
                }
            }

            if (!browserOK)
            {
                if (unknowns)
                {
                    result.Browser = "Unknown";
                }
                else
                {
                    throw new NotSupportedException("Unknown browser: {0}".Fmt(userAgent));
                }
            }

            // Explicit browser version (if available)
            var versionMatch = VerRegex_.Match(userAgent);

            if (versionMatch.Success)
            {
                result.BrowserMajorVersion = versionMatch.Groups["major"].Value;
                result.BrowserMinorVersion = versionMatch.Groups["minor"].Value;
            }

            return(result);
        }
コード例 #4
0
        /// <summary>
        /// Returns the full path to the folder containing the input assembly.
        /// </summary>
        public static string GetAssemblyFolder(Assembly assembly)
        {
            ArgumentGuard.NotNull(assembly, nameof(assembly));

            return(Path.GetFullPath(Path.GetDirectoryName(assembly.Location)));
        }
コード例 #5
0
ファイル: Url.cs プロジェクト: applitools/Eyes.Sdk.DotNet
 public Url(Uri baseUri)
     : base(ArgumentGuard.NotNull(baseUri, nameof(baseUri)).ToString())
 {
 }