Annotation-model: Tests for the Web Annotation Data Model ========================================================= The [Web Annotation Data Model](https://www.w3.org/TR/annotation-model) specification presents a JSON-oriented collection of terms and structure that permit the sharing of annotations about other content. The purpose of these tests is to help validate that each of the structural requirements expressed in the Data Model specification are properly supported by implementations. The general approach for this testing is to enable both manual and automated testing. However, since the specification has no actual user interface requirements, there is no general automation mechanism that can be presented for clients. Instead, the automation mechanism is one where client implementors could take advantage of the plumbing we provide here to push their data into the tests and collect the results of the testing. This assumes knowledge of the requirements of each test / collection of tests so that the input data is relevant. Each test or test collection contains information sufficient for the task. Running Tests ------------- In the case of this test collection, we will be initially creating manual tests. These will automatically determine pass or fail and generate output for the main WPT window. The plan is to minimize the number of such tests to ease the burden on the testers while still exercising all the features. The workflow for running these tests is something like: 1. Start up the test driver window and select the annotation-model tests - click "Start" 2. A window pops up that shows a test - the description of which tells the tester what input is expected. The window contains a textarea into which the input can be typed / pasted, along with a button to click to start testing that input. 3. The tester (presumably in another window) brings up their annotation client and uses it to generate an annotation that supplies the requested structure. They then copy / paste that into the aforementioned textarea and select the button. 4. The test runs. Success or failure is determined and reported to the test driver window, which then cycles to the next test in the sequence. 5. Repeat steps 2-4 until done. 6. Download the JSON format report of test results, which can then be visually inspected, reported on using various tools, or passed on to W3C for evaluation and collection in the Implementation Report via github. **Remember that while these tests are written to help exercise implementations, their other (important) purpose is to increase confidence that there are interoperable implementations.** So, implementers are our audience, but these tests are not meant to be a comprehensive collection of tests for a client that might implement the Recommendation. The bulk of the tests are manual because there are no UI requirements in the Recommendation that would make it possible to effectively stimulate every client portably. Having said that, because the structure of these "manual" tests is very rigid, it is possible for an implementer who understands test automation to use an open source tool such as [Selenium](http://www.seleniumhq.org/) to run these "manual" tests against their implementation - exercising their implementation against content they provide to create annotations and feed the data into our test input field and run the test. Capturing and Reporting Results ------------------------------- As tests are run against implementations, if the results of testing are submitted to [test-results](https://github.com/w3c/test-results/) then they will be automatically included in documents generated by [wptreport](https://www.github.com/w3c/wptreport). The same tool can be used locally to view reports about recorded results. Automating Test Execution ------------------------- Writing Tests ------------- If you are interested in writing tests for this environment, see the associated [CONTRIBUTING](CONTRIBUTING.md) document.