public void TestBidiCharsInUri()
{
var bidiChar = '\u200E';
using(var client = TestBase<AmazonS3Client>.CreateClient())
{
var part1 = "test";
var part2 = "key";
var bidiKey = part1 + bidiChar + part2;
// verify character is in the string
Assert.IsTrue(bidiKey.IndexOf(bidiChar) > 0);
Assert.IsTrue(AWSSDKUtils.HasBidiControlCharacters(bidiKey));
// verify character is dropped by the Uri class
Uri uri = new Uri(new Uri("http://www.amazon.com/"), bidiKey);
Assert.IsTrue(uri.AbsoluteUri.IndexOf(bidiChar) < 0);
Assert.IsFalse(AWSSDKUtils.HasBidiControlCharacters(uri.AbsoluteUri));
Assert.IsTrue(uri.AbsoluteUri.IndexOf(part1 + part2) > 0);
// verify that trying to use key throws the appropriate exception
var e = AssertExtensions.ExpectException<AmazonClientException>(() => client.GetObject("fake-bucket", bidiKey));
Assert.IsNotNull(e);
Assert.IsTrue(e.Message.Contains("[" + bidiKey + "]"));
Assert.IsTrue(e.Message.Contains("cannot be handled by the .NET SDK"));
Assert.IsTrue(AWSSDKUtils.HasBidiControlCharacters(e.Message));
}
}