public static void AppendFormat_Invalid()
{
var builder = new StringBuilder(0, 5);
builder.Append("Hello");
IFormatProvider formatter = null;
var obj1 = new object();
var obj2 = new object();
var obj3 = new object();
var obj4 = new object();
Assert.Throws<ArgumentNullException>("format", () => builder.AppendFormat(null, obj1)); // Format is null
Assert.Throws<ArgumentNullException>("format", () => builder.AppendFormat(null, obj1, obj2, obj3)); // Format is null
Assert.Throws<ArgumentNullException>("format", () => builder.AppendFormat(null, obj1, obj2, obj3)); // Format is null
Assert.Throws<ArgumentNullException>("format", () => builder.AppendFormat(null, obj1, obj2, obj3, obj4)); // Format is null
Assert.Throws<ArgumentNullException>("args", () => builder.AppendFormat("", null)); // Args is null
Assert.Throws<ArgumentNullException>("format", () => builder.AppendFormat(null, (object[])null)); // Both format and args are null
Assert.Throws<ArgumentNullException>("format", () => builder.AppendFormat(formatter, null, obj1)); // Format is null
Assert.Throws<ArgumentNullException>("format", () => builder.AppendFormat(formatter, null, obj1, obj2)); // Format is null
Assert.Throws<ArgumentNullException>("format", () => builder.AppendFormat(formatter, null, obj1, obj2, obj3)); // Format is null
Assert.Throws<ArgumentNullException>("format", () => builder.AppendFormat(formatter, null, obj1, obj2, obj3, obj4)); // Format is null
Assert.Throws<ArgumentNullException>("args", () => builder.AppendFormat(formatter, "", null)); // Args is null
Assert.Throws<ArgumentNullException>("format", () => builder.AppendFormat(formatter, null, null)); // Both format and args are null
Assert.Throws<FormatException>(() => builder.AppendFormat("{-1}", obj1)); // Format has value < 0
Assert.Throws<FormatException>(() => builder.AppendFormat("{-1}", obj1, obj2)); // Format has value < 0
Assert.Throws<FormatException>(() => builder.AppendFormat("{-1}", obj1, obj2, obj3)); // Format has value < 0
Assert.Throws<FormatException>(() => builder.AppendFormat("{-1}", obj1, obj2, obj3, obj4)); // Format has value < 0
Assert.Throws<FormatException>(() => builder.AppendFormat(formatter, "{-1}", obj1)); // Format has value < 0
Assert.Throws<FormatException>(() => builder.AppendFormat(formatter, "{-1}", obj1, obj2)); // Format has value < 0
Assert.Throws<FormatException>(() => builder.AppendFormat(formatter, "{-1}", obj1, obj2, obj3)); // Format has value < 0
Assert.Throws<FormatException>(() => builder.AppendFormat(formatter, "{-1}", obj1, obj2, obj3, obj4)); // Format has value < 0
Assert.Throws<FormatException>(() => builder.AppendFormat("{1}", obj1)); // Format has value >= 1
Assert.Throws<FormatException>(() => builder.AppendFormat("{2}", obj1, obj2)); // Format has value >= 2
Assert.Throws<FormatException>(() => builder.AppendFormat("{3}", obj1, obj2, obj3)); // Format has value >= 3
Assert.Throws<FormatException>(() => builder.AppendFormat("{4}", obj1, obj2, obj3, obj4)); // Format has value >= 4
Assert.Throws<FormatException>(() => builder.AppendFormat(formatter, "{1}", obj1)); // Format has value >= 1
Assert.Throws<FormatException>(() => builder.AppendFormat(formatter, "{2}", obj1, obj2)); // Format has value >= 2
Assert.Throws<FormatException>(() => builder.AppendFormat(formatter, "{3}", obj1, obj2, obj3)); // Format has value >= 3
Assert.Throws<FormatException>(() => builder.AppendFormat(formatter, "{4}", obj1, obj2, obj3, obj4)); // Format has value >= 4
Assert.Throws<FormatException>(() => builder.AppendFormat("{", "")); // Format has unescaped {
Assert.Throws<FormatException>(() => builder.AppendFormat("{a", "")); // Format has unescaped {
Assert.Throws<FormatException>(() => builder.AppendFormat("}", "")); // Format has unescaped }
Assert.Throws<FormatException>(() => builder.AppendFormat("}a", "")); // Format has unescaped }
Assert.Throws<FormatException>(() => builder.AppendFormat("{\0", "")); // Format has invalid character after {
Assert.Throws<FormatException>(() => builder.AppendFormat("{a", "")); // Format has invalid character after {
Assert.Throws<FormatException>(() => builder.AppendFormat("{0 ", "")); // Format with index and spaces is not closed
Assert.Throws<FormatException>(() => builder.AppendFormat("{1000000", new string[10])); // Format index is too long
Assert.Throws<FormatException>(() => builder.AppendFormat("{10000000}", new string[10])); // Format index is too long
Assert.Throws<FormatException>(() => builder.AppendFormat("{0,", "")); // Format with comma is not closed
Assert.Throws<FormatException>(() => builder.AppendFormat("{0, ", "")); // Format with comma and spaces is not closed
Assert.Throws<FormatException>(() => builder.AppendFormat("{0,-", "")); // Format with comma and minus sign is not closed
Assert.Throws<FormatException>(() => builder.AppendFormat("{0,-\0", "")); // Format has invalid character after minus sign
Assert.Throws<FormatException>(() => builder.AppendFormat("{0,-a", "")); // Format has invalid character after minus sign
Assert.Throws<FormatException>(() => builder.AppendFormat("{0,1000000", new string[10])); // Format length is too long
Assert.Throws<FormatException>(() => builder.AppendFormat("{0,10000000}", new string[10])); // Format length is too long
Assert.Throws<FormatException>(() => builder.AppendFormat("{0:", new string[10])); // Format with colon is not closed
Assert.Throws<FormatException>(() => builder.AppendFormat("{0: ", new string[10])); // Format with colon and spaces is not closed
Assert.Throws<FormatException>(() => builder.AppendFormat("{0:{", new string[10])); // Format with custom format contains unescaped {
Assert.Throws<ArgumentOutOfRangeException>("valueCount", () => builder.AppendFormat("{0}", "a")); // New length > builder.Length
Assert.Throws<ArgumentOutOfRangeException>("valueCount", () => builder.AppendFormat("{0}", "a", "")); // New length > builder.Length
Assert.Throws<ArgumentOutOfRangeException>("valueCount", () => builder.AppendFormat("{0}", "a", "", "")); // New length > builder.Length
Assert.Throws<ArgumentOutOfRangeException>("valueCount", () => builder.AppendFormat("{0}", "a", "", "", "")); // New length > builder.Length
Assert.Throws<ArgumentOutOfRangeException>("valueCount", () => builder.AppendFormat(formatter, "{0}", "a")); // New length > builder.Length
Assert.Throws<ArgumentOutOfRangeException>("valueCount", () => builder.AppendFormat(formatter, "{0}", "a", "")); // New length > builder.Length
Assert.Throws<ArgumentOutOfRangeException>("valueCount", () => builder.AppendFormat(formatter, "{0}", "a", "", "")); // New length > builder.Length
Assert.Throws<ArgumentOutOfRangeException>("valueCount", () => builder.AppendFormat(formatter, "{0}", "a", "", "", "")); // New length > builder.Length
}