twitter-types 0.9.0 → 0.10.0
raw patch · 15 files changed
+2428/−5 lines, 15 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Web.Twitter.Types: DisplayTextRange :: Int -> Int -> DisplayTextRange
+ Web.Twitter.Types: [displayTextRangeEnd] :: DisplayTextRange -> Int
+ Web.Twitter.Types: [displayTextRangeStart] :: DisplayTextRange -> Int
+ Web.Twitter.Types: [statusDisplayTextRange] :: Status -> Maybe DisplayTextRange
+ Web.Twitter.Types: data DisplayTextRange
+ Web.Twitter.Types: instance Data.Aeson.Types.FromJSON.FromJSON Web.Twitter.Types.DisplayTextRange
+ Web.Twitter.Types: instance Data.Aeson.Types.ToJSON.ToJSON Web.Twitter.Types.DisplayTextRange
+ Web.Twitter.Types: instance Data.Data.Data Web.Twitter.Types.DisplayTextRange
+ Web.Twitter.Types: instance GHC.Classes.Eq Web.Twitter.Types.DisplayTextRange
+ Web.Twitter.Types: instance GHC.Classes.Ord Web.Twitter.Types.DisplayTextRange
+ Web.Twitter.Types: instance GHC.Generics.Generic Web.Twitter.Types.DisplayTextRange
+ Web.Twitter.Types: instance GHC.Show.Show Web.Twitter.Types.DisplayTextRange
- Web.Twitter.Types: Status :: Maybe [Contributor] -> Maybe Coordinates -> UTCTime -> Maybe StatusId -> Maybe Entities -> Maybe ExtendedEntities -> Integer -> Maybe Bool -> Maybe Text -> StatusId -> Maybe Text -> Maybe StatusId -> Maybe UserId -> Maybe LanguageCode -> Maybe Place -> Maybe Bool -> Maybe Object -> Maybe StatusId -> Maybe Status -> Integer -> Maybe Bool -> Maybe Status -> Text -> Text -> Bool -> User -> Maybe Bool -> Maybe [Text] -> Maybe Text -> Status
+ Web.Twitter.Types: Status :: Maybe [Contributor] -> Maybe Coordinates -> UTCTime -> Maybe StatusId -> Maybe Entities -> Maybe ExtendedEntities -> Integer -> Maybe Bool -> Maybe Text -> StatusId -> Maybe Text -> Maybe StatusId -> Maybe UserId -> Maybe LanguageCode -> Maybe Place -> Maybe Bool -> Maybe Object -> Maybe StatusId -> Maybe Status -> Integer -> Maybe Bool -> Maybe Status -> Text -> Text -> Bool -> User -> Maybe Bool -> Maybe [Text] -> Maybe Text -> Maybe DisplayTextRange -> Status
Files
- Web/Twitter/Types.hs +25/−2
- tests/Instances.hs +3/−0
- tests/StatusTest.hs +169/−0
- tests/fixtures/tweet-updates/compatibility_classic_13995.json +169/−0
- tests/fixtures/tweet-updates/compatibility_classic_13995_extended.json +173/−0
- tests/fixtures/tweet-updates/compatibility_classic_hidden_13797.json +270/−0
- tests/fixtures/tweet-updates/compatibility_extended_13996.json +278/−0
- tests/fixtures/tweet-updates/compatibilityplus_classic_13994.json +270/−0
- tests/fixtures/tweet-updates/compatibilityplus_classic_hidden_13797.json +304/−0
- tests/fixtures/tweet-updates/compatibilityplus_extended_13997.json +278/−0
- tests/fixtures/tweet-updates/extended_classic_14002.json +87/−0
- tests/fixtures/tweet-updates/extended_classic_hidden_13761.json +183/−0
- tests/fixtures/tweet-updates/extended_extended_14001.json +213/−0
- tests/spec_main.hs +3/−2
- twitter-types.cabal +3/−1
Web/Twitter/Types.hs view
@@ -1,4 +1,8 @@-{-# LANGUAGE OverloadedStrings, DeriveDataTypeable, RecordWildCards, DeriveGeneric #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-} module Web.Twitter.Types ( UserId@@ -35,6 +39,7 @@ , Contributor(..) , UploadedMedia (..) , ImageSizeType (..)+ , DisplayTextRange (..) , checkError , twitterTimeFormat )@@ -147,6 +152,7 @@ , statusWithheldCopyright :: Maybe Bool , statusWithheldInCountries :: Maybe [Text] , statusWithheldScope :: Maybe Text+ , statusDisplayTextRange :: Maybe DisplayTextRange } deriving (Show, Eq, Data, Typeable, Generic) instance FromJSON Status where@@ -174,12 +180,13 @@ <*> o .:? "retweeted" <*> o .:? "retweeted_status" <*> o .: "source"- <*> o .: "text"+ <*> (o .: "full_text" <|> o .: "text") <*> o .: "truncated" <*> o .: "user" <*> o .:? "withheld_copyright" <*> o .:? "withheld_in_countries" <*> o .:? "withheld_scope"+ <*> o .:? "display_text_range" parseJSON v = fail $ "couldn't parse status from: " ++ show v instance ToJSON Status where@@ -214,6 +221,7 @@ , "withheld_copyright" .= statusWithheldCopyright , "withheld_in_countries" .= statusWithheldInCountries , "withheld_scope" .= statusWithheldScope+ , "display_text_range" .= statusDisplayTextRange ] data SearchResult body =@@ -978,3 +986,18 @@ , "size" .= uploadedMediaSize , "image" .= uploadedMediaImage ]++-- | unicode code point indices, identifying the inclusive start and exclusive end of the displayable content of the Tweet.+data DisplayTextRange = DisplayTextRange+ { displayTextRangeStart :: Int+ , displayTextRangeEnd :: Int -- ^ exclusive+ } deriving (Show, Eq, Ord, Data, Typeable, Generic)++instance FromJSON DisplayTextRange where+ parseJSON v = do+ parseJSON v >>= \case+ [s, e] -> pure $ DisplayTextRange s e+ unexpected ->+ fail $ "parsing DisplayTextRange failed, expected [Int, Int], but got: " ++ show unexpected+instance ToJSON DisplayTextRange where+ toJSON (DisplayTextRange s e) = toJSON [s, e]
tests/Instances.hs view
@@ -69,6 +69,7 @@ <*> arbitrary <*> arbitrary <*> arbitrary+ <*> arbitrary instance Arbitrary SearchStatus where arbitrary = genericArbitraryU@@ -159,4 +160,6 @@ instance Arbitrary ImageSizeType where arbitrary = genericArbitraryU instance Arbitrary UploadedMedia where+ arbitrary = genericArbitraryU+instance Arbitrary DisplayTextRange where arbitrary = genericArbitraryU
+ tests/StatusTest.hs view
@@ -0,0 +1,169 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}++module StatusTest where++import Data.Aeson+import qualified Data.Aeson.Types as Aeson+import qualified Data.HashMap.Strict as M+import Data.Maybe+import Fixtures+import Instances()+import Test.Tasty+import Test.Tasty.HUnit+import Test.Tasty.TH+import Web.Twitter.Types++example_compatibility_classic_13995 :: Status -> Assertion+example_compatibility_classic_13995 obj = do+ statusCreatedAt obj @?= "Mon Mar 07 15:13:47 +0000 2016"+ statusId obj @?= 706860403981099008+ statusText obj @?= "Peek-a-boo! https://t.co/R3P6waHxRa"+ statusSource obj @?= "<a href=\"http://www.apple.com/\" rel=\"nofollow\">OS X</a>"+ statusTruncated obj @?= False+ statusEntities obj @?=+ Just+ (Entities+ { enHashTags = []+ , enUserMentions = []+ , enURLs = []+ , enMedia =+ [ Entity+ { entityBody =+ MediaEntity+ { meType = "photo"+ , meId = 706860403746181121+ , meSizes =+ M.fromList+ [ ( "small"+ , MediaSize+ { msWidth = 340+ , msHeight = 226+ , msResize = "fit"+ })+ , ( "large"+ , MediaSize+ { msWidth = 1024+ , msHeight = 680+ , msResize = "fit"+ })+ , ( "medium"+ , MediaSize+ { msWidth = 600+ , msHeight = 398+ , msResize = "fit"+ })+ , ( "thumb"+ , MediaSize+ { msWidth = 150+ , msHeight = 150+ , msResize = "crop"+ })+ ]+ , meMediaURL = "http://pbs.twimg.com/media/Cc9FyscUkAEQaOw.jpg"+ , meMediaURLHttps = "https://pbs.twimg.com/media/Cc9FyscUkAEQaOw.jpg"+ , meURL =+ URLEntity+ { ueURL = "https://t.co/R3P6waHxRa"+ , ueExpanded = "http://twitter.com/jeremycloud/status/706860403981099008/photo/1"+ , ueDisplay = "pic.twitter.com/R3P6waHxRa"+ }+ }+ , entityIndices = [12, 35]+ }+ ]+ })+ statusExtendedEntities obj @?=+ Just+ (ExtendedEntities+ { exeMedia =+ [ Entity+ { entityBody =+ ExtendedEntity+ { exeID = 706860403746181121+ , exeMediaUrl = "http://pbs.twimg.com/media/Cc9FyscUkAEQaOw.jpg"+ , exeMediaUrlHttps = "https://pbs.twimg.com/media/Cc9FyscUkAEQaOw.jpg"+ , exeSizes =+ M.fromList+ [ ( "small"+ , MediaSize+ { msWidth = 340+ , msHeight = 226+ , msResize = "fit"+ })+ , ( "large"+ , MediaSize+ { msWidth = 1024+ , msHeight = 680+ , msResize = "fit"+ })+ , ( "medium"+ , MediaSize+ { msWidth = 600+ , msHeight = 398+ , msResize = "fit"+ })+ , ( "thumb"+ , MediaSize+ { msWidth = 150+ , msHeight = 150+ , msResize = "crop"+ })+ ]+ , exeType = "photo"+ , exeDurationMillis = Nothing+ , exeExtAltText = Nothing+ , exeURL =+ URLEntity+ { ueURL = "https://t.co/R3P6waHxRa"+ , ueExpanded = "http://twitter.com/jeremycloud/status/706860403981099008/photo/1"+ , ueDisplay = "pic.twitter.com/R3P6waHxRa"+ }+ }+ , entityIndices = [12, 35]+ }+ ]+ })+ statusInReplyToStatusId obj @?= Nothing+ statusInReplyToUserId obj @?= Nothing+ statusFavorited obj @?= Just False+ statusQuotedStatus obj @?= Nothing+ statusQuotedStatusId obj @?= Nothing+ statusRetweetCount obj @?= 0+ (userScreenName . statusUser) obj @?= "jeremycloud"+ statusRetweetedStatus obj @?= Nothing+ statusPlace obj @?= Nothing+ statusFavoriteCount obj @?= 8+ statusLang obj @?= Just "en"+ statusPossiblySensitive obj @?= Just False+ statusCoordinates obj @?= Nothing++case_compatibility_classic_13995 :: Assertion+case_compatibility_classic_13995 = do+ withFixtureJSON "tweet-updates/compatibility_classic_13995.json" $ example_compatibility_classic_13995+ withFixtureJSON "tweet-updates/compatibility_classic_13995_extended.json" $ example_compatibility_classic_13995++-- case_compatibility_classic_hidden_13797 :: Assertion+-- case_compatibility_classic_hidden_13797 = withFixtureJSON "tweet-updates/compatibility_classic_hidden_13797" $ \obj -> do+-- case_compatibility_extended_13996 :: Assertion+-- case_compatibility_extended_13996 = withFixtureJSON "tweet-updates/compatibility_extended_13996" $ \obj -> do+-- case_compatibilityplus_classic_13994 :: Assertion+-- case_compatibilityplus_classic_13994 = withFixtureJSON "tweet-updates/compatibilityplus_classic_13994" $ \obj -> do+-- case_compatibilityplus_classic_hidden_13797 :: Assertion+-- case_compatibilityplus_classic_hidden_13797 = withFixtureJSON "tweet-updates/compatibilityplus_classic_hidden_13797" $ \obj -> do+-- case_compatibilityplus_extended_13997 :: Assertion+-- case_compatibilityplus_extended_13997 = withFixtureJSON "tweet-updates/compatibilityplus_extended_13997" $ \obj -> do+-- case_extended_classic_14002 :: Assertion+-- case_extended_classic_14002 = withFixtureJSON "tweet-updates/extended_classic_14002" $ \obj -> do+-- case_extended_classic_hidden_13761 :: Assertion+-- case_extended_classic_hidden_13761 = withFixtureJSON "tweet-updates/extended_classic_hidden_13761" $ \obj -> do++case_extended_extended_14001 :: Assertion+case_extended_extended_14001 = withFixtureJSON "tweet-updates/extended_extended_14001.json" $ \obj -> do+ statusText obj @?= "@twitter @twitterdev has more details about these changes at https://t.co/ZnXoRQy8mK. Thanks for making @twitter more expressive! https://t.co/AWmiH870F7"+ statusTruncated obj @?= False+ statusDisplayTextRange obj @?= Just (DisplayTextRange 9 130)++tests :: TestTree+tests = $(testGroupGenerator)+
+ tests/fixtures/tweet-updates/compatibility_classic_13995.json view
@@ -0,0 +1,169 @@+{+ "created_at": "Mon Mar 07 15:13:47 +0000 2016",+ "id": 706860403981099008,+ "id_str": "706860403981099008",+ "text": "Peek-a-boo! https://t.co/R3P6waHxRa",+ "entities": {+ "hashtags": [],+ "symbols": [],+ "user_mentions": [],+ "urls": [],+ "media": [+ {+ "id": 706860403746181121,+ "id_str": "706860403746181121",+ "indices": [+ 12,+ 35+ ],+ "media_url": "http://pbs.twimg.com/media/Cc9FyscUkAEQaOw.jpg",+ "media_url_https": "https://pbs.twimg.com/media/Cc9FyscUkAEQaOw.jpg",+ "url": "https://t.co/R3P6waHxRa",+ "display_url": "pic.twitter.com/R3P6waHxRa",+ "expanded_url": "http://twitter.com/jeremycloud/status/706860403981099008/photo/1",+ "type": "photo",+ "sizes": {+ "medium": {+ "w": 600,+ "h": 398,+ "resize": "fit"+ },+ "small": {+ "w": 340,+ "h": 226,+ "resize": "fit"+ },+ "thumb": {+ "w": 150,+ "h": 150,+ "resize": "crop"+ },+ "large": {+ "w": 1024,+ "h": 680,+ "resize": "fit"+ }+ }+ }+ ]+ },+ "extended_entities": {+ "media": [+ {+ "id": 706860403746181121,+ "id_str": "706860403746181121",+ "indices": [+ 12,+ 35+ ],+ "media_url": "http://pbs.twimg.com/media/Cc9FyscUkAEQaOw.jpg",+ "media_url_https": "https://pbs.twimg.com/media/Cc9FyscUkAEQaOw.jpg",+ "url": "https://t.co/R3P6waHxRa",+ "display_url": "pic.twitter.com/R3P6waHxRa",+ "expanded_url": "http://twitter.com/jeremycloud/status/706860403981099008/photo/1",+ "type": "photo",+ "sizes": {+ "medium": {+ "w": 600,+ "h": 398,+ "resize": "fit"+ },+ "small": {+ "w": 340,+ "h": 226,+ "resize": "fit"+ },+ "thumb": {+ "w": 150,+ "h": 150,+ "resize": "crop"+ },+ "large": {+ "w": 1024,+ "h": 680,+ "resize": "fit"+ }+ }+ }+ ]+ },+ "truncated": false,+ "source": "<a href=\"http://www.apple.com/\" rel=\"nofollow\">OS X</a>",+ "in_reply_to_status_id": null,+ "in_reply_to_status_id_str": null,+ "in_reply_to_user_id": null,+ "in_reply_to_user_id_str": null,+ "in_reply_to_screen_name": null,+ "user": {+ "id": 15062340,+ "id_str": "15062340",+ "name": "/dev/cloud/jeremy",+ "screen_name": "jeremycloud",+ "location": "Madison, Wisconsin",+ "description": "Professional yak shaver. Amateur bike shedder.",+ "url": "https://t.co/FcYeBkOpVY",+ "entities": {+ "url": {+ "urls": [+ {+ "url": "https://t.co/FcYeBkOpVY",+ "expanded_url": "http://about.me/jeremy.cloud",+ "display_url": "about.me/jeremy.cloud",+ "indices": [+ 0,+ 23+ ]+ }+ ]+ },+ "description": {+ "urls": []+ }+ },+ "protected": false,+ "followers_count": 4324,+ "friends_count": 410,+ "listed_count": 103,+ "created_at": "Mon Jun 09 17:00:58 +0000 2008",+ "favourites_count": 815,+ "utc_offset": -18000,+ "time_zone": "Central Time (US & Canada)",+ "geo_enabled": true,+ "verified": false,+ "statuses_count": 2218,+ "lang": "en",+ "contributors_enabled": false,+ "is_translator": false,+ "is_translation_enabled": false,+ "profile_background_color": "000000",+ "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",+ "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",+ "profile_background_tile": false,+ "profile_image_url": "http://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",+ "profile_image_url_https": "https://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",+ "profile_banner_url": "https://pbs.twimg.com/profile_banners/15062340/1447451621",+ "profile_link_color": "4A913C",+ "profile_sidebar_border_color": "000000",+ "profile_sidebar_fill_color": "000000",+ "profile_text_color": "000000",+ "profile_use_background_image": false,+ "has_extended_profile": true,+ "default_profile": false,+ "default_profile_image": false,+ "following": true,+ "follow_request_sent": false,+ "notifications": false+ },+ "geo": null,+ "coordinates": null,+ "place": null,+ "contributors": null,+ "is_quote_status": false,+ "retweet_count": 0,+ "favorite_count": 8,+ "favorited": false,+ "retweeted": false,+ "possibly_sensitive": false,+ "possibly_sensitive_appealable": false,+ "lang": "en"+}
+ tests/fixtures/tweet-updates/compatibility_classic_13995_extended.json view
@@ -0,0 +1,173 @@+{+ "created_at": "Mon Mar 07 15:13:47 +0000 2016",+ "id": 706860403981099008,+ "id_str": "706860403981099008",+ "full_text": "Peek-a-boo! https://t.co/R3P6waHxRa",+ "display_text_range": [+ 0,+ 35+ ],+ "entities": {+ "hashtags": [],+ "symbols": [],+ "user_mentions": [],+ "urls": [],+ "media": [+ {+ "id": 706860403746181121,+ "id_str": "706860403746181121",+ "indices": [+ 12,+ 35+ ],+ "media_url": "http://pbs.twimg.com/media/Cc9FyscUkAEQaOw.jpg",+ "media_url_https": "https://pbs.twimg.com/media/Cc9FyscUkAEQaOw.jpg",+ "url": "https://t.co/R3P6waHxRa",+ "display_url": "pic.twitter.com/R3P6waHxRa",+ "expanded_url": "http://twitter.com/jeremycloud/status/706860403981099008/photo/1",+ "type": "photo",+ "sizes": {+ "medium": {+ "w": 600,+ "h": 398,+ "resize": "fit"+ },+ "small": {+ "w": 340,+ "h": 226,+ "resize": "fit"+ },+ "thumb": {+ "w": 150,+ "h": 150,+ "resize": "crop"+ },+ "large": {+ "w": 1024,+ "h": 680,+ "resize": "fit"+ }+ }+ }+ ]+ },+ "extended_entities": {+ "media": [+ {+ "id": 706860403746181121,+ "id_str": "706860403746181121",+ "indices": [+ 12,+ 35+ ],+ "media_url": "http://pbs.twimg.com/media/Cc9FyscUkAEQaOw.jpg",+ "media_url_https": "https://pbs.twimg.com/media/Cc9FyscUkAEQaOw.jpg",+ "url": "https://t.co/R3P6waHxRa",+ "display_url": "pic.twitter.com/R3P6waHxRa",+ "expanded_url": "http://twitter.com/jeremycloud/status/706860403981099008/photo/1",+ "type": "photo",+ "sizes": {+ "medium": {+ "w": 600,+ "h": 398,+ "resize": "fit"+ },+ "small": {+ "w": 340,+ "h": 226,+ "resize": "fit"+ },+ "thumb": {+ "w": 150,+ "h": 150,+ "resize": "crop"+ },+ "large": {+ "w": 1024,+ "h": 680,+ "resize": "fit"+ }+ }+ }+ ]+ },+ "truncated": false,+ "source": "<a href=\"http://www.apple.com/\" rel=\"nofollow\">OS X</a>",+ "in_reply_to_status_id": null,+ "in_reply_to_status_id_str": null,+ "in_reply_to_user_id": null,+ "in_reply_to_user_id_str": null,+ "in_reply_to_screen_name": null,+ "user": {+ "id": 15062340,+ "id_str": "15062340",+ "name": "/dev/cloud/jeremy",+ "screen_name": "jeremycloud",+ "location": "Madison, Wisconsin",+ "description": "Professional yak shaver. Amateur bike shedder.",+ "url": "https://t.co/FcYeBkOpVY",+ "entities": {+ "url": {+ "urls": [+ {+ "url": "https://t.co/FcYeBkOpVY",+ "expanded_url": "http://about.me/jeremy.cloud",+ "display_url": "about.me/jeremy.cloud",+ "indices": [+ 0,+ 23+ ]+ }+ ]+ },+ "description": {+ "urls": []+ }+ },+ "protected": false,+ "followers_count": 4324,+ "friends_count": 410,+ "listed_count": 103,+ "created_at": "Mon Jun 09 17:00:58 +0000 2008",+ "favourites_count": 815,+ "utc_offset": -18000,+ "time_zone": "Central Time (US & Canada)",+ "geo_enabled": true,+ "verified": false,+ "statuses_count": 2218,+ "lang": "en",+ "contributors_enabled": false,+ "is_translator": false,+ "is_translation_enabled": false,+ "profile_background_color": "000000",+ "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",+ "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",+ "profile_background_tile": false,+ "profile_image_url": "http://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",+ "profile_image_url_https": "https://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",+ "profile_banner_url": "https://pbs.twimg.com/profile_banners/15062340/1447451621",+ "profile_link_color": "4A913C",+ "profile_sidebar_border_color": "000000",+ "profile_sidebar_fill_color": "000000",+ "profile_text_color": "000000",+ "profile_use_background_image": false,+ "has_extended_profile": true,+ "default_profile": false,+ "default_profile_image": false,+ "following": true,+ "follow_request_sent": false,+ "notifications": false+ },+ "geo": null,+ "coordinates": null,+ "place": null,+ "contributors": null,+ "is_quote_status": false,+ "retweet_count": 0,+ "favorite_count": 8,+ "favorited": false,+ "retweeted": false,+ "possibly_sensitive": false,+ "possibly_sensitive_appealable": false,+ "lang": "en"+}
@@ -0,0 +1,270 @@+{+ "created_at": "Thu Mar 10 23:12:12 +0000 2016",+ "id": 708067963060916224,+ "id_str": "708067963060916224",+ "text": "@jeremycloud Who would win in a battle between a Barred Owl and a Cooper's Hawk? https://t.co/FamikDro2h",+ "entities": {+ "hashtags": [],+ "symbols": [],+ "user_mentions": [+ {+ "screen_name": "jeremycloud",+ "name": "/dev/cloud/jeremy",+ "id": 15062340,+ "id_str": "15062340",+ "indices": [+ 0,+ 12+ ]+ }+ ],+ "urls": [+ {+ "url": "https://t.co/FamikDro2h",+ "expanded_url": "https://twitter.com/jeremycloud/status/703621193417379840",+ "display_url": "twitter.com/jeremycloud/st…",+ "indices": [+ 81,+ 104+ ]+ }+ ]+ },+ "truncated": false,+ "source": "bonesTwurl",+ "in_reply_to_status_id": 704059336788606976,+ "in_reply_to_status_id_str": "704059336788606976",+ "in_reply_to_user_id": 15062340,+ "in_reply_to_user_id_str": "15062340",+ "in_reply_to_screen_name": "jeremycloud",+ "user": {+ "id": 4449621923,+ "id_str": "4449621923",+ "name": "Mr Bones",+ "screen_name": "MrBonesDroid",+ "location": "",+ "profile_location": null,+ "description": "",+ "url": null,+ "entities": {+ "description": {+ "urls": []+ }+ },+ "protected": true,+ "followers_count": 5,+ "friends_count": 7,+ "listed_count": 0,+ "created_at": "Fri Dec 11 15:18:02 +0000 2015",+ "favourites_count": 7,+ "utc_offset": -25200,+ "time_zone": "Pacific Time (US & Canada)",+ "geo_enabled": false,+ "verified": false,+ "statuses_count": 35,+ "lang": "en-gb",+ "contributors_enabled": false,+ "is_translator": false,+ "is_translation_enabled": false,+ "profile_background_color": "F5F8FA",+ "profile_background_image_url": null,+ "profile_background_image_url_https": null,+ "profile_background_tile": false,+ "profile_image_url": "http://pbs.twimg.com/profile_images/677097663288860672/zZxWCPSI_normal.jpg",+ "profile_image_url_https": "https://pbs.twimg.com/profile_images/677097663288860672/zZxWCPSI_normal.jpg",+ "profile_link_color": "2B7BB9",+ "profile_sidebar_border_color": "C0DEED",+ "profile_sidebar_fill_color": "DDEEF6",+ "profile_text_color": "333333",+ "profile_use_background_image": true,+ "has_extended_profile": false,+ "default_profile": true,+ "default_profile_image": false,+ "following": true,+ "follow_request_sent": false,+ "notifications": false+ },+ "geo": null,+ "coordinates": null,+ "place": null,+ "contributors": null,+ "quoted_status_id": 703621193417379840,+ "quoted_status_id_str": "703621193417379840",+ "quoted_status": {+ "created_at": "Sat Feb 27 16:42:19 +0000 2016",+ "id": 703621193417379840,+ "id_str": "703621193417379840",+ "text": "Cooper’s Hawk https://t.co/nppuOGne9X",+ "entities": {+ "hashtags": [],+ "symbols": [],+ "user_mentions": [],+ "urls": [],+ "media": [+ {+ "id": 703621193182502913,+ "id_str": "703621193182502913",+ "indices": [+ 14,+ 37+ ],+ "media_url": "http://pbs.twimg.com/media/CcPDv0wUYAE3D-2.jpg",+ "media_url_https": "https://pbs.twimg.com/media/CcPDv0wUYAE3D-2.jpg",+ "url": "https://t.co/nppuOGne9X",+ "display_url": "pic.twitter.com/nppuOGne9X",+ "expanded_url": "http://twitter.com/jeremycloud/status/703621193417379840/photo/1",+ "type": "photo",+ "sizes": {+ "medium": {+ "w": 600,+ "h": 398,+ "resize": "fit"+ },+ "thumb": {+ "w": 150,+ "h": 150,+ "resize": "crop"+ },+ "large": {+ "w": 1024,+ "h": 680,+ "resize": "fit"+ },+ "small": {+ "w": 340,+ "h": 226,+ "resize": "fit"+ }+ }+ }+ ]+ },+ "extended_entities": {+ "media": [+ {+ "id": 703621193182502913,+ "id_str": "703621193182502913",+ "indices": [+ 14,+ 37+ ],+ "media_url": "http://pbs.twimg.com/media/CcPDv0wUYAE3D-2.jpg",+ "media_url_https": "https://pbs.twimg.com/media/CcPDv0wUYAE3D-2.jpg",+ "url": "https://t.co/nppuOGne9X",+ "display_url": "pic.twitter.com/nppuOGne9X",+ "expanded_url": "http://twitter.com/jeremycloud/status/703621193417379840/photo/1",+ "type": "photo",+ "sizes": {+ "medium": {+ "w": 600,+ "h": 398,+ "resize": "fit"+ },+ "thumb": {+ "w": 150,+ "h": 150,+ "resize": "crop"+ },+ "large": {+ "w": 1024,+ "h": 680,+ "resize": "fit"+ },+ "small": {+ "w": 340,+ "h": 226,+ "resize": "fit"+ }+ }+ }+ ]+ },+ "truncated": false,+ "source": "<a href=\"http://www.apple.com/\" rel=\"nofollow\">OS X</a>",+ "in_reply_to_status_id": null,+ "in_reply_to_status_id_str": null,+ "in_reply_to_user_id": null,+ "in_reply_to_user_id_str": null,+ "in_reply_to_screen_name": null,+ "user": {+ "id": 15062340,+ "id_str": "15062340",+ "name": "/dev/cloud/jeremy",+ "screen_name": "jeremycloud",+ "location": "Madison, Wisconsin",+ "description": "Professional yak shaver. Amateur bike shedder.",+ "url": "https://t.co/FcYeBkOpVY",+ "entities": {+ "url": {+ "urls": [+ {+ "url": "https://t.co/FcYeBkOpVY",+ "expanded_url": "http://about.me/jeremy.cloud",+ "display_url": "about.me/jeremy.cloud",+ "indices": [+ 0,+ 23+ ]+ }+ ]+ },+ "description": {+ "urls": []+ }+ },+ "protected": false,+ "followers_count": 4329,+ "friends_count": 411,+ "listed_count": 103,+ "created_at": "Mon Jun 09 17:00:58 +0000 2008",+ "favourites_count": 803,+ "utc_offset": -21600,+ "time_zone": "Central Time (US & Canada)",+ "geo_enabled": true,+ "verified": false,+ "statuses_count": 2216,+ "lang": "en",+ "contributors_enabled": false,+ "is_translator": false,+ "is_translation_enabled": false,+ "profile_background_color": "000000",+ "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",+ "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",+ "profile_background_tile": false,+ "profile_image_url": "http://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",+ "profile_image_url_https": "https://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",+ "profile_banner_url": "https://pbs.twimg.com/profile_banners/15062340/1447451621",+ "profile_link_color": "4A913C",+ "profile_sidebar_border_color": "000000",+ "profile_sidebar_fill_color": "000000",+ "profile_text_color": "000000",+ "profile_use_background_image": false,+ "has_extended_profile": true,+ "default_profile": false,+ "default_profile_image": false,+ "following": true,+ "follow_request_sent": false,+ "notifications": false+ },+ "geo": null,+ "coordinates": null,+ "place": null,+ "contributors": null,+ "is_quote_status": false,+ "retweet_count": 0,+ "favorite_count": 2,+ "favorited": false,+ "retweeted": false,+ "possibly_sensitive": false,+ "possibly_sensitive_appealable": false,+ "lang": "en"+ },+ "is_quote_status": true,+ "retweet_count": 0,+ "favorite_count": 0,+ "favorited": false,+ "retweeted": false,+ "possibly_sensitive": false,+ "possibly_sensitive_appealable": false,+ "lang": "en"+}
+ tests/fixtures/tweet-updates/compatibility_extended_13996.json view
@@ -0,0 +1,278 @@+{+ "created_at": "Thu Mar 10 23:12:12 +0000 2016",+ "id": 708067963060916224,+ "id_str": "708067963060916224",+ "full_text": "@jeremycloud Who would win in a battle between a Barred Owl and a Cooper's Hawk? https://t.co/FamikDro2h",+ "display_text_range": [+ 13,+ 80+ ],+ "entities": {+ "hashtags": [],+ "symbols": [],+ "user_mentions": [+ {+ "screen_name": "jeremycloud",+ "name": "/dev/cloud/jeremy",+ "id": 15062340,+ "id_str": "15062340",+ "indices": [+ 0,+ 12+ ]+ }+ ],+ "urls": [+ {+ "url": "https://t.co/FamikDro2h",+ "expanded_url": "https://twitter.com/jeremycloud/status/703621193417379840",+ "display_url": "twitter.com/jeremycloud/st…",+ "indices": [+ 81,+ 104+ ]+ }+ ]+ },+ "truncated": false,+ "source": "bonesTwurl",+ "in_reply_to_status_id": 704059336788606976,+ "in_reply_to_status_id_str": "704059336788606976",+ "in_reply_to_user_id": 15062340,+ "in_reply_to_user_id_str": "15062340",+ "in_reply_to_screen_name": "jeremycloud",+ "user": {+ "id": 4449621923,+ "id_str": "4449621923",+ "name": "Mr Bones",+ "screen_name": "MrBonesDroid",+ "location": "",+ "profile_location": null,+ "description": "",+ "url": null,+ "entities": {+ "description": {+ "urls": []+ }+ },+ "protected": true,+ "followers_count": 5,+ "friends_count": 7,+ "listed_count": 0,+ "created_at": "Fri Dec 11 15:18:02 +0000 2015",+ "favourites_count": 7,+ "utc_offset": -25200,+ "time_zone": "Pacific Time (US & Canada)",+ "geo_enabled": false,+ "verified": false,+ "statuses_count": 35,+ "lang": "en-gb",+ "contributors_enabled": false,+ "is_translator": false,+ "is_translation_enabled": false,+ "profile_background_color": "F5F8FA",+ "profile_background_image_url": null,+ "profile_background_image_url_https": null,+ "profile_background_tile": false,+ "profile_image_url": "http://pbs.twimg.com/profile_images/677097663288860672/zZxWCPSI_normal.jpg",+ "profile_image_url_https": "https://pbs.twimg.com/profile_images/677097663288860672/zZxWCPSI_normal.jpg",+ "profile_link_color": "2B7BB9",+ "profile_sidebar_border_color": "C0DEED",+ "profile_sidebar_fill_color": "DDEEF6",+ "profile_text_color": "333333",+ "profile_use_background_image": true,+ "has_extended_profile": false,+ "default_profile": true,+ "default_profile_image": false,+ "following": true,+ "follow_request_sent": false,+ "notifications": false+ },+ "geo": null,+ "coordinates": null,+ "place": null,+ "contributors": null,+ "quoted_status_id": 703621193417379840,+ "quoted_status_id_str": "703621193417379840",+ "quoted_status": {+ "created_at": "Sat Feb 27 16:42:19 +0000 2016",+ "id": 703621193417379840,+ "id_str": "703621193417379840",+ "full_text": "Cooper’s Hawk https://t.co/nppuOGne9X",+ "display_text_range": [+ 0,+ 37+ ],+ "entities": {+ "hashtags": [],+ "symbols": [],+ "user_mentions": [],+ "urls": [],+ "media": [+ {+ "id": 703621193182502913,+ "id_str": "703621193182502913",+ "indices": [+ 14,+ 37+ ],+ "media_url": "http://pbs.twimg.com/media/CcPDv0wUYAE3D-2.jpg",+ "media_url_https": "https://pbs.twimg.com/media/CcPDv0wUYAE3D-2.jpg",+ "url": "https://t.co/nppuOGne9X",+ "display_url": "pic.twitter.com/nppuOGne9X",+ "expanded_url": "http://twitter.com/jeremycloud/status/703621193417379840/photo/1",+ "type": "photo",+ "sizes": {+ "medium": {+ "w": 600,+ "h": 398,+ "resize": "fit"+ },+ "thumb": {+ "w": 150,+ "h": 150,+ "resize": "crop"+ },+ "large": {+ "w": 1024,+ "h": 680,+ "resize": "fit"+ },+ "small": {+ "w": 340,+ "h": 226,+ "resize": "fit"+ }+ }+ }+ ]+ },+ "extended_entities": {+ "media": [+ {+ "id": 703621193182502913,+ "id_str": "703621193182502913",+ "indices": [+ 14,+ 37+ ],+ "media_url": "http://pbs.twimg.com/media/CcPDv0wUYAE3D-2.jpg",+ "media_url_https": "https://pbs.twimg.com/media/CcPDv0wUYAE3D-2.jpg",+ "url": "https://t.co/nppuOGne9X",+ "display_url": "pic.twitter.com/nppuOGne9X",+ "expanded_url": "http://twitter.com/jeremycloud/status/703621193417379840/photo/1",+ "type": "photo",+ "sizes": {+ "medium": {+ "w": 600,+ "h": 398,+ "resize": "fit"+ },+ "thumb": {+ "w": 150,+ "h": 150,+ "resize": "crop"+ },+ "large": {+ "w": 1024,+ "h": 680,+ "resize": "fit"+ },+ "small": {+ "w": 340,+ "h": 226,+ "resize": "fit"+ }+ }+ }+ ]+ },+ "truncated": false,+ "source": "<a href=\"http://www.apple.com/\" rel=\"nofollow\">OS X</a>",+ "in_reply_to_status_id": null,+ "in_reply_to_status_id_str": null,+ "in_reply_to_user_id": null,+ "in_reply_to_user_id_str": null,+ "in_reply_to_screen_name": null,+ "user": {+ "id": 15062340,+ "id_str": "15062340",+ "name": "/dev/cloud/jeremy",+ "screen_name": "jeremycloud",+ "location": "Madison, Wisconsin",+ "description": "Professional yak shaver. Amateur bike shedder.",+ "url": "https://t.co/FcYeBkOpVY",+ "entities": {+ "url": {+ "urls": [+ {+ "url": "https://t.co/FcYeBkOpVY",+ "expanded_url": "http://about.me/jeremy.cloud",+ "display_url": "about.me/jeremy.cloud",+ "indices": [+ 0,+ 23+ ]+ }+ ]+ },+ "description": {+ "urls": []+ }+ },+ "protected": false,+ "followers_count": 4329,+ "friends_count": 411,+ "listed_count": 103,+ "created_at": "Mon Jun 09 17:00:58 +0000 2008",+ "favourites_count": 803,+ "utc_offset": -21600,+ "time_zone": "Central Time (US & Canada)",+ "geo_enabled": true,+ "verified": false,+ "statuses_count": 2216,+ "lang": "en",+ "contributors_enabled": false,+ "is_translator": false,+ "is_translation_enabled": false,+ "profile_background_color": "000000",+ "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",+ "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",+ "profile_background_tile": false,+ "profile_image_url": "http://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",+ "profile_image_url_https": "https://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",+ "profile_banner_url": "https://pbs.twimg.com/profile_banners/15062340/1447451621",+ "profile_link_color": "4A913C",+ "profile_sidebar_border_color": "000000",+ "profile_sidebar_fill_color": "000000",+ "profile_text_color": "000000",+ "profile_use_background_image": false,+ "has_extended_profile": true,+ "default_profile": false,+ "default_profile_image": false,+ "following": true,+ "follow_request_sent": false,+ "notifications": false+ },+ "geo": null,+ "coordinates": null,+ "place": null,+ "contributors": null,+ "is_quote_status": false,+ "retweet_count": 0,+ "favorite_count": 2,+ "favorited": false,+ "retweeted": false,+ "possibly_sensitive": false,+ "possibly_sensitive_appealable": false,+ "lang": "en"+ },+ "is_quote_status": true,+ "retweet_count": 0,+ "favorite_count": 0,+ "favorited": false,+ "retweeted": false,+ "possibly_sensitive": false,+ "possibly_sensitive_appealable": false,+ "lang": "en"+}
+ tests/fixtures/tweet-updates/compatibilityplus_classic_13994.json view
@@ -0,0 +1,270 @@+{+ "created_at": "Mon Mar 28 14:39:13 +0000 2016",+ "id": 714461850188926976,+ "id_str": "714461850188926976",+ "text": "@jeremycloud It's neat to have owls and raccoons around until you realize that raccoons will eat the eggs from the … https://t.co/OY7qmdJQnO",+ "entities": {+ "hashtags": [],+ "symbols": [],+ "user_mentions": [+ {+ "screen_name": "jeremycloud",+ "name": "/dev/cloud/jeremy",+ "id": 15062340,+ "id_str": "15062340",+ "indices": [+ 0,+ 12+ ]+ }+ ],+ "urls": [+ {+ "url": "https://t.co/OY7qmdJQnO",+ "expanded_url": "https://twitter.com/i/web/status/714461850188926976",+ "display_url": "twitter.com/i/web/status/7…",+ "indices": [+ 117,+ 140+ ]+ }+ ]+ },+ "truncated": true,+ "source": "<a href=\"http://twitter.com\" rel=\"nofollow\">Twitter Web Client</a>",+ "in_reply_to_status_id": 706860403981099008,+ "in_reply_to_status_id_str": "706860403981099008",+ "in_reply_to_user_id": 15062340,+ "in_reply_to_user_id_str": "15062340",+ "in_reply_to_screen_name": "jeremycloud",+ "user": {+ "id": 4449621923,+ "id_str": "4449621923",+ "name": "Mr Bones",+ "screen_name": "MrBonesDroid",+ "location": "",+ "profile_location": null,+ "description": "",+ "url": null,+ "entities": {+ "description": {+ "urls": []+ }+ },+ "protected": true,+ "followers_count": 5,+ "friends_count": 7,+ "listed_count": 0,+ "created_at": "Fri Dec 11 15:18:02 +0000 2015",+ "favourites_count": 7,+ "utc_offset": -25200,+ "time_zone": "Pacific Time (US & Canada)",+ "geo_enabled": false,+ "verified": false,+ "statuses_count": 35,+ "lang": "en-gb",+ "contributors_enabled": false,+ "is_translator": false,+ "is_translation_enabled": false,+ "profile_background_color": "F5F8FA",+ "profile_background_image_url": null,+ "profile_background_image_url_https": null,+ "profile_background_tile": false,+ "profile_image_url": "http://pbs.twimg.com/profile_images/677097663288860672/zZxWCPSI_normal.jpg",+ "profile_image_url_https": "https://pbs.twimg.com/profile_images/677097663288860672/zZxWCPSI_normal.jpg",+ "profile_link_color": "2B7BB9",+ "profile_sidebar_border_color": "C0DEED",+ "profile_sidebar_fill_color": "DDEEF6",+ "profile_text_color": "333333",+ "profile_use_background_image": true,+ "has_extended_profile": false,+ "default_profile": true,+ "default_profile_image": false,+ "following": true,+ "follow_request_sent": false,+ "notifications": false+ },+ "geo": null,+ "coordinates": null,+ "place": null,+ "contributors": null,+ "quoted_status_id": 704059336788606976,+ "quoted_status_id_str": "704059336788606976",+ "quoted_status": {+ "created_at": "Sun Feb 28 21:43:21 +0000 2016",+ "id": 704059336788606976,+ "id_str": "704059336788606976",+ "text": "My favorite photographic subject, up closer than ever before. https://t.co/K958bKh9Sd",+ "entities": {+ "hashtags": [],+ "symbols": [],+ "user_mentions": [],+ "urls": [],+ "media": [+ {+ "id": 704059330149031936,+ "id_str": "704059330149031936",+ "indices": [+ 62,+ 85+ ],+ "media_url": "http://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",+ "media_url_https": "https://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",+ "url": "https://t.co/K958bKh9Sd",+ "display_url": "pic.twitter.com/K958bKh9Sd",+ "expanded_url": "http://twitter.com/jeremycloud/status/704059336788606976/photo/1",+ "type": "photo",+ "sizes": {+ "medium": {+ "w": 600,+ "h": 600,+ "resize": "fit"+ },+ "thumb": {+ "w": 150,+ "h": 150,+ "resize": "crop"+ },+ "large": {+ "w": 871,+ "h": 871,+ "resize": "fit"+ },+ "small": {+ "w": 340,+ "h": 340,+ "resize": "fit"+ }+ }+ }+ ]+ },+ "extended_entities": {+ "media": [+ {+ "id": 704059330149031936,+ "id_str": "704059330149031936",+ "indices": [+ 62,+ 85+ ],+ "media_url": "http://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",+ "media_url_https": "https://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",+ "url": "https://t.co/K958bKh9Sd",+ "display_url": "pic.twitter.com/K958bKh9Sd",+ "expanded_url": "http://twitter.com/jeremycloud/status/704059336788606976/photo/1",+ "type": "photo",+ "sizes": {+ "medium": {+ "w": 600,+ "h": 600,+ "resize": "fit"+ },+ "thumb": {+ "w": 150,+ "h": 150,+ "resize": "crop"+ },+ "large": {+ "w": 871,+ "h": 871,+ "resize": "fit"+ },+ "small": {+ "w": 340,+ "h": 340,+ "resize": "fit"+ }+ }+ }+ ]+ },+ "truncated": false,+ "source": "<a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a>",+ "in_reply_to_status_id": null,+ "in_reply_to_status_id_str": null,+ "in_reply_to_user_id": null,+ "in_reply_to_user_id_str": null,+ "in_reply_to_screen_name": null,+ "user": {+ "id": 15062340,+ "id_str": "15062340",+ "name": "/dev/cloud/jeremy",+ "screen_name": "jeremycloud",+ "location": "Madison, Wisconsin",+ "description": "Professional yak shaver. Amateur bike shedder.",+ "url": "https://t.co/FcYeBkOpVY",+ "entities": {+ "url": {+ "urls": [+ {+ "url": "https://t.co/FcYeBkOpVY",+ "expanded_url": "http://about.me/jeremy.cloud",+ "display_url": "about.me/jeremy.cloud",+ "indices": [+ 0,+ 23+ ]+ }+ ]+ },+ "description": {+ "urls": []+ }+ },+ "protected": false,+ "followers_count": 4324,+ "friends_count": 410,+ "listed_count": 103,+ "created_at": "Mon Jun 09 17:00:58 +0000 2008",+ "favourites_count": 815,+ "utc_offset": -18000,+ "time_zone": "Central Time (US & Canada)",+ "geo_enabled": true,+ "verified": false,+ "statuses_count": 2218,+ "lang": "en",+ "contributors_enabled": false,+ "is_translator": false,+ "is_translation_enabled": false,+ "profile_background_color": "000000",+ "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",+ "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",+ "profile_background_tile": false,+ "profile_image_url": "http://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",+ "profile_image_url_https": "https://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",+ "profile_banner_url": "https://pbs.twimg.com/profile_banners/15062340/1447451621",+ "profile_link_color": "4A913C",+ "profile_sidebar_border_color": "000000",+ "profile_sidebar_fill_color": "000000",+ "profile_text_color": "000000",+ "profile_use_background_image": false,+ "has_extended_profile": true,+ "default_profile": false,+ "default_profile_image": false,+ "following": true,+ "follow_request_sent": false,+ "notifications": false+ },+ "geo": null,+ "coordinates": null,+ "place": null,+ "contributors": null,+ "is_quote_status": false,+ "retweet_count": 0,+ "favorite_count": 11,+ "favorited": false,+ "retweeted": false,+ "possibly_sensitive": false,+ "possibly_sensitive_appealable": false,+ "lang": "en"+ },+ "is_quote_status": true,+ "retweet_count": 0,+ "favorite_count": 0,+ "favorited": false,+ "retweeted": false,+ "possibly_sensitive": false,+ "possibly_sensitive_appealable": false,+ "lang": "en"+}
@@ -0,0 +1,304 @@+{+ "created_at": "Mon Mar 28 14:39:13 +0000 2016",+ "id": 714461850188926976,+ "id_str": "714461850188926976",+ "text": "@jeremycloud It's neat to have owls and raccoons around until you realize that raccoons will eat the eggs from the … https://t.co/OY7qmdJQnO",+ "entities": {+ "hashtags": [],+ "symbols": [],+ "user_mentions": [+ {+ "screen_name": "jeremycloud",+ "name": "/dev/cloud/jeremy",+ "id": 15062340,+ "id_str": "15062340",+ "indices": [+ 0,+ 12+ ]+ }+ ],+ "urls": [+ {+ "url": "https://t.co/OY7qmdJQnO",+ "expanded_url": "https://twitter.com/i/web/status/714461850188926976",+ "display_url": "twitter.com/i/web/status/7…",+ "indices": [+ 117,+ 140+ ]+ }+ ]+ },+ "truncated": true,+ "extended_tweet": {+ "full_text": "@jeremycloud It's neat to have owls and raccoons around until you realize that raccoons will eat the eggs from the owl's nest https://t.co/Q0pkaU4ORH",+ "display_text_range": [+ 13,+ 125+ ],+ "entities": {+ "hashtags": [],+ "symbols": [],+ "user_mentions": [+ {+ "screen_name": "jeremycloud",+ "name": "/dev/cloud/jeremy",+ "id": 15062340,+ "id_str": "15062340",+ "indices": [+ 0,+ 12+ ]+ }+ ],+ "urls": [+ {+ "url": "https://t.co/Q0pkaU4ORH",+ "expanded_url": "https://twitter.com/jeremycloud/status/704059336788606976",+ "display_url": "twitter.com/jeremycloud/st…",+ "indices": [+ 126,+ 149+ ]+ }+ ]+ }+ },+ "source": "<a href=\"http://twitter.com\" rel=\"nofollow\">Twitter Web Client</a>",+ "in_reply_to_status_id": 706860403981099008,+ "in_reply_to_status_id_str": "706860403981099008",+ "in_reply_to_user_id": 15062340,+ "in_reply_to_user_id_str": "15062340",+ "in_reply_to_screen_name": "jeremycloud",+ "user": {+ "id": 4449621923,+ "id_str": "4449621923",+ "name": "Mr Bones",+ "screen_name": "MrBonesDroid",+ "location": "",+ "profile_location": null,+ "description": "",+ "url": null,+ "entities": {+ "description": {+ "urls": []+ }+ },+ "protected": true,+ "followers_count": 5,+ "friends_count": 7,+ "listed_count": 0,+ "created_at": "Fri Dec 11 15:18:02 +0000 2015",+ "favourites_count": 7,+ "utc_offset": -25200,+ "time_zone": "Pacific Time (US & Canada)",+ "geo_enabled": false,+ "verified": false,+ "statuses_count": 35,+ "lang": "en-gb",+ "contributors_enabled": false,+ "is_translator": false,+ "is_translation_enabled": false,+ "profile_background_color": "F5F8FA",+ "profile_background_image_url": null,+ "profile_background_image_url_https": null,+ "profile_background_tile": false,+ "profile_image_url": "http://pbs.twimg.com/profile_images/677097663288860672/zZxWCPSI_normal.jpg",+ "profile_image_url_https": "https://pbs.twimg.com/profile_images/677097663288860672/zZxWCPSI_normal.jpg",+ "profile_link_color": "2B7BB9",+ "profile_sidebar_border_color": "C0DEED",+ "profile_sidebar_fill_color": "DDEEF6",+ "profile_text_color": "333333",+ "profile_use_background_image": true,+ "has_extended_profile": false,+ "default_profile": true,+ "default_profile_image": false,+ "following": true,+ "follow_request_sent": false,+ "notifications": false+ },+ "geo": null,+ "coordinates": null,+ "place": null,+ "contributors": null,+ "quoted_status_id": 704059336788606976,+ "quoted_status_id_str": "704059336788606976",+ "quoted_status": {+ "created_at": "Sun Feb 28 21:43:21 +0000 2016",+ "id": 704059336788606976,+ "id_str": "704059336788606976",+ "text": "My favorite photographic subject, up closer than ever before. https://t.co/K958bKh9Sd",+ "entities": {+ "hashtags": [],+ "symbols": [],+ "user_mentions": [],+ "urls": [],+ "media": [+ {+ "id": 704059330149031936,+ "id_str": "704059330149031936",+ "indices": [+ 62,+ 85+ ],+ "media_url": "http://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",+ "media_url_https": "https://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",+ "url": "https://t.co/K958bKh9Sd",+ "display_url": "pic.twitter.com/K958bKh9Sd",+ "expanded_url": "http://twitter.com/jeremycloud/status/704059336788606976/photo/1",+ "type": "photo",+ "sizes": {+ "medium": {+ "w": 600,+ "h": 600,+ "resize": "fit"+ },+ "thumb": {+ "w": 150,+ "h": 150,+ "resize": "crop"+ },+ "large": {+ "w": 871,+ "h": 871,+ "resize": "fit"+ },+ "small": {+ "w": 340,+ "h": 340,+ "resize": "fit"+ }+ }+ }+ ]+ },+ "extended_entities": {+ "media": [+ {+ "id": 704059330149031936,+ "id_str": "704059330149031936",+ "indices": [+ 62,+ 85+ ],+ "media_url": "http://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",+ "media_url_https": "https://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",+ "url": "https://t.co/K958bKh9Sd",+ "display_url": "pic.twitter.com/K958bKh9Sd",+ "expanded_url": "http://twitter.com/jeremycloud/status/704059336788606976/photo/1",+ "type": "photo",+ "sizes": {+ "medium": {+ "w": 600,+ "h": 600,+ "resize": "fit"+ },+ "thumb": {+ "w": 150,+ "h": 150,+ "resize": "crop"+ },+ "large": {+ "w": 871,+ "h": 871,+ "resize": "fit"+ },+ "small": {+ "w": 340,+ "h": 340,+ "resize": "fit"+ }+ }+ }+ ]+ },+ "truncated": false,+ "source": "<a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a>",+ "in_reply_to_status_id": null,+ "in_reply_to_status_id_str": null,+ "in_reply_to_user_id": null,+ "in_reply_to_user_id_str": null,+ "in_reply_to_screen_name": null,+ "user": {+ "id": 15062340,+ "id_str": "15062340",+ "name": "/dev/cloud/jeremy",+ "screen_name": "jeremycloud",+ "location": "Madison, Wisconsin",+ "description": "Professional yak shaver. Amateur bike shedder.",+ "url": "https://t.co/FcYeBkOpVY",+ "entities": {+ "url": {+ "urls": [+ {+ "url": "https://t.co/FcYeBkOpVY",+ "expanded_url": "http://about.me/jeremy.cloud",+ "display_url": "about.me/jeremy.cloud",+ "indices": [+ 0,+ 23+ ]+ }+ ]+ },+ "description": {+ "urls": []+ }+ },+ "protected": false,+ "followers_count": 4324,+ "friends_count": 410,+ "listed_count": 103,+ "created_at": "Mon Jun 09 17:00:58 +0000 2008",+ "favourites_count": 815,+ "utc_offset": -18000,+ "time_zone": "Central Time (US & Canada)",+ "geo_enabled": true,+ "verified": false,+ "statuses_count": 2218,+ "lang": "en",+ "contributors_enabled": false,+ "is_translator": false,+ "is_translation_enabled": false,+ "profile_background_color": "000000",+ "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",+ "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",+ "profile_background_tile": false,+ "profile_image_url": "http://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",+ "profile_image_url_https": "https://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",+ "profile_banner_url": "https://pbs.twimg.com/profile_banners/15062340/1447451621",+ "profile_link_color": "4A913C",+ "profile_sidebar_border_color": "000000",+ "profile_sidebar_fill_color": "000000",+ "profile_text_color": "000000",+ "profile_use_background_image": false,+ "has_extended_profile": true,+ "default_profile": false,+ "default_profile_image": false,+ "following": true,+ "follow_request_sent": false,+ "notifications": false+ },+ "geo": null,+ "coordinates": null,+ "place": null,+ "contributors": null,+ "is_quote_status": false,+ "retweet_count": 0,+ "favorite_count": 11,+ "favorited": false,+ "retweeted": false,+ "possibly_sensitive": false,+ "possibly_sensitive_appealable": false,+ "lang": "en"+ },+ "is_quote_status": true,+ "retweet_count": 0,+ "favorite_count": 0,+ "favorited": false,+ "retweeted": false,+ "possibly_sensitive": false,+ "possibly_sensitive_appealable": false,+ "lang": "en"+}
+ tests/fixtures/tweet-updates/compatibilityplus_extended_13997.json view
@@ -0,0 +1,278 @@+{+ "created_at": "Mon Mar 28 14:39:13 +0000 2016",+ "id": 714461850188926976,+ "id_str": "714461850188926976",+ "full_text": "@jeremycloud It's neat to have owls and raccoons around until you realize that raccoons will eat the eggs from the owl's nest https://t.co/Q0pkaU4ORH",+ "display_text_range": [+ 13,+ 125+ ],+ "entities": {+ "hashtags": [],+ "symbols": [],+ "user_mentions": [+ {+ "screen_name": "jeremycloud",+ "name": "/dev/cloud/jeremy",+ "id": 15062340,+ "id_str": "15062340",+ "indices": [+ 0,+ 12+ ]+ }+ ],+ "urls": [+ {+ "url": "https://t.co/Q0pkaU4ORH",+ "expanded_url": "https://twitter.com/jeremycloud/status/704059336788606976",+ "display_url": "twitter.com/jeremycloud/st…",+ "indices": [+ 126,+ 149+ ]+ }+ ]+ },+ "truncated": false,+ "source": "<a href=\"http://twitter.com\" rel=\"nofollow\">Twitter Web Client</a>",+ "in_reply_to_status_id": 706860403981099008,+ "in_reply_to_status_id_str": "706860403981099008",+ "in_reply_to_user_id": 15062340,+ "in_reply_to_user_id_str": "15062340",+ "in_reply_to_screen_name": "jeremycloud",+ "user": {+ "id": 4449621923,+ "id_str": "4449621923",+ "name": "Mr Bones",+ "screen_name": "MrBonesDroid",+ "location": "",+ "profile_location": null,+ "description": "",+ "url": null,+ "entities": {+ "description": {+ "urls": []+ }+ },+ "protected": true,+ "followers_count": 5,+ "friends_count": 7,+ "listed_count": 0,+ "created_at": "Fri Dec 11 15:18:02 +0000 2015",+ "favourites_count": 7,+ "utc_offset": -25200,+ "time_zone": "Pacific Time (US & Canada)",+ "geo_enabled": false,+ "verified": false,+ "statuses_count": 35,+ "lang": "en-gb",+ "contributors_enabled": false,+ "is_translator": false,+ "is_translation_enabled": false,+ "profile_background_color": "F5F8FA",+ "profile_background_image_url": null,+ "profile_background_image_url_https": null,+ "profile_background_tile": false,+ "profile_image_url": "http://pbs.twimg.com/profile_images/677097663288860672/zZxWCPSI_normal.jpg",+ "profile_image_url_https": "https://pbs.twimg.com/profile_images/677097663288860672/zZxWCPSI_normal.jpg",+ "profile_link_color": "2B7BB9",+ "profile_sidebar_border_color": "C0DEED",+ "profile_sidebar_fill_color": "DDEEF6",+ "profile_text_color": "333333",+ "profile_use_background_image": true,+ "has_extended_profile": false,+ "default_profile": true,+ "default_profile_image": false,+ "following": true,+ "follow_request_sent": false,+ "notifications": false+ },+ "geo": null,+ "coordinates": null,+ "place": null,+ "contributors": null,+ "quoted_status_id": 704059336788606976,+ "quoted_status_id_str": "704059336788606976",+ "quoted_status": {+ "created_at": "Sun Feb 28 21:43:21 +0000 2016",+ "id": 704059336788606976,+ "id_str": "704059336788606976",+ "full_text": "My favorite photographic subject, up closer than ever before. https://t.co/K958bKh9Sd",+ "display_text_range": [+ 0,+ 85+ ],+ "entities": {+ "hashtags": [],+ "symbols": [],+ "user_mentions": [],+ "urls": [],+ "media": [+ {+ "id": 704059330149031936,+ "id_str": "704059330149031936",+ "indices": [+ 62,+ 85+ ],+ "media_url": "http://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",+ "media_url_https": "https://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",+ "url": "https://t.co/K958bKh9Sd",+ "display_url": "pic.twitter.com/K958bKh9Sd",+ "expanded_url": "http://twitter.com/jeremycloud/status/704059336788606976/photo/1",+ "type": "photo",+ "sizes": {+ "medium": {+ "w": 600,+ "h": 600,+ "resize": "fit"+ },+ "thumb": {+ "w": 150,+ "h": 150,+ "resize": "crop"+ },+ "large": {+ "w": 871,+ "h": 871,+ "resize": "fit"+ },+ "small": {+ "w": 340,+ "h": 340,+ "resize": "fit"+ }+ }+ }+ ]+ },+ "extended_entities": {+ "media": [+ {+ "id": 704059330149031936,+ "id_str": "704059330149031936",+ "indices": [+ 62,+ 85+ ],+ "media_url": "http://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",+ "media_url_https": "https://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",+ "url": "https://t.co/K958bKh9Sd",+ "display_url": "pic.twitter.com/K958bKh9Sd",+ "expanded_url": "http://twitter.com/jeremycloud/status/704059336788606976/photo/1",+ "type": "photo",+ "sizes": {+ "medium": {+ "w": 600,+ "h": 600,+ "resize": "fit"+ },+ "thumb": {+ "w": 150,+ "h": 150,+ "resize": "crop"+ },+ "large": {+ "w": 871,+ "h": 871,+ "resize": "fit"+ },+ "small": {+ "w": 340,+ "h": 340,+ "resize": "fit"+ }+ }+ }+ ]+ },+ "truncated": false,+ "source": "<a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a>",+ "in_reply_to_status_id": null,+ "in_reply_to_status_id_str": null,+ "in_reply_to_user_id": null,+ "in_reply_to_user_id_str": null,+ "in_reply_to_screen_name": null,+ "user": {+ "id": 15062340,+ "id_str": "15062340",+ "name": "/dev/cloud/jeremy",+ "screen_name": "jeremycloud",+ "location": "Madison, Wisconsin",+ "description": "Professional yak shaver. Amateur bike shedder.",+ "url": "https://t.co/FcYeBkOpVY",+ "entities": {+ "url": {+ "urls": [+ {+ "url": "https://t.co/FcYeBkOpVY",+ "expanded_url": "http://about.me/jeremy.cloud",+ "display_url": "about.me/jeremy.cloud",+ "indices": [+ 0,+ 23+ ]+ }+ ]+ },+ "description": {+ "urls": []+ }+ },+ "protected": false,+ "followers_count": 4324,+ "friends_count": 410,+ "listed_count": 103,+ "created_at": "Mon Jun 09 17:00:58 +0000 2008",+ "favourites_count": 815,+ "utc_offset": -18000,+ "time_zone": "Central Time (US & Canada)",+ "geo_enabled": true,+ "verified": false,+ "statuses_count": 2218,+ "lang": "en",+ "contributors_enabled": false,+ "is_translator": false,+ "is_translation_enabled": false,+ "profile_background_color": "000000",+ "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",+ "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",+ "profile_background_tile": false,+ "profile_image_url": "http://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",+ "profile_image_url_https": "https://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",+ "profile_banner_url": "https://pbs.twimg.com/profile_banners/15062340/1447451621",+ "profile_link_color": "4A913C",+ "profile_sidebar_border_color": "000000",+ "profile_sidebar_fill_color": "000000",+ "profile_text_color": "000000",+ "profile_use_background_image": false,+ "has_extended_profile": true,+ "default_profile": false,+ "default_profile_image": false,+ "following": true,+ "follow_request_sent": false,+ "notifications": false+ },+ "geo": null,+ "coordinates": null,+ "place": null,+ "contributors": null,+ "is_quote_status": false,+ "retweet_count": 0,+ "favorite_count": 11,+ "favorited": false,+ "retweeted": false,+ "possibly_sensitive": false,+ "possibly_sensitive_appealable": false,+ "lang": "en"+ },+ "is_quote_status": true,+ "retweet_count": 0,+ "favorite_count": 0,+ "favorited": false,+ "retweeted": false,+ "possibly_sensitive": false,+ "possibly_sensitive_appealable": false,+ "lang": "en"+}
+ tests/fixtures/tweet-updates/extended_classic_14002.json view
@@ -0,0 +1,87 @@+{+ "created_at": "Thu Jun 16 15:57:14 +0000 2016",+ "id": 743472511740870657,+ "id_str": "743472511740870657",+ "full_text": "Just setting up my Twitter. #myfirstTweet",+ "truncated": false,+ "display_text_range": [+ 0,+ 41+ ],+ "entities": {+ "hashtags": [+ {+ "text": "myfirstTweet",+ "indices": [+ 28,+ 41+ ]+ }+ ],+ "symbols": [],+ "user_mentions": [],+ "urls": []+ },+ "source": "<a href=\"http://twitter.com\" rel=\"nofollow\">Twitter Web Client</a>",+ "in_reply_to_status_id": null,+ "in_reply_to_status_id_str": null,+ "in_reply_to_user_id": null,+ "in_reply_to_user_id_str": null,+ "in_reply_to_screen_name": null,+ "user": {+ "id": 3883872981,+ "id_str": "3883872981",+ "name": "Beyond 140",+ "screen_name": "beyond_oneforty",+ "location": "",+ "description": "",+ "url": null,+ "entities": {+ "description": {+ "urls": []+ }+ },+ "protected": true,+ "followers_count": 51,+ "friends_count": 0,+ "listed_count": 0,+ "created_at": "Tue Oct 06 21:08:37 +0000 2015",+ "favourites_count": 1,+ "utc_offset": null,+ "time_zone": null,+ "geo_enabled": false,+ "verified": false,+ "statuses_count": 9,+ "lang": "en",+ "contributors_enabled": false,+ "is_translator": false,+ "is_translation_enabled": false,+ "profile_background_color": "C0DEED",+ "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",+ "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",+ "profile_background_tile": false,+ "profile_image_url": "http://pbs.twimg.com/profile_images/651506565225271296/PMEWfvS__normal.jpg",+ "profile_image_url_https": "https://pbs.twimg.com/profile_images/651506565225271296/PMEWfvS__normal.jpg",+ "profile_link_color": "0084B4",+ "profile_sidebar_border_color": "C0DEED",+ "profile_sidebar_fill_color": "DDEEF6",+ "profile_text_color": "333333",+ "profile_use_background_image": true,+ "has_extended_profile": false,+ "default_profile": true,+ "default_profile_image": false,+ "following": false,+ "follow_request_sent": false,+ "notifications": false+ },+ "geo": null,+ "coordinates": null,+ "place": null,+ "contributors": null,+ "is_quote_status": false,+ "retweet_count": 0,+ "favorite_count": 1,+ "favorited": false,+ "retweeted": false,+ "lang": "en"+}
@@ -0,0 +1,183 @@+{+ "created_at": "Thu Jun 16 16:24:44 +0000 2016",+ "id": 743479431658758145,+ "id_str": "743479431658758145",+ "full_text": "@TwitterDev I'm really excited for this change! https://t.co/VnJMDg3cbS",+ "truncated": false,+ "display_text_range": [+ 12,+ 47+ ],+ "entities": {+ "hashtags": [],+ "symbols": [],+ "user_mentions": [+ {+ "screen_name": "TwitterDev",+ "name": "TwitterDev",+ "id": 2244994945,+ "id_str": "2244994945",+ "indices": [+ 0,+ 11+ ]+ }+ ],+ "urls": [],+ "media": [+ {+ "id": 743479379079004160,+ "id_str": "743479379079004160",+ "indices": [+ 48,+ 71+ ],+ "media_url": "http://pbs.twimg.com/tweet_video_thumb/ClFejl_VAAAo9Xk.jpg",+ "media_url_https": "https://pbs.twimg.com/tweet_video_thumb/ClFejl_VAAAo9Xk.jpg",+ "url": "https://t.co/VnJMDg3cbS",+ "display_url": "pic.twitter.com/VnJMDg3cbS",+ "expanded_url": "http://twitter.com/beyond_oneforty/status/743479431658758145/photo/1",+ "type": "photo",+ "sizes": {+ "medium": {+ "w": 480,+ "h": 268,+ "resize": "fit"+ },+ "thumb": {+ "w": 150,+ "h": 150,+ "resize": "crop"+ },+ "large": {+ "w": 480,+ "h": 268,+ "resize": "fit"+ },+ "small": {+ "w": 340,+ "h": 190,+ "resize": "fit"+ }+ }+ }+ ]+ },+ "extended_entities": {+ "media": [+ {+ "id": 743479379079004160,+ "id_str": "743479379079004160",+ "indices": [+ 48,+ 71+ ],+ "media_url": "http://pbs.twimg.com/tweet_video_thumb/ClFejl_VAAAo9Xk.jpg",+ "media_url_https": "https://pbs.twimg.com/tweet_video_thumb/ClFejl_VAAAo9Xk.jpg",+ "url": "https://t.co/VnJMDg3cbS",+ "display_url": "pic.twitter.com/VnJMDg3cbS",+ "expanded_url": "http://twitter.com/beyond_oneforty/status/743479431658758145/photo/1",+ "type": "animated_gif",+ "sizes": {+ "medium": {+ "w": 480,+ "h": 268,+ "resize": "fit"+ },+ "thumb": {+ "w": 150,+ "h": 150,+ "resize": "crop"+ },+ "large": {+ "w": 480,+ "h": 268,+ "resize": "fit"+ },+ "small": {+ "w": 340,+ "h": 190,+ "resize": "fit"+ }+ },+ "video_info": {+ "aspect_ratio": [+ 120,+ 67+ ],+ "variants": [+ {+ "bitrate": 0,+ "content_type": "video/mp4",+ "url": "https://pbs.twimg.com/tweet_video/ClFejl_VAAAo9Xk.mp4"+ }+ ]+ }+ }+ ]+ },+ "source": "<a href=\"http://twitter.com\" rel=\"nofollow\">Twitter Web Client</a>",+ "in_reply_to_status_id": 735111578660438017,+ "in_reply_to_status_id_str": "735111578660438017",+ "in_reply_to_user_id": 2244994945,+ "in_reply_to_user_id_str": "2244994945",+ "in_reply_to_screen_name": "TwitterDev",+ "user": {+ "id": 3883872981,+ "id_str": "3883872981",+ "name": "Beyond 140",+ "screen_name": "beyond_oneforty",+ "location": "",+ "description": "",+ "url": null,+ "entities": {+ "description": {+ "urls": []+ }+ },+ "protected": true,+ "followers_count": 51,+ "friends_count": 0,+ "listed_count": 0,+ "created_at": "Tue Oct 06 21:08:37 +0000 2015",+ "favourites_count": 1,+ "utc_offset": null,+ "time_zone": null,+ "geo_enabled": false,+ "verified": false,+ "statuses_count": 10,+ "lang": "en",+ "contributors_enabled": false,+ "is_translator": false,+ "is_translation_enabled": false,+ "profile_background_color": "C0DEED",+ "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",+ "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",+ "profile_background_tile": false,+ "profile_image_url": "http://pbs.twimg.com/profile_images/651506565225271296/PMEWfvS__normal.jpg",+ "profile_image_url_https": "https://pbs.twimg.com/profile_images/651506565225271296/PMEWfvS__normal.jpg",+ "profile_link_color": "0084B4",+ "profile_sidebar_border_color": "C0DEED",+ "profile_sidebar_fill_color": "DDEEF6",+ "profile_text_color": "333333",+ "profile_use_background_image": true,+ "has_extended_profile": false,+ "default_profile": true,+ "default_profile_image": false,+ "following": false,+ "follow_request_sent": false,+ "notifications": false+ },+ "geo": null,+ "coordinates": null,+ "place": null,+ "contributors": null,+ "is_quote_status": false,+ "retweet_count": 0,+ "favorite_count": 1,+ "favorited": false,+ "retweeted": false,+ "possibly_sensitive": false,+ "possibly_sensitive_appealable": false,+ "lang": "en"+}
+ tests/fixtures/tweet-updates/extended_extended_14001.json view
@@ -0,0 +1,213 @@+{+ "created_at": "Thu Jun 16 17:33:23 +0000 2016",+ "id": 743496707711733760,+ "id_str": "743496707711733760",+ "full_text": "@twitter @twitterdev has more details about these changes at https://t.co/ZnXoRQy8mK. Thanks for making @twitter more expressive! https://t.co/AWmiH870F7",+ "truncated": false,+ "display_text_range": [+ 9,+ 130+ ],+ "entities": {+ "hashtags": [],+ "symbols": [],+ "user_mentions": [+ {+ "screen_name": "twitter",+ "name": "Twitter",+ "id": 783214,+ "id_str": "783214",+ "indices": [+ 0,+ 8+ ]+ },+ {+ "screen_name": "TwitterDev",+ "name": "TwitterDev",+ "id": 2244994945,+ "id_str": "2244994945",+ "indices": [+ 9,+ 20+ ]+ },+ {+ "screen_name": "twitter",+ "name": "Twitter",+ "id": 783214,+ "id_str": "783214",+ "indices": [+ 105,+ 113+ ]+ }+ ],+ "urls": [+ {+ "url": "https://t.co/ZnXoRQy8mK",+ "expanded_url": "https://blog.twitter.com/2016/doing-more-with-140-characters",+ "display_url": "blog.twitter.com/2016/doing-mor…",+ "indices": [+ 61,+ 84+ ]+ }+ ],+ "media": [+ {+ "id": 743495942192566272,+ "id_str": "743495942192566272",+ "indices": [+ 131,+ 154+ ],+ "media_url": "http://pbs.twimg.com/tweet_video_thumb/ClFtnsZVEAAE4oA.jpg",+ "media_url_https": "https://pbs.twimg.com/tweet_video_thumb/ClFtnsZVEAAE4oA.jpg",+ "url": "https://t.co/AWmiH870F7",+ "display_url": "pic.twitter.com/AWmiH870F7",+ "expanded_url": "http://twitter.com/beyond_oneforty/status/743496707711733760/photo/1",+ "type": "photo",+ "sizes": {+ "small": {+ "w": 340,+ "h": 255,+ "resize": "fit"+ },+ "medium": {+ "w": 480,+ "h": 360,+ "resize": "fit"+ },+ "thumb": {+ "w": 150,+ "h": 150,+ "resize": "crop"+ },+ "large": {+ "w": 480,+ "h": 360,+ "resize": "fit"+ }+ }+ }+ ]+ },+ "extended_entities": {+ "media": [+ {+ "id": 743495942192566272,+ "id_str": "743495942192566272",+ "indices": [+ 131,+ 154+ ],+ "media_url": "http://pbs.twimg.com/tweet_video_thumb/ClFtnsZVEAAE4oA.jpg",+ "media_url_https": "https://pbs.twimg.com/tweet_video_thumb/ClFtnsZVEAAE4oA.jpg",+ "url": "https://t.co/AWmiH870F7",+ "display_url": "pic.twitter.com/AWmiH870F7",+ "expanded_url": "http://twitter.com/beyond_oneforty/status/743496707711733760/photo/1",+ "type": "animated_gif",+ "sizes": {+ "small": {+ "w": 340,+ "h": 255,+ "resize": "fit"+ },+ "medium": {+ "w": 480,+ "h": 360,+ "resize": "fit"+ },+ "thumb": {+ "w": 150,+ "h": 150,+ "resize": "crop"+ },+ "large": {+ "w": 480,+ "h": 360,+ "resize": "fit"+ }+ },+ "video_info": {+ "aspect_ratio": [+ 4,+ 3+ ],+ "variants": [+ {+ "bitrate": 0,+ "content_type": "video/mp4",+ "url": "https://pbs.twimg.com/tweet_video/ClFtnsZVEAAE4oA.mp4"+ }+ ]+ }+ }+ ]+ },+ "source": "<a href=\"http://twitter.com\" rel=\"nofollow\">Twitter Web Client</a>",+ "in_reply_to_status_id": 735108260718469121,+ "in_reply_to_status_id_str": "735108260718469121",+ "in_reply_to_user_id": 783214,+ "in_reply_to_user_id_str": "783214",+ "in_reply_to_screen_name": "twitter",+ "user": {+ "id": 3883872981,+ "id_str": "3883872981",+ "name": "Beyond 140",+ "screen_name": "beyond_oneforty",+ "location": "",+ "description": "",+ "url": null,+ "entities": {+ "description": {+ "urls": []+ }+ },+ "protected": true,+ "followers_count": 51,+ "friends_count": 2,+ "listed_count": 0,+ "created_at": "Tue Oct 06 21:08:37 +0000 2015",+ "favourites_count": 1,+ "utc_offset": null,+ "time_zone": null,+ "geo_enabled": false,+ "verified": false,+ "statuses_count": 11,+ "lang": "en",+ "contributors_enabled": false,+ "is_translator": false,+ "is_translation_enabled": false,+ "profile_background_color": "C0DEED",+ "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",+ "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",+ "profile_background_tile": false,+ "profile_image_url": "http://pbs.twimg.com/profile_images/743489433861685249/VOcKbH8Z_normal.jpg",+ "profile_image_url_https": "https://pbs.twimg.com/profile_images/743489433861685249/VOcKbH8Z_normal.jpg",+ "profile_link_color": "0084B4",+ "profile_sidebar_border_color": "C0DEED",+ "profile_sidebar_fill_color": "DDEEF6",+ "profile_text_color": "333333",+ "profile_use_background_image": true,+ "has_extended_profile": false,+ "default_profile": true,+ "default_profile_image": false,+ "following": false,+ "follow_request_sent": false,+ "notifications": false+ },+ "geo": null,+ "coordinates": null,+ "place": null,+ "contributors": null,+ "is_quote_status": false,+ "retweet_count": 0,+ "favorite_count": 0,+ "favorited": false,+ "retweeted": false,+ "possibly_sensitive": false,+ "possibly_sensitive_appealable": false,+ "lang": "en"+}
tests/spec_main.hs view
@@ -1,14 +1,15 @@ module Main where +import qualified PropFromToJSONTest+import qualified StatusTest import Test.Tasty import qualified TypesTest-import qualified PropFromToJSONTest tests :: TestTree tests = testGroup "Tests"- [ testGroup "Unit Test" [TypesTest.tests]+ [ testGroup "Unit Test" [TypesTest.tests, StatusTest.tests] , testGroup "Property Test" [PropFromToJSONTest.tests] ]
twitter-types.cabal view
@@ -1,5 +1,5 @@ name: twitter-types-version: 0.9.0+version: 0.10.0 license: BSD3 license-file: LICENSE author: Takahiro HIMURA@@ -17,6 +17,7 @@ extra-source-files: README.md tests/fixtures/*.json+ tests/fixtures/tweet-updates/*.json source-repository head type: git@@ -61,6 +62,7 @@ Fixtures Instances PropFromToJSONTest+ StatusTest TypesTest ghc-options: -Wall