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