public void TestArgumentExceptions ()
{
var path = Path.Combine ("..", "..", "TestData", "smime", "smime.p12");
var entity = new TextPart ("plain") { Text = "This is some text..." };
var mailbox = new MailboxAddress ("MimeKit UnitTests", "*****@*****.**");
var recipients = new CmsRecipientCollection ();
var signer = new CmsSigner (path, "no.secret");
var mailboxes = new [] { mailbox };
recipients.Add (new CmsRecipient (signer.Certificate));
using (var ctx = new TemporarySecureMimeContext ()) {
using (var file = File.OpenRead (path))
ctx.Import (file, "no.secret");
// Compress
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.Compress (null, entity));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.Compress (ctx, null));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.Compress (null));
// Encrypt
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.Encrypt (null, mailboxes, entity));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.Encrypt (null, recipients, entity));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.Encrypt (ctx, (IEnumerable<MailboxAddress>) null, entity));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.Encrypt (ctx, (CmsRecipientCollection) null, entity));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.Encrypt (ctx, recipients, null));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.Encrypt (ctx, mailboxes, null));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.Encrypt ((IEnumerable<MailboxAddress>) null, entity));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.Encrypt ((CmsRecipientCollection) null, entity));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.Encrypt (recipients, null));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.Encrypt (mailboxes, null));
// Sign
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.Sign (null, mailbox, DigestAlgorithm.Sha1, entity));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.Sign (null, signer, entity));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.Sign (ctx, (MailboxAddress) null, DigestAlgorithm.Sha1, entity));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.Sign (ctx, (CmsSigner) null, entity));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.Sign (ctx, mailbox, DigestAlgorithm.Sha1, null));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.Sign (ctx, signer, null));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.Sign ((MailboxAddress) null, DigestAlgorithm.Sha1, entity));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.Sign ((CmsSigner) null, entity));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.Sign (mailbox, DigestAlgorithm.Sha1, null));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.Sign (signer, null));
// SignAndEncrypt
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.SignAndEncrypt (null, mailbox, DigestAlgorithm.Sha1, mailboxes, entity));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.SignAndEncrypt (ctx, null, DigestAlgorithm.Sha1, mailboxes, entity));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.SignAndEncrypt (ctx, mailbox, DigestAlgorithm.Sha1, null, entity));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.SignAndEncrypt (ctx, mailbox, DigestAlgorithm.Sha1, mailboxes, null));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.SignAndEncrypt (null, DigestAlgorithm.Sha1, mailboxes, entity));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.SignAndEncrypt (mailbox, DigestAlgorithm.Sha1, null, entity));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.SignAndEncrypt (mailbox, DigestAlgorithm.Sha1, mailboxes, null));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.SignAndEncrypt (null, signer, recipients, entity));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.SignAndEncrypt (ctx, null, recipients, entity));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.SignAndEncrypt (ctx, signer, null, entity));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.SignAndEncrypt (ctx, signer, recipients, null));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.SignAndEncrypt (null, recipients, entity));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.SignAndEncrypt (signer, null, entity));
Assert.Throws<ArgumentNullException> (() => ApplicationPkcs7Mime.SignAndEncrypt (signer, recipients, null));
var compressed = ApplicationPkcs7Mime.Compress (ctx, entity);
var encrypted = ApplicationPkcs7Mime.Encrypt (recipients, entity);
var signed = ApplicationPkcs7Mime.Sign (signer, entity);
// Decompress
Assert.Throws<ArgumentNullException> (() => compressed.Decompress (null));
Assert.Throws<InvalidOperationException> (() => encrypted.Decompress (ctx));
Assert.Throws<InvalidOperationException> (() => signed.Decompress (ctx));
// Decrypt
Assert.Throws<ArgumentNullException> (() => encrypted.Decrypt (null));
Assert.Throws<InvalidOperationException> (() => compressed.Decrypt (ctx));
Assert.Throws<InvalidOperationException> (() => signed.Decrypt (ctx));
// Verify
Assert.Throws<ArgumentNullException> (() => {
MimeEntity mime;
signed.Verify (null, out mime);
});
Assert.Throws<InvalidOperationException> (() => {
MimeEntity mime;
compressed.Verify (ctx, out mime);
});
Assert.Throws<InvalidOperationException> (() => {
MimeEntity mime;
encrypted.Verify (ctx, out mime);
});
}
}