]> gitweb.michael.orlitzky.com - dead/htsn-import.git/commitdiff
Update the newsxml DTD to make the Editor optional.
authorMichael Orlitzky <michael@orlitzky.com>
Thu, 2 Jan 2014 15:59:51 +0000 (10:59 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Thu, 2 Jan 2014 15:59:51 +0000 (10:59 -0500)
Add a second test newsxml document which has an Editor element.
Replicate News tests for the Editor-having document.

src/TSN/XML/News.hs
test/xml/newsxml-with-editor.xml [new file with mode: 0644]
test/xml/newsxml.dtd

index 661279272e5f1056221fdcb1e06cbfc1ccfe5157..26ca8c0deb76670e3aeee7ec28ac1567baec2ddd 100644 (file)
@@ -37,7 +37,7 @@ import Text.XML.HXT.Core (
   PU,
   XmlPickler(..),
   unpickleDoc,
-  xp12Tuple,
+  xp13Tuple,
   xpAttr,
   xpElem,
   xpInt,
@@ -149,6 +149,7 @@ data MessageXml =
     xml_teams :: [NewsTeamXml],
     xml_locations :: [NewsLocationXml],
     xml_sms :: String,
+    xml_editor :: Maybe String,
     xml_text :: String,
     xml_continue :: String,
     xml_time_stamp :: String }
@@ -160,6 +161,7 @@ data Message =
     db_sport :: String,
     db_url :: String,
     db_sms :: String,
+    db_editor :: Maybe String,
     db_text :: String,
     db_continue :: String }
   deriving (Data, Eq, Show, Typeable)
@@ -181,14 +183,15 @@ instance ToFromXml Message where
       def
       def
       db_sms
+      db_editor
       db_text
       db_continue
       def
 
   -- We don't need the key argument (from_xml_fk) since the XML type
   -- contains more information in this case.
-  from_xml (MessageXml _ _ c _ e f _ _ i j k _) =
-    Message c e f i j k
+  from_xml (MessageXml _ _ c _ e f _ _ i j k _) =
+    Message c e f i j k l
 
 
 mkPersist tsn_codegen_config [groundhog|
@@ -261,7 +264,7 @@ pickle_message :: PU MessageXml
 pickle_message =
   xpElem "message" $
     xpWrap (from_tuple, to_tuple) $
-    xp12Tuple (xpElem "XML_File_ID" xpInt)
+    xp13Tuple (xpElem "XML_File_ID" xpInt)
               (xpElem "heading" xpText)
               pickle_msg_id
               (xpElem "category" xpText)
@@ -270,6 +273,7 @@ pickle_message =
               (xpList $ pickle_news_team)
               (xpList $ pickle_location)
               (xpElem "SMS" xpText)
+              (xpOption (xpElem "Editor" xpText))
               (xpElem "text" xpText)
               pickle_continue
               (xpElem "time_stamp" xpText)
@@ -284,6 +288,7 @@ pickle_message =
                   xml_teams m,
                   xml_locations m,
                   xml_sms m,
+                  xml_editor m,
                   xml_text m,
                   xml_continue m,
                   xml_time_stamp m)
@@ -334,8 +339,10 @@ news_tests =
   testGroup
     "News tests"
     [ test_news_fields_have_correct_names,
-      test_pickle_of_unpickle_is_identity,
-      test_unpickle_succeeds ]
+      test_pickle_of_unpickle_is_identity1,
+      test_pickle_of_unpickle_is_identity2,
+      test_unpickle_succeeds1,
+      test_unpickle_succeeds2 ]
 
 
 test_news_fields_have_correct_names :: TestTree
@@ -354,25 +361,41 @@ test_news_fields_have_correct_names =
       map (\x -> tsn_db_field_namer "herp" "derp" 8675309 x 90210) field_names
 
     actual :: [String]
-    actual = ["mid", "sport", "url", "sms", "text", "continue"]
+    actual = ["mid", "sport", "url", "sms", "editor", "text", "continue"]
 
     check (x,y) = (x @?= y)
 
 
 -- | Warning, succeess of this test does not mean that unpickling
 --   succeeded.
-test_pickle_of_unpickle_is_identity :: TestTree
-test_pickle_of_unpickle_is_identity =
+test_pickle_of_unpickle_is_identity1 :: TestTree
+test_pickle_of_unpickle_is_identity1 =
   testCase "pickle composed with unpickle is the identity" $ do
     let path = "test/xml/newsxml.xml"
     (expected :: [MessageXml], actual) <- pickle_unpickle "message" path
     actual @?= expected
 
+-- | Repeat of 'test_pickle_of_unpickle_is_identity1' with a different
+--   XML file.
+test_pickle_of_unpickle_is_identity2 :: TestTree
+test_pickle_of_unpickle_is_identity2 =
+  testCase "pickle composed with unpickle is the identity (with Editor)" $ do
+    let path = "test/xml/newsxml-with-editor.xml"
+    (expected :: [MessageXml], actual) <- pickle_unpickle "message" path
+    actual @?= expected
 
-test_unpickle_succeeds :: TestTree
-test_unpickle_succeeds =
+test_unpickle_succeeds1 :: TestTree
+test_unpickle_succeeds1 =
   testCase "unpickling succeeds" $ do
   let path = "test/xml/newsxml.xml"
   actual <- unpickleable path pickle_message
   let expected = True
   actual @?= expected
+
+test_unpickle_succeeds2 :: TestTree
+test_unpickle_succeeds2 =
+  testCase "unpickling succeeds (with Editor)" $ do
+  let path = "test/xml/newsxml-with-editor.xml"
+  actual <- unpickleable path pickle_message
+  let expected = True
+  actual @?= expected
diff --git a/test/xml/newsxml-with-editor.xml b/test/xml/newsxml-with-editor.xml
new file mode 100644 (file)
index 0000000..f76816a
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no" ?>\r<!DOCTYPE message PUBLIC "-//TSN//DTD News 1.0/EN" "newsxml.dtd">\r<message>\r<XML_File_ID>19956478</XML_File_ID>\r<heading>ACN;RECAP-HOU-SAN</heading>\r<msg_id EventId="">4650108</msg_id>\r<category>News</category>\r<sport>NBA</sport>\r<url>/nba/news/ACN4650108.htm</url>\r<team>HOU</team>\r<team>SAN</team>\r<location>\r<city>Houston</city>\r<state>TX</state>\r<country>USA</country>\r</location>\r<location>\r<city>San Antonio</city>\r<state>TX</state>\r<country>USA</country>\r</location>\r<SMS>Harden powers Rockets past Spurs</SMS>\r<Editor>Washington Irving</Editor>\r<text>\r San  Antonio,  TX (SportsNetwork.com) -  James Harden returned from a two-game\r absence and led all five Houston starters in double figures with 28 points, as\r the Rockets topped the San Antonio Spurs, 111-98, at AT&amp;T Center.\r</text>\r<continue>\r<P>\r Harden  sat out games against Detroit and Dallas due to a sprained left ankle,\r but  the veteran  shooting guard  was a  one-man wrecking  crew in  the fourth\r quarter  against  the Spurs. Harden had  11 straight Houston points during the\r final period and scored 16 in the frame.\r</P>\r<P>\r Dwight  Howard contributed  15 points and 20 rebounds for the Rockets, who are\r within  3  1/2 games of  the Spurs for first  place in the Southwest Division.\r Terrence Jones had 21 points and 14 boards, while Chandler Parsons also scored\r 21 to go with six rebounds and six assists. Jeremy Lin had 13 points and eight\r helpers.\r</P>\r<P>\r The Rockets, who didn't trail the entire game, made 12-of-24 shots from beyond\r the arc.\r</P>\r<P>\r Manu Ginobili had 22 points for the Spurs, who suffered only their fourth home\r loss  all season.  Two of  those defeats  have come  against the  Rockets. Tim\r Duncan finished with 11 points, 14 rebounds, six blocks and five assists.\r</P>\r<P>\r Kawhi  Leonard scored 13 points for the Spurs, who lost for the second time in\r three contests.\r</P>\r</continue>\r<time_stamp> December 25, 2013, at 10:38 PM ET </time_stamp>\r</message>\r
\ No newline at end of file
index 72c6e3ed4ee55e2e23820ad9ebbd1190a073fdfc..5f24baac1cb9238056a3964e93422d410cec87a7 100644 (file)
@@ -1,24 +1,24 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<!-- edited with XML Spy v3.5 NT (http://www.xmlspy.com) by  () -->\r
-<!--DTD generated by XML Spy v3.5 NT (http://www.xmlspy.com)-->\r
-<!ELEMENT Editor (#PCDATA)>\r
-<!ELEMENT P (#PCDATA)>\r
-<!ELEMENT SMS (#PCDATA)>\r
-<!ELEMENT XML_File_ID (#PCDATA)>\r
-<!ELEMENT category (#PCDATA)>\r
-<!ELEMENT city (#PCDATA)>\r
-<!ELEMENT continue (P+)>\r
-<!ELEMENT country (#PCDATA)>\r
-<!ELEMENT heading (#PCDATA)>\r
-<!ELEMENT location (city, state, country)>\r
-<!ELEMENT message (XML_File_ID, heading, msg_id, category, sport, url, team+, location+, SMS, Editor, text, continue, time_stamp)>\r
-<!ELEMENT msg_id (#PCDATA)>\r
-<!ATTLIST msg_id\r
-       EventId CDATA #REQUIRED\r
->\r
-<!ELEMENT sport (#PCDATA)>\r
-<!ELEMENT state (#PCDATA)>\r
-<!ELEMENT team (#PCDATA)>\r
-<!ELEMENT text (#PCDATA)>\r
-<!ELEMENT time_stamp (#PCDATA)>\r
-<!ELEMENT url (#PCDATA)>\r
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- edited with XML Spy v3.5 NT (http://www.xmlspy.com) by  () -->
+<!--DTD generated by XML Spy v3.5 NT (http://www.xmlspy.com)-->
+<!ELEMENT Editor (#PCDATA)>
+<!ELEMENT P (#PCDATA)>
+<!ELEMENT SMS (#PCDATA)>
+<!ELEMENT XML_File_ID (#PCDATA)>
+<!ELEMENT category (#PCDATA)>
+<!ELEMENT city (#PCDATA)>
+<!ELEMENT continue (P+)>
+<!ELEMENT country (#PCDATA)>
+<!ELEMENT heading (#PCDATA)>
+<!ELEMENT location (city, state, country)>
+<!ELEMENT message (XML_File_ID, heading, msg_id, category, sport, url, team+, location+, SMS, Editor?, text, continue, time_stamp)>
+<!ELEMENT msg_id (#PCDATA)>
+<!ATTLIST msg_id
+       EventId CDATA #REQUIRED
+>
+<!ELEMENT sport (#PCDATA)>
+<!ELEMENT state (#PCDATA)>
+<!ELEMENT team (#PCDATA)>
+<!ELEMENT text (#PCDATA)>
+<!ELEMENT time_stamp (#PCDATA)>
+<!ELEMENT url (#PCDATA)>