public void EndsWith()
        {
            string source = "abcde";
            var    seg    = new StringSegment(source);

            Assert.IsTrue(seg.EndsWith("cde"));

            source = "abCDe";
            seg    = new StringSegment(source);

            Assert.IsFalse(seg.EndsWith("cde"));

            source = "abCDe";
            seg    = new StringSegment(source);

            Assert.IsTrue(seg.EndsWith("cde", true));

            source = "de";
            seg    = new StringSegment(source);

            Assert.IsFalse(seg.EndsWith("cde"));

            source = "abcd";
            seg    = new StringSegment(source);

            Assert.IsFalse(seg.EndsWith("bc"));

            source = "abcd";
            var segBCD = new StringSegment(source, 1, 3);

            Assert.IsTrue(segBCD.EndsWith("cd"));
            Assert.IsTrue(segBCD.EndsWith('d'));
        }
        /// <summary>
        /// 获取JSON格式的值
        /// </summary>
        /// <param name="member"></param>
        /// <returns></returns>
        public static CodeType GetValueType(StringSegment code)
        {
            var codeType = CodeType.NonStringValue;

            if (code.Length >= 2)
            {
                if ((code.StartsWith('\"') && code.EndsWith('\"')) ||
                    (code.StartsWith('\'') && code.EndsWith('\'')))
                {
                    codeType = CodeType.StringValue;
                }
            }
            return(codeType);
        }
示例#3
0
        // Returns true if the value starts and ends with a quote
        private bool IsQuoted(StringSegment value)
        {
            Contract.Assert(value != null);

            return(value.Length > 1 && value.StartsWith("\"", StringComparison.Ordinal) &&
                   value.EndsWith("\"", StringComparison.Ordinal));
        }
示例#4
0
        // Add/update the given parameter in the list, encoding if necessary.
        // Remove if value is null/Empty
        private void SetName(StringSegment parameter, StringSegment value)
        {
            var nameParameter = NameValueHeaderValue.Find(_parameters, parameter);

            if (StringSegment.IsNullOrEmpty(value))
            {
                // Remove parameter
                if (nameParameter != null)
                {
                    _parameters.Remove(nameParameter);
                }
            }
            else
            {
                var processedValue = StringSegment.Empty;
                if (parameter.EndsWith("*", StringComparison.Ordinal))
                {
                    processedValue = Encode5987(value);
                }
                else
                {
                    processedValue = EncodeAndQuoteMime(value);
                }

                if (nameParameter != null)
                {
                    nameParameter.Value = processedValue;
                }
                else
                {
                    Parameters.Add(new NameValueHeaderValue(parameter, processedValue));
                }
            }
        }
 public static bool IsObject(StringSegment code)
 {
     if (code.StartsWith("{"))
     {
         if (!code.EndsWith("}"))
         {
             throw new CodeFormatErrorException(code.ToString() + "以 { 作为首字符,但是没有以 } 结尾! ");
         }
         return(true);
     }
     return(false);
 }
 public static bool IsList(StringSegment code)
 {
     if (code.StartsWith("["))
     {
         if (!code.EndsWith("]"))
         {
             throw new CodeFormatErrorException(code.ToString() + "以 [ 作为首字符,但是没有以 ] 结尾! ");
         }
         return(true);
     }
     return(false);
 }
示例#7
0
        public static StringSegment TrimHtmlCdata(this StringSegment segment)
        {
            if (segment.StartsWith("<!--//--><![CDATA[//><!--", StringComparison.Ordinal))
            {
                segment = segment.Subsegment("<!--//--><![CDATA[//><!--".Length);
            }
            else if (segment.StartsWith("<!--/*--><![CDATA[/*><!--*/", StringComparison.Ordinal))
            {
                segment = segment.Subsegment("<!--/*--><![CDATA[/*><!--*/".Length);
            }

            if (segment.EndsWith("//--><!]]>", StringComparison.Ordinal))
            {
                segment = segment.Subsegment(0, segment.Length - "//--><!]]>".Length);
            }
            else if (segment.EndsWith("/*]]>*/-->", StringComparison.Ordinal))
            {
                segment = segment.Subsegment(0, segment.Length - "/*]]>*/-->".Length);
            }

            return(segment);
        }
示例#8
0
        public InterceptMode InterceptOnce()
        {
            StringSegment etag = SingleSegment(_response, "ETag");

            if (!etag.HasValue)
            {
                return(InterceptMode.DoingNothing);
            }

            if (etag.StartsWith("\"", StringComparison.Ordinal) &&
                etag.EndsWith("\"", StringComparison.Ordinal))
            {
                _compressedETag = etag.Substring(0, etag.Count - 1) + "^" + _encoding.Name + "\"";
            }
            else
            {
                _compressedETag = "\"" + etag.Value + "^" + _encoding.Name + "\"";
            }

            HttpStatusCode statusCode = (HttpStatusCode)_response.StatusCode;

            if (statusCode == HttpStatusCode.NotModified)
            {
                return(InterceptMode.SentFromStorage);
            }

            var key = new CompressedKey
            {
                ETag               = _compressedETag,
                RequestPath        = _request.Path,
                RequestQueryString = _request.QueryString,
                RequestMethod      = _request.Method,
            };

            _compressedItem = _storage.Open(key);
            if (_compressedItem != null)
            {
                return(InterceptMode.SentFromStorage);
            }

            _compressedItemBuilder = _storage.Create(key);
            _compressingStream     = _encoding.CompressTo(_compressedItemBuilder.Stream);
            return(InterceptMode.CompressingToStorage);
        }
示例#9
0
        public void StringSegment_EndsWith_Invalid()
        {
            // Arrange
            var segment = new StringSegment();

            // Act
            var result = segment.EndsWith(string.Empty, StringComparison.Ordinal);

            // Assert
            Assert.False(result);
        }
示例#10
0
        public void StringSegment_EndsWith_Valid(string candidate, StringComparison comparison, bool expectedResult)
        {
            // Arrange
            var segment = new StringSegment("Hello, World!", 1, 4);

            // Act
            var result = segment.EndsWith(candidate, comparison);

            // Assert
            Assert.Equal(expectedResult, result);
        }
示例#11
0
 public bool EndsWith() => _largeSegment.EndsWith("ld!", StringComparison.Ordinal);