public class parseMimeType implements Testlet
{
public void test(TestHarness h)
{
// Check simple mimetype
DocFlavor simple = new DocFlavor("text/plain; charset=us-ascii",
"java.io.InputStream");
h.checkPoint("Simple mimetype");
h.check(simple.getMediaType().equals("text"));
h.check(simple.getMediaSubtype().equals("plain"));
h.check(simple.getParameter("charset").equals("us-ascii"));
h.check(simple.getRepresentationClassName().equals("java.io.InputStream"));
// Check if mimetype can be correctly built together again.
h.check(simple.getMimeType().equals("text/plain; charset=\"us-ascii\""));
h.check(simple.toString().equals("text/plain; charset=\"us-ascii\"; " +
"class=\"java.io.InputStream\""));
// Check for mimetype with quoted parameter value
DocFlavor quoted = new DocFlavor("text/plain; charset=\"us-ascii\"",
"java.io.InputStream");
h.checkPoint("Mimetype with quoted param values");
h.check(quoted.getParameter("charset").equals("us-ascii"));
// Check if mimetype can be correctly built together again.
h.check(quoted.getMimeType().equals("text/plain; charset=\"us-ascii\""));
h.check(simple.toString().equals("text/plain; charset=\"us-ascii\"; " +
"class=\"java.io.InputStream\""));
// Check for mimetype with multiple parameters
DocFlavor multipleParam = new DocFlavor("text/plain; " +
"charset=\"us-ascii\"; param=paramValue", "java.io.InputStream");
h.checkPoint("Mimetype with multiple parameters");
h.check(multipleParam.getParameter("charset").equals("us-ascii"));
h.check(multipleParam.getParameter("param").equals("paramValue"));
// Check if mimetype can be correctly built together again.
h.check(multipleParam.getMimeType().equals("text/plain; " +
"charset=\"us-ascii\"; param=\"paramValue\""));
h.check(multipleParam.toString().equals("text/plain; charset=\"us-ascii\";" +
" param=\"paramValue\"; class=\"java.io.InputStream\""));
// Check natural order for mimetype with multiple parameters
DocFlavor paramOrder = new DocFlavor("text/plain; " +
"charset=\"us-ascii\"; another=paramValue; charset3=something",
"java.io.InputStream");
h.checkPoint("Multiple parameters output order");
// parameters are returned in natural key order
// therefore another -> charset -> charset3
h.check(paramOrder.getMimeType().equals("text/plain; " +
"another=\"paramValue\"; charset=\"us-ascii\"; charset3=\"something\""));
// Check charset treatment
DocFlavor charset = new DocFlavor("text/plain; charset=US-ascii; " +
"nocharset=UoUo", "java.io.InputStream");
h.checkPoint("Test charset treatment");
h.check(charset.getParameter("charset").equals("us-ascii"));
h.check(charset.getParameter("nocharset").equals("UoUo"));
// Check for mimetype with comments
DocFlavor comments = new DocFlavor("text/plain(Comment); " +
"charset=\"us-ascii\" (Comment2)(Comment1)", "java.io.InputStream");
h.checkPoint("Mimetype with comments");
h.check(comments.getMediaSubtype().equals("plain"));
h.check(comments.getParameter("charset").equals("us-ascii"));
// Syntax checks
h.checkPoint("Syntax checks");
// Lowercase treatment of media type and media subtype
DocFlavor lowercase = new DocFlavor("teXt/Plain; charset=US-ascii; " +
"nocharset=UoUo", "java.io.InputStream");
h.check(lowercase.getMediaType().equals("text"));
h.check(lowercase.getMediaSubtype().equals("plain"));
try
{
// wrongly quoted value
new DocFlavor("text/plain; charset=us-ascii\"", "java.io.InputStream");
h.check(false);
}
catch (IllegalArgumentException e)
{
h.check(true);
}
try
{
// wrong character
new DocFlavor(" te,xt/plain; charset=us-ascii", "java.io.InputStream");
h.check(false);
}
catch (IllegalArgumentException e)
{
h.check(true);
}
try
{
// only values may be quoted
new DocFlavor("text/plain; \"charset\"=us-ascii", "java.io.InputStream");
h.check(false);
}
catch (IllegalArgumentException e)
{
h.check(true);
}
try
{
// ' is an allowed character
new DocFlavor(" text/plain; charset=us-asc'ii", "java.io.InputStream");
h.check(true);
}
catch (IllegalArgumentException e)
{
h.check(false);
}
try
{
// wrongly character in unqouted value
new DocFlavor("text/plain; charset=?us-ascii", "java.io.InputStream");
h.check(false);
}
catch (IllegalArgumentException e)
{
h.check(true);
}
try
{
// character in qouted value
DocFlavor syntax = new DocFlavor("text/plain; param=\"?value.\"",
"java.io.InputStream");
h.check(syntax.getParameter("param").equals("?value."));
}
catch (IllegalArgumentException e)
{
h.check(false);
}
try
{
// character in qouted value
new DocFlavor("text/plain; param=\"?vöal ue.\"", "java.io.InputStream");
h.check(true);
}
catch (IllegalArgumentException e)
{
h.check(false);
}
try
{
// special characters in mime type
DocFlavor syntax = new DocFlavor("application/vnd.cups-command",
"java.io.InputStream");
h.check(syntax.getMediaSubtype().equals("vnd.cups-command"));
}
catch (IllegalArgumentException e)
{
h.check(false);
}