1#!/usr/bin/perl
2use strict;
3use warnings;
4use Test::More;
5BEGIN { push(@INC, "lib", "t"); }
6
7sub validate {
8    my ($validator, $xml, $expectedError) = @_;
9    my %info;
10    if (!$validator->validate($xml, \%info)) {
11        ok($expectedError, "Expected XML error.");
12        if ($expectedError) {
13            ok(exists $info{message}, "XML has error message.");
14            #printf STDERR "\n%s\nLocation: line %d column %d\n",
15            #    $info{message},
16            #    $info{line},
17            #    $info{column};
18        }
19    }
20    else {
21        ok(!$expectedError, "XML is valid.");
22    }
23}
24
25my $validator;
26eval {
27    require Net::Amazon::MechanicalTurk::QAPValidator;
28    $validator = Net::Amazon::MechanicalTurk::QAPValidator->create;
29};
30if ($@) {
31    # QAPValidator requires a heavier XML parser for validation.
32    # Which is not needed for basic MTurk functionality.
33    plan skip_all => "Can't load QAPValidator.";
34}
35else {
36    plan tests => 5;
37}
38
39my $xml;
40
41$xml = <<END_XML;
42<?xml version="1.0" encoding="UTF-8"?>
43<QuestionForm xmlns="http://mechanicalturk.amazonaws.com/AWSMechanicalTurkDataSchemas/2005-10-01/QuestionForm.xsd">
44  <Question>
45    <QuestionIdentifier>1</QuestionIdentifier>
46    <QuestionContent>
47      <Text>Whats going on?</Text>
48    </QuestionContent>
49    <AnswerSpecification>
50      <FreeTextAnswer/>
51    </AnswerSpecification>
52  </Question>
53</QuestionForm>
54END_XML
55validate($validator, $xml, 0);
56
57
58$xml = <<END_XML;
59<?xml version="1.0" encoding="UTF-8"?>
60<QuestionForm xmlns="http://mechanicalturk.amazonaws.com/AWSMechanicalTurkDataSchemas/2005-10-01/QuestionForm.xsd">
61  <Question>
62    <QuestionIdentifier>&1</QuestionIdentifier>
63    <QuestionContent>
64      <Text>Whats going on?</Text>
65    </QuestionContent>
66    <AnswerSpecification>
67      <FreeTextAnswer/>
68    </AnswerSpecification>
69  </Question>
70</QuestionForm>
71END_XML
72validate($validator, $xml, 1);
73
74
75$xml = <<END_XML;
76<?xml version="1.0" encoding="UTF-8"?>
77<QuestionForm xmlns="http://mechanicalturk.amazonaws.com/AWSMechanicalTurkDataSchemas/2005-10-01/QuestionForm.xsd">
78  <Question>
79    <QuestionIdentifier>1</QuestionIdentifier>
80    <QuestionContent>
81      <Text>Whats going on?</Text>
82    </QuestionContent>
83    <AnswerSpecification>
84      <FreeTextAnswer/>
85    </AnswerSpecification>
86  </Question>
87  <foo/>
88</QuestionForm>
89END_XML
90validate($validator, $xml, 1);
91