Fit Specification: Annotation

 

This portion of the Fit specification describes how Fit can modify, or “annotate,” HTML documents.

 

Contents:

 

Text.. 1

Adding Text 2

Tags. 2

Cell Tags. 2

Row Tags. 4

Table Tags. 4

Table Structure. 5

Cells. 5

Rows. 6

Tables. 6

Standard Annotations. 7

HTML Conversion. 8

Markup Removal 8

Text to HTML. 9

Entities. 9

Line Feeds. 9

Spaces. 10

Run Results. 10

 

Text

 

Fixtures may change the body of any individual cell in their table.

 

fat.AnnotationFixture

 

 

 

 

OriginalHTML

Row

Column

OverwriteCellBody

ResultingHTML()

<table>

  <tr><td>top left</td><td>top right</td></tr>

  <tr><td>bottom left</td><td>bottom right</td></tr>

</table>

1

1

new value

<table>

  <tr><td>new value</td><td>top right</td></tr>

  <tr><td>bottom left</td><td>bottom right</td></tr>

</table>

 

2

2

another value

<table>

  <tr><td>top left</td><td>top right</td></tr>

  <tr><td>bottom left</td><td>another value</td></tr>

</table>

 

The raw HTML provided by the fixture is inserted into the table.  (Fixtures may also ask for text to HTML conversion as described below.)

 

fat.AnnotationFixture

 

 

 

 

OriginalHTML

Row

Column

OverwriteCellBody

ResultingHTML()

<table>

  <tr><td>text</td></tr>

</table>

1

1

<b><i>Excited text!</i></b>

<table>

  <tr><td><b><i>Excited text!</i></b></td></tr>

</table>

 

Adding Text

 

Fixtures may add text to the body of a cell rather than simply overwriting it.

 

fat.AnnotationFixture

 

 

 

 

OriginalHTML

Row

Column

AddToCellBody

ResultingHTML()

<table>

  <tr><td>text</td></tr>

</table>

1

1

... more text

<table>

  <tr><td>text... more text</td></tr>

</table>

 

Tags

 

Fixtures may manipulate tags as well as text.

Cell Tags

 

Fixtures may overwrite cell tags.

 

fat.AnnotationFixture

 

 

 

 

OriginalHTML

Row

Column

OverwriteCellTag

ResultingHTML()

<table>

  <tr><td>text</td></tr>

</table>

1

1

<td align=”right”>

<table>

  <tr><td align=”right”>text</td></tr>

</table>

<table>

  <tr><td old=”foo”>text</td></tr>

</table>

1

1

<td new=”bar”>

<table>

  <tr><td new=”bar”>text</td></tr>

</table>

 

They may also add to cell tags.  We’ve delimited the “AddToCellTagcolumn in this example with brackets so we can include a leading space.  Fit doesn’t add spaces for you when you add to a tag.

 

fat.AnnotationFixture

 

 

 

 

OriginalHTML

Row

Column

AddToCellTag

ResultingHTML()

<table>

  <tr><td>text</td></tr>

</table>

1

1

[ align=”right”]

<table>

  <tr><td align=”right”>text</td></tr>

</table>

<table>

  <tr><td old=”foo”>text</td></tr>

</table>

1

1

[ new=”bar”]

<table>

  <tr><td old=”foo” new=”bar”>text</td></tr>

</table>

 

1

1

[no-added-space]

<table>

  <tr><td old=”foo”no-added-space>text</td></tr>

</table>

 

Fixtures can even change the type of the tag.  If they don’t specify an ending tag, they’ll create a mismatched tag.  Fit doesn’t prevent fixtures from intentionally creating mismatched tags either.

 

fat.AnnotationFixture

 

 

 

 

 

OriginalHTML

Row

Column

OverwriteCellTag

OverwriteEndCellTag

ResultingHTML()

<table>

  <tr><td>text</td></tr>

</table>

1

1

<foo>

 

<table>

  <tr><foo>text</td></tr>

</table>

 

1

1

<bar>

</bar>

<table>

  <tr><bar>text</bar></tr>

</table>

 

1

1

<foo>

</bar>

<table>

  <tr><foo>text</bar></tr>

</table>

 

Row Tags

 

All of this applies equally to row tags...

 

fat.AnnotationFixture

 

 

 

 

 

OriginalHTML

Row

OverwriteRowTag

OverwriteEndRowTag

AddToRowTag

ResultingHTML()

<table>

  <tr><td>text</td></tr>

</table>

1

<tr valign=”true”>

 

 

<table>

  <tr valign=”true”><td>text</td></tr>

</table>

 

1

<bar>

</bar>

 

<table>

  <bar><td>text</td></bar>

</table>

 

1

<foo>

</bar>

[ attrib=”yes”]

<table>

  <foo attrib=”yes”><td>text</td></bar>

</table>

 

Table Tags

 

...and to table tags.

 

fat.AnnotationFixture

 

 

 

 

OriginalHTML

OverwriteTableTag

OverwriteEndTableTag

AddToTableTag

ResultingHTML()

<table>

  <tr><td>text</td></tr>

</table>

<table border=”1”>

 

 

<table border=”1”>

  <tr><td>text</td></tr>

</table>

 

<bar>

</bar>

 

<bar>

  <tr><td>text</td></tr>

</bar>

 

<foo>

</bar>

[ attrib=”yes”]

<foo attrib=”yes”>

  <tr><td>text</td></tr>

</bar>

 

Table Structure

 

In addition to being able to modify table contents, fixtures may also change the structure of tables in any way they wish.  The following examples show basic possibilities, but any manipulation is possible.

 

Cells

 

Fixtures may add cells.

 

fat.AnnotationFixture

 

 

 

 

OriginalHTML

Row

Column

AddCellFollowing

ResultingHTML()

<table>

  <tr><td>text</td></tr>

</table>

1

1

<td>new cell</td>

<table>

  <tr><td>text</td><td>new cell</td></tr>

</table>

<table>

  <tr><td>text</td><td>last cell</td></tr>

</table>

1

1

<td>yadda</td>

<table>

  <tr><td>text</td><td>yadda</td><td>last cell</td></tr>

</table>

 

Fixtures may remove cells.

 

fat.AnnotationFixture

 

 

 

 

OriginalHTML

Row

Column

RemoveFollowingCell

ResultingHTML()

<table>

  <tr><td>text</td><td>yadda</td><td>last cell</td></tr>

</table>

1

1

yes

<table>

  <tr><td>text</td><td>last cell</td></tr>

</table>

<table>

  <tr><td>text</td><td>yadda</td><td>last cell</td></tr>

</table>

1

2

yes

<table>

  <tr><td>text</td><td>yadda</td></tr>

</table>

 

Rows

 

They can add rows.

 

fat.AnnotationFixture

 

 

 

OriginalHTML

Row

AddRowFollowing

ResultingHTML()

<table>

  <tr><td>text</td></tr>

</table>

1

<tr><td>new row</td></tr>

<table>

  <tr><td>text</td></tr><tr><td>new row</td></tr>

</table>

 

...and remove rows.

 

fat.AnnotationFixture

 

 

 

OriginalHTML

Row

RemoveFollowingRow

ResultingHTML()

<table>

  <tr><td>text</td></tr>

  <tr><td>second row</td></tr>

</table>

1

yes

<table>

  <tr><td>text</td></tr>

</table>

 

Tables

 

Fixtures can even add entire tables.

 

fat.AnnotationFixture

 

 

OriginalHTML

AddTableFollowing

ResultingHTML()

<table>

  <tr><td>text</td></tr>

</table>

<table><tr><td>

new table

</td></tr></table>

<table>

  <tr><td>text</td></tr>

</table><table><tr><td>

new table

</td></tr></table>

 

Standard Annotations

 

Fit provides some “short-cut” annotations for fixtures to use.  They have standard meanings:

 

·        right: Fit checked the cell against the software and the software gave the correct answer.

·        wrong: Fit checked the cell against the software and the software gave the wrong answer.

·        error: Fit checked the cell against the software and the software generated a run-time error (e.g., an exception).

·        info: Fit added information to the cell.  (Typically used when a cell was blank to start with.)

·        ignore: Fit ignored the cell entirely.

 

fat.StandardAnnotationFixture

 

 

 

 

OriginalHTML

Annotation

Text

Output()

RenderedOutput()

<td>text</td>

right

(none)

<td bgcolor="#cfffcf">text</td>

 

 

wrong

actual result

<td bgcolor="#ffcfcf">text <font size=-1 color="#c08080"><i>expected</i></font><hr>actual result <font size=-1 color="#c08080"><i>actual</i></font></td>

 

 

error

error message

<td bgcolor="#ffffcf">text<hr><pre>error message</pre></td>

 

 

info

value

<td>text <font color="#808080">value</font></td>

 

 

ignore

(none)

<td bgcolor="#efefef”>text</td>

 

 

HTML Conversion

 

New text provided by the fixture is converted from text to HTML as described in the “Text to HTML” section below.  This doesn’t apply to “right” and “ignore” annotations, which don’t add any text.

 

fat.StandardAnnotationFixture

 

 

 

 

OriginalHTML

Annotation

Text

Output()

RenderedOutput()

<td>text</td>

wrong

A <p> tag

<td bgcolor="#ffcfcf">text <font size=-1 color="#c08080"><i>expected</i></font><hr>A &lt;p> tag <font size=-1 color="#c08080"><i>actual</i></font></td>

 

 

error

 

<td bgcolor="#ffffcf">text<hr><pre>A &lt;p> tag</pre></td>

 

 

info

 

<td>text <font color="#808080">A &lt;p> tag</font></td>

 

 

Markup Removal

 

When annotating “wrong” and “error” cells, Fit strips mark-up from the existing contents of the cell so troubleshooting is easier.  It doesn’t do so for other annotations.

 

fat.StandardAnnotationFixture

 

 

 

 

OriginalHTML

Annotation

Text

Output()

RenderedOutput()

<td><ul><li>text</li></ul></td>

right

blank

<td bgcolor="#cfffcf"><ul><li>text</li></ul></td>

 

 

wrong

actual result

<td bgcolor="#ffcfcf">text <font size=-1 color="#c08080"><i>expected</i></font><hr>actual result <font size=-1 color="#c08080"><i>actual</i></font></td>

 

 

error

error message

<td bgcolor="#ffffcf">text<hr><pre>error message</pre></td>

 

 

ignore

blank

<td bgcolor="#efefef”><ul><li>text</li></ul></td>

 

 

info

value

<td><ul><li>text</li></ul> <font color="#808080">value</font></td>

 

 

Although other mark-up is stripped, line breaks are preserved.

 

fat.StandardAnnotationFixture

 

 

 

 

OriginalHTML

Annotation

Text

Output()

RenderedOutput()

<td><ul><li>line<br>break</li></ul></td>

wrong

actual result

<td bgcolor="#ffcfcf">line<br />break <font size=-1 color="#c08080"><i>expected</i></font><hr>actual result <font size=-1 color="#c08080"><i>actual</i></font></td>

 

 

error

error message

<td bgcolor="#ffffcf">line<br />break<hr><pre>error message</pre></td>

 

 

Text to HTML

 

Fixtures may ask Fit to convert a string to HTML.

 

Entities

 

Some characters are turned into entities.

 

fat.TextToHtmlFixture

 

Text

HTML()

<

&lt;

&

&amp;

 

Line Feeds

 

ASCII line feed codes are turned into HTML break tags.  (In these examples, “\n” is ASCII 10, “new line”, and “\r” is ASCII 13, “carriage return.”)

 

fat.TextToHtmlFixture

 

Text

HTML()

Unix \n line feed

Unix <br /> line feed

Mac \r line feed

Mac <br /> line feed

DOS \r\n line feed

DOS <br /> line feed

Backwards \n\r line feed is seen as two line feeds

Backwards <br /><br /> line feed is seen as two line feeds

 

Spaces

Multiple adjoining spaces are turned into &nbsp; entities.

 

fat.TextToHtmlFixture

 

Text

HTML()

1     2

1 &nbsp; &nbsp; 2

 

Run Results

 

fit.Summary