summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authormurphy <murphy@rubychan.de>2008-10-08 20:18:31 +0000
committermurphy <murphy@rubychan.de>2008-10-08 20:18:31 +0000
commit23e5605488f613bd864671a322562ecfcb2d945d (patch)
treedd165d49db8bca9569e06748fbab92d77216a9e9 /test
parenta4bd413ca4e835fd3d1fdc24eebce67cd54231ca (diff)
downloadcoderay-23e5605488f613bd864671a322562ecfcb2d945d.tar.gz
New: *JSON* (closes #53). Version 0.8 is near!
* Simple and really nice scanner (I think), produces colorful output. * Checked against strange examples from Ruby's JSON lib. More changes: * Changed version number. Finally! * Added some token styles for :key token group. * cYcnus style: chars inside of strings are highlighted purple instead of blue. * murphy style needs work.
Diffstat (limited to 'test')
-rw-r--r--test/scanners/json/big.expected.raydebug295
-rw-r--r--test/scanners/json/big.in.json295
-rw-r--r--test/scanners/json/big2.expected.raydebug267
-rw-r--r--test/scanners/json/big2.in.json267
-rw-r--r--test/scanners/json/example.expected.raydebug22
-rw-r--r--test/scanners/json/example.in.json22
-rw-r--r--test/scanners/json/json-lib.expected.raydebug73
-rw-r--r--test/scanners/json/json-lib.in.json73
-rw-r--r--test/scanners/json/suite.rb2
9 files changed, 1316 insertions, 0 deletions
diff --git a/test/scanners/json/big.expected.raydebug b/test/scanners/json/big.expected.raydebug
new file mode 100644
index 0000000..c72cb2b
--- /dev/null
+++ b/test/scanners/json/big.expected.raydebug
@@ -0,0 +1,295 @@
+operator([)
+ operator({)
+ key<delimiter(")content(import_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(neighbourhoods)char(\\/)content(Neighbourhoods::Storage)char(\\/)content(import)delimiter(")>operator(,)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(Neighbourhood)delimiter(")>operator(,)
+ key<delimiter(")content(reflected)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(selected)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(export_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(neighbourhoods)char(\\/)content(Neighbourhoods::Storage)char(\\/)content(export)delimiter(")>operator(,)
+ key<delimiter(")content(snapshots_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(snapshots)delimiter(")>operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(neighbourhoods)char(\\/)content(Neighbourhoods::Storage)char(\\/)content(lists)delimiter(")>operator(,)
+ key<delimiter(")content(print_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(neighbourhoods)char(\\/)content(Neighbourhoods::Storage)char(\\/)content(print)delimiter(")>operator(,)
+ key<delimiter(")content(locked)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Lager)delimiter(")>operator(,)
+ key<delimiter(")content(lists)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(List)delimiter(")>operator(,)
+ key<delimiter(")content(sort_keys)delimiter(")>operator(:) operator({)
+ key<delimiter(")content(options)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Standardsortierung)delimiter(")>operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) reserved(null)
+ operator(})
+ operator(])
+ operator(})operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(lists)char(\\/)content(Lists::Manufacturers)char(\\/)content(elements.json)delimiter(")>operator(,)
+ key<delimiter(")content(sort_key_uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(lists)char(\\/)content(Lists::Manufacturers)char(\\/)content(sort_key)delimiter(")>operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Hersteller)delimiter(")>operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(Lists::Manufacturers)delimiter(")>operator(,)
+ key<delimiter(")content(element_types)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(create_element_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements?list=Lists%3A%3AManufacturers&type=Elements%3A%3AManufacturer)delimiter(")>operator(,)
+ key<delimiter(")content(essential_attributes)delimiter(")>operator(:) operator([)
+ operator(])operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Hersteller)delimiter(")>operator(,)
+ key<delimiter(")content(ask_for_email)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(Elements::Manufacturer)delimiter(")>
+ operator(})
+ operator(])operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(true)
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(List)delimiter(")>operator(,)
+ key<delimiter(")content(sort_keys)delimiter(")>operator(:) operator({)
+ key<delimiter(")content(options)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Standardsortierung)delimiter(")>operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) reserved(null)
+ operator(})
+ operator(])
+ operator(})operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(lists)char(\\/)content(Lists::Categories)char(\\/)content(elements.json)delimiter(")>operator(,)
+ key<delimiter(")content(sort_key_uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(lists)char(\\/)content(Lists::Categories)char(\\/)content(sort_key)delimiter(")>operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Rubriken)delimiter(")>operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(Lists::Categories)delimiter(")>operator(,)
+ key<delimiter(")content(element_types)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(create_element_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements?list=Lists%3A%3ACategories&type=Elements%3A%3ACategory)delimiter(")>operator(,)
+ key<delimiter(")content(essential_attributes)delimiter(")>operator(:) operator([)
+ operator(])operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Rubrik)delimiter(")>operator(,)
+ key<delimiter(")content(ask_for_email)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(Elements::Category)delimiter(")>
+ operator(})
+ operator(])operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(true)
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(List)delimiter(")>operator(,)
+ key<delimiter(")content(sort_keys)delimiter(")>operator(:) operator({)
+ key<delimiter(")content(options)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Standardsortierung)delimiter(")>operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) reserved(null)
+ operator(})
+ operator(])
+ operator(})operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(lists)char(\\/)content(Lists::ArticlesList)char(\\/)content(elements.json)delimiter(")>operator(,)
+ key<delimiter(")content(sort_key_uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(lists)char(\\/)content(Lists::ArticlesList)char(\\/)content(sort_key)delimiter(")>operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Artikel)delimiter(")>operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(Lists::ArticlesList)delimiter(")>operator(,)
+ key<delimiter(")content(element_types)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(create_element_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements?list=Lists%3A%3AArticlesList&type=Elements%3A%3AArticle)delimiter(")>operator(,)
+ key<delimiter(")content(essential_attributes)delimiter(")>operator(:) operator([)
+ operator(])operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Artikel)delimiter(")>operator(,)
+ key<delimiter(")content(ask_for_email)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(Elements::Article)delimiter(")>
+ operator(})
+ operator(])operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(true)
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(List)delimiter(")>operator(,)
+ key<delimiter(")content(sort_keys)delimiter(")>operator(:) operator({)
+ key<delimiter(")content(options)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Standardsortierung)delimiter(")>operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) reserved(null)
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Bestelldatum)delimiter(")>operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(Date)delimiter(")>
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(bestellt von)delimiter(")>operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(OrderedBy)delimiter(")>
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Summe)delimiter(")>operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(Total)delimiter(")>
+ operator(})
+ operator(])
+ operator(})operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(lists)char(\\/)content(Lists::Orders)char(\\/)content(elements.json)delimiter(")>operator(,)
+ key<delimiter(")content(sort_key_uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(lists)char(\\/)content(Lists::Orders)char(\\/)content(sort_key)delimiter(")>operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Bestellungen)delimiter(")>operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(Lists::Orders)delimiter(")>operator(,)
+ key<delimiter(")content(element_types)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(create_element_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements?list=Lists%3A%3AOrders&type=Elements%3A%3AOrder)delimiter(")>operator(,)
+ key<delimiter(")content(essential_attributes)delimiter(")>operator(:) operator([)
+ operator(])operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Bestellung)delimiter(")>operator(,)
+ key<delimiter(")content(ask_for_email)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(Elements::Order)delimiter(")>
+ operator(})
+ operator(])operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(true)
+ operator(})
+ operator(])operator(,)
+ key<delimiter(")content(release_export_lock_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(neighbourhoods)char(\\/)content(Neighbourhoods::Storage)char(\\/)content(release_export_lock)delimiter(")>operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(replay_latest_snapshot_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(snapshots)char(\\/)content(replay_latest)delimiter(")>operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(Neighbourhoods::Storage)delimiter(")>operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(true)
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(import_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(neighbourhoods)char(\\/)content(Neighbourhoods::Administration)char(\\/)content(import)delimiter(")>operator(,)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(Neighbourhood)delimiter(")>operator(,)
+ key<delimiter(")content(reflected)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(selected)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(export_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(neighbourhoods)char(\\/)content(Neighbourhoods::Administration)char(\\/)content(export)delimiter(")>operator(,)
+ key<delimiter(")content(snapshots_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(snapshots)delimiter(")>operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(neighbourhoods)char(\\/)content(Neighbourhoods::Administration)char(\\/)content(lists)delimiter(")>operator(,)
+ key<delimiter(")content(print_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(neighbourhoods)char(\\/)content(Neighbourhoods::Administration)char(\\/)content(print)delimiter(")>operator(,)
+ key<delimiter(")content(locked)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Verwaltung)delimiter(")>operator(,)
+ key<delimiter(")content(lists)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(List)delimiter(")>operator(,)
+ key<delimiter(")content(sort_keys)delimiter(")>operator(:) operator({)
+ key<delimiter(")content(options)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Standardsortierung)delimiter(")>operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) reserved(null)
+ operator(})
+ operator(])
+ operator(})operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(lists)char(\\/)content(Lists::Employees)char(\\/)content(elements.json)delimiter(")>operator(,)
+ key<delimiter(")content(sort_key_uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(lists)char(\\/)content(Lists::Employees)char(\\/)content(sort_key)delimiter(")>operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Mitarbeiter)delimiter(")>operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(Lists::Employees)delimiter(")>operator(,)
+ key<delimiter(")content(element_types)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(create_element_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements?list=Lists%3A%3AEmployees&type=Elements%3A%3APerson)delimiter(")>operator(,)
+ key<delimiter(")content(essential_attributes)delimiter(")>operator(:) operator([)
+ operator(])operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Person)delimiter(")>operator(,)
+ key<delimiter(")content(ask_for_email)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(Elements::Person)delimiter(")>
+ operator(})
+ operator(])operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(true)
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(List)delimiter(")>operator(,)
+ key<delimiter(")content(sort_keys)delimiter(")>operator(:) operator({)
+ key<delimiter(")content(options)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Standardsortierung)delimiter(")>operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) reserved(null)
+ operator(})
+ operator(])
+ operator(})operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(lists)char(\\/)content(Lists::Departments)char(\\/)content(elements.json)delimiter(")>operator(,)
+ key<delimiter(")content(sort_key_uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(lists)char(\\/)content(Lists::Departments)char(\\/)content(sort_key)delimiter(")>operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Abteilungen)delimiter(")>operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(Lists::Departments)delimiter(")>operator(,)
+ key<delimiter(")content(element_types)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(create_element_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements?list=Lists%3A%3ADepartments&type=Elements%3A%3ADepartment)delimiter(")>operator(,)
+ key<delimiter(")content(essential_attributes)delimiter(")>operator(:) operator([)
+ operator(])operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Abteilung)delimiter(")>operator(,)
+ key<delimiter(")content(ask_for_email)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(Elements::Department)delimiter(")>
+ operator(})
+ operator(])operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(true)
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(List)delimiter(")>operator(,)
+ key<delimiter(")content(sort_keys)delimiter(")>operator(:) operator({)
+ key<delimiter(")content(options)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Standardsortierung)delimiter(")>operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) reserved(null)
+ operator(})
+ operator(])
+ operator(})operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(lists)char(\\/)content(Lists::Locations)char(\\/)content(elements.json)delimiter(")>operator(,)
+ key<delimiter(")content(sort_key_uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(lists)char(\\/)content(Lists::Locations)char(\\/)content(sort_key)delimiter(")>operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Standorte)delimiter(")>operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(Lists::Locations)delimiter(")>operator(,)
+ key<delimiter(")content(element_types)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(create_element_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements?list=Lists%3A%3ALocations&type=Elements%3A%3ALocation)delimiter(")>operator(,)
+ key<delimiter(")content(essential_attributes)delimiter(")>operator(:) operator([)
+ operator(])operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Standort)delimiter(")>operator(,)
+ key<delimiter(")content(ask_for_email)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(Elements::Location)delimiter(")>
+ operator(})
+ operator(])operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(true)
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(List)delimiter(")>operator(,)
+ key<delimiter(")content(sort_keys)delimiter(")>operator(:) operator({)
+ key<delimiter(")content(options)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Standardsortierung)delimiter(")>operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) reserved(null)
+ operator(})
+ operator(])
+ operator(})operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(lists)char(\\/)content(Lists::Stocktakings)char(\\/)content(elements.json)delimiter(")>operator(,)
+ key<delimiter(")content(sort_key_uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(lists)char(\\/)content(Lists::Stocktakings)char(\\/)content(sort_key)delimiter(")>operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Inventuren)delimiter(")>operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(Lists::Stocktakings)delimiter(")>operator(,)
+ key<delimiter(")content(element_types)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(create_element_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements?list=Lists%3A%3AStocktakings&type=Elements%3A%3AStocktaking)delimiter(")>operator(,)
+ key<delimiter(")content(essential_attributes)delimiter(")>operator(:) operator([)
+ operator(])operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Inventur)delimiter(")>operator(,)
+ key<delimiter(")content(ask_for_email)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(Elements::Stocktaking)delimiter(")>
+ operator(})
+ operator(])operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(true)
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(List)delimiter(")>operator(,)
+ key<delimiter(")content(sort_keys)delimiter(")>operator(:) operator({)
+ key<delimiter(")content(options)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Standardsortierung)delimiter(")>operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) reserved(null)
+ operator(})
+ operator(])
+ operator(})operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(lists)char(\\/)content(Lists::Invoices)char(\\/)content(elements.json)delimiter(")>operator(,)
+ key<delimiter(")content(sort_key_uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(lists)char(\\/)content(Lists::Invoices)char(\\/)content(sort_key)delimiter(")>operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Abrechnungen)delimiter(")>operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(Lists::Invoices)delimiter(")>operator(,)
+ key<delimiter(")content(element_types)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(create_element_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements?list=Lists%3A%3AInvoices&type=Elements%3A%3AInvoice)delimiter(")>operator(,)
+ key<delimiter(")content(essential_attributes)delimiter(")>operator(:) operator([)
+ operator(])operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Abrechnung)delimiter(")>operator(,)
+ key<delimiter(")content(ask_for_email)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(Elements::Invoice)delimiter(")>
+ operator(})
+ operator(])operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(true)
+ operator(})
+ operator(])operator(,)
+ key<delimiter(")content(release_export_lock_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(neighbourhoods)char(\\/)content(Neighbourhoods::Administration)char(\\/)content(release_export_lock)delimiter(")>operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(replay_latest_snapshot_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(snapshots)char(\\/)content(replay_latest)delimiter(")>operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(Neighbourhoods::Administration)delimiter(")>operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(true)
+ operator(})
+operator(]) \ No newline at end of file
diff --git a/test/scanners/json/big.in.json b/test/scanners/json/big.in.json
new file mode 100644
index 0000000..1af2d3e
--- /dev/null
+++ b/test/scanners/json/big.in.json
@@ -0,0 +1,295 @@
+[
+ {
+ "import_url": "http:\/\/localhost:3000\/neighbourhoods\/Neighbourhoods::Storage\/import",
+ "type": "Neighbourhood",
+ "reflected": false,
+ "selected": true,
+ "export_url": "http:\/\/localhost:3000\/neighbourhoods\/Neighbourhoods::Storage\/export",
+ "snapshots_url": "http:\/\/localhost:3000\/snapshots",
+ "uri": "http:\/\/localhost:3000\/neighbourhoods\/Neighbourhoods::Storage\/lists",
+ "print_url": "http:\/\/localhost:3000\/neighbourhoods\/Neighbourhoods::Storage\/print",
+ "locked": false,
+ "name": "Lager",
+ "lists": [
+ {
+ "type": "List",
+ "sort_keys": {
+ "options": [
+ {
+ "name": "Standardsortierung",
+ "id": null
+ }
+ ]
+ },
+ "uri": "http:\/\/localhost:3000\/lists\/Lists::Manufacturers\/elements.json",
+ "sort_key_uri": "http:\/\/localhost:3000\/lists\/Lists::Manufacturers\/sort_key",
+ "name": "Hersteller",
+ "readable": true,
+ "id": "Lists::Manufacturers",
+ "element_types": [
+ {
+ "create_element_url": "http:\/\/localhost:3000\/elements?list=Lists%3A%3AManufacturers&type=Elements%3A%3AManufacturer",
+ "essential_attributes": [
+ ],
+ "name": "Hersteller",
+ "ask_for_email": false,
+ "id": "Elements::Manufacturer"
+ }
+ ],
+ "writable": true
+ },
+ {
+ "type": "List",
+ "sort_keys": {
+ "options": [
+ {
+ "name": "Standardsortierung",
+ "id": null
+ }
+ ]
+ },
+ "uri": "http:\/\/localhost:3000\/lists\/Lists::Categories\/elements.json",
+ "sort_key_uri": "http:\/\/localhost:3000\/lists\/Lists::Categories\/sort_key",
+ "name": "Rubriken",
+ "readable": true,
+ "id": "Lists::Categories",
+ "element_types": [
+ {
+ "create_element_url": "http:\/\/localhost:3000\/elements?list=Lists%3A%3ACategories&type=Elements%3A%3ACategory",
+ "essential_attributes": [
+ ],
+ "name": "Rubrik",
+ "ask_for_email": false,
+ "id": "Elements::Category"
+ }
+ ],
+ "writable": true
+ },
+ {
+ "type": "List",
+ "sort_keys": {
+ "options": [
+ {
+ "name": "Standardsortierung",
+ "id": null
+ }
+ ]
+ },
+ "uri": "http:\/\/localhost:3000\/lists\/Lists::ArticlesList\/elements.json",
+ "sort_key_uri": "http:\/\/localhost:3000\/lists\/Lists::ArticlesList\/sort_key",
+ "name": "Artikel",
+ "readable": true,
+ "id": "Lists::ArticlesList",
+ "element_types": [
+ {
+ "create_element_url": "http:\/\/localhost:3000\/elements?list=Lists%3A%3AArticlesList&type=Elements%3A%3AArticle",
+ "essential_attributes": [
+ ],
+ "name": "Artikel",
+ "ask_for_email": false,
+ "id": "Elements::Article"
+ }
+ ],
+ "writable": true
+ },
+ {
+ "type": "List",
+ "sort_keys": {
+ "options": [
+ {
+ "name": "Standardsortierung",
+ "id": null
+ },
+ {
+ "name": "Bestelldatum",
+ "id": "Date"
+ },
+ {
+ "name": "bestellt von",
+ "id": "OrderedBy"
+ },
+ {
+ "name": "Summe",
+ "id": "Total"
+ }
+ ]
+ },
+ "uri": "http:\/\/localhost:3000\/lists\/Lists::Orders\/elements.json",
+ "sort_key_uri": "http:\/\/localhost:3000\/lists\/Lists::Orders\/sort_key",
+ "name": "Bestellungen",
+ "readable": true,
+ "id": "Lists::Orders",
+ "element_types": [
+ {
+ "create_element_url": "http:\/\/localhost:3000\/elements?list=Lists%3A%3AOrders&type=Elements%3A%3AOrder",
+ "essential_attributes": [
+ ],
+ "name": "Bestellung",
+ "ask_for_email": false,
+ "id": "Elements::Order"
+ }
+ ],
+ "writable": true
+ }
+ ],
+ "release_export_lock_url": "http:\/\/localhost:3000\/neighbourhoods\/Neighbourhoods::Storage\/release_export_lock",
+ "readable": true,
+ "replay_latest_snapshot_url": "http:\/\/localhost:3000\/snapshots\/replay_latest",
+ "id": "Neighbourhoods::Storage",
+ "writable": true
+ },
+ {
+ "import_url": "http:\/\/localhost:3000\/neighbourhoods\/Neighbourhoods::Administration\/import",
+ "type": "Neighbourhood",
+ "reflected": true,
+ "selected": false,
+ "export_url": "http:\/\/localhost:3000\/neighbourhoods\/Neighbourhoods::Administration\/export",
+ "snapshots_url": "http:\/\/localhost:3000\/snapshots",
+ "uri": "http:\/\/localhost:3000\/neighbourhoods\/Neighbourhoods::Administration\/lists",
+ "print_url": "http:\/\/localhost:3000\/neighbourhoods\/Neighbourhoods::Administration\/print",
+ "locked": false,
+ "name": "Verwaltung",
+ "lists": [
+ {
+ "type": "List",
+ "sort_keys": {
+ "options": [
+ {
+ "name": "Standardsortierung",
+ "id": null
+ }
+ ]
+ },
+ "uri": "http:\/\/localhost:3000\/lists\/Lists::Employees\/elements.json",
+ "sort_key_uri": "http:\/\/localhost:3000\/lists\/Lists::Employees\/sort_key",
+ "name": "Mitarbeiter",
+ "readable": true,
+ "id": "Lists::Employees",
+ "element_types": [
+ {
+ "create_element_url": "http:\/\/localhost:3000\/elements?list=Lists%3A%3AEmployees&type=Elements%3A%3APerson",
+ "essential_attributes": [
+ ],
+ "name": "Person",
+ "ask_for_email": true,
+ "id": "Elements::Person"
+ }
+ ],
+ "writable": true
+ },
+ {
+ "type": "List",
+ "sort_keys": {
+ "options": [
+ {
+ "name": "Standardsortierung",
+ "id": null
+ }
+ ]
+ },
+ "uri": "http:\/\/localhost:3000\/lists\/Lists::Departments\/elements.json",
+ "sort_key_uri": "http:\/\/localhost:3000\/lists\/Lists::Departments\/sort_key",
+ "name": "Abteilungen",
+ "readable": true,
+ "id": "Lists::Departments",
+ "element_types": [
+ {
+ "create_element_url": "http:\/\/localhost:3000\/elements?list=Lists%3A%3ADepartments&type=Elements%3A%3ADepartment",
+ "essential_attributes": [
+ ],
+ "name": "Abteilung",
+ "ask_for_email": false,
+ "id": "Elements::Department"
+ }
+ ],
+ "writable": true
+ },
+ {
+ "type": "List",
+ "sort_keys": {
+ "options": [
+ {
+ "name": "Standardsortierung",
+ "id": null
+ }
+ ]
+ },
+ "uri": "http:\/\/localhost:3000\/lists\/Lists::Locations\/elements.json",
+ "sort_key_uri": "http:\/\/localhost:3000\/lists\/Lists::Locations\/sort_key",
+ "name": "Standorte",
+ "readable": true,
+ "id": "Lists::Locations",
+ "element_types": [
+ {
+ "create_element_url": "http:\/\/localhost:3000\/elements?list=Lists%3A%3ALocations&type=Elements%3A%3ALocation",
+ "essential_attributes": [
+ ],
+ "name": "Standort",
+ "ask_for_email": false,
+ "id": "Elements::Location"
+ }
+ ],
+ "writable": true
+ },
+ {
+ "type": "List",
+ "sort_keys": {
+ "options": [
+ {
+ "name": "Standardsortierung",
+ "id": null
+ }
+ ]
+ },
+ "uri": "http:\/\/localhost:3000\/lists\/Lists::Stocktakings\/elements.json",
+ "sort_key_uri": "http:\/\/localhost:3000\/lists\/Lists::Stocktakings\/sort_key",
+ "name": "Inventuren",
+ "readable": true,
+ "id": "Lists::Stocktakings",
+ "element_types": [
+ {
+ "create_element_url": "http:\/\/localhost:3000\/elements?list=Lists%3A%3AStocktakings&type=Elements%3A%3AStocktaking",
+ "essential_attributes": [
+ ],
+ "name": "Inventur",
+ "ask_for_email": false,
+ "id": "Elements::Stocktaking"
+ }
+ ],
+ "writable": true
+ },
+ {
+ "type": "List",
+ "sort_keys": {
+ "options": [
+ {
+ "name": "Standardsortierung",
+ "id": null
+ }
+ ]
+ },
+ "uri": "http:\/\/localhost:3000\/lists\/Lists::Invoices\/elements.json",
+ "sort_key_uri": "http:\/\/localhost:3000\/lists\/Lists::Invoices\/sort_key",
+ "name": "Abrechnungen",
+ "readable": true,
+ "id": "Lists::Invoices",
+ "element_types": [
+ {
+ "create_element_url": "http:\/\/localhost:3000\/elements?list=Lists%3A%3AInvoices&type=Elements%3A%3AInvoice",
+ "essential_attributes": [
+ ],
+ "name": "Abrechnung",
+ "ask_for_email": false,
+ "id": "Elements::Invoice"
+ }
+ ],
+ "writable": true
+ }
+ ],
+ "release_export_lock_url": "http:\/\/localhost:3000\/neighbourhoods\/Neighbourhoods::Administration\/release_export_lock",
+ "readable": true,
+ "replay_latest_snapshot_url": "http:\/\/localhost:3000\/snapshots\/replay_latest",
+ "id": "Neighbourhoods::Administration",
+ "writable": true
+ }
+] \ No newline at end of file
diff --git a/test/scanners/json/big2.expected.raydebug b/test/scanners/json/big2.expected.raydebug
new file mode 100644
index 0000000..9014536
--- /dev/null
+++ b/test/scanners/json/big2.expected.raydebug
@@ -0,0 +1,267 @@
+operator({)
+ key<delimiter(")content(url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements)char(\\/)content(633)char(\\/)content(attributes)delimiter(")>operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Bestellung: 3 <strong>Clovis Schwenger<)char(\\/)content(strong> ()char(\\u20ac)content( 12.10, 2008-10-08\))delimiter(")>operator(,)
+ key<delimiter(")content(attributes)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(color)delimiter(")>operator(:) string<delimiter(")content(red)delimiter(")>operator(,)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(state)delimiter(")>operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements)char(\\/)content(633)char(\\/)content(state)delimiter(")>operator(,)
+ key<delimiter(")content(options)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(color)delimiter(")>operator(:) string<delimiter(")content(red)delimiter(")>operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(neu)delimiter(")>operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(new)delimiter(")>
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(color)delimiter(")>operator(:) string<delimiter(")content(orange)delimiter(")>operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(abgeschlossen)delimiter(")>operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(closed)delimiter(")>
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(color)delimiter(")>operator(:) string<delimiter(")content(green)delimiter(")>operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(freigegeben)delimiter(")>operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(approved)delimiter(")>
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(color)delimiter(")>operator(:) string<delimiter(")delimiter(")>operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(verschickt)delimiter(")>operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(shipped)delimiter(")>
+ operator(})
+ operator(])operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Zustand)delimiter(")>operator(,)
+ key<delimiter(")content(value)delimiter(")>operator(:) string<delimiter(")content(new)delimiter(")>operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(journals)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(user)delimiter(")>operator(:) string<delimiter(")content(CS)delimiter(")>operator(,)
+ key<delimiter(")content(timestamp)delimiter(")>operator(:) string<delimiter(")content(17:05 10)char(\\/)content(07)char(\\/)content(08)delimiter(")>operator(,)
+ key<delimiter(")content(created)delimiter(")>operator(:) reserved(true)
+ operator(})
+ operator(])operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(false)
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(boolean)delimiter(")>operator(,)
+ key<delimiter(")content(mandatory)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(confirm)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(attributes)char(\\/)content(5217)delimiter(")>operator(,)
+ key<delimiter(")content(value)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(abgeschlossen)delimiter(")>operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) integer(5217)operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(true)
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(boolean)delimiter(")>operator(,)
+ key<delimiter(")content(mandatory)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(confirm)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(attributes)char(\\/)content(5218)delimiter(")>operator(,)
+ key<delimiter(")content(value)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(freigegeben)delimiter(")>operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) integer(5218)operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(false)
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(boolean)delimiter(")>operator(,)
+ key<delimiter(")content(mandatory)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(confirm)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(attributes)char(\\/)content(5219)delimiter(")>operator(,)
+ key<delimiter(")content(value)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(verschickt)delimiter(")>operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) integer(5219)operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(false)
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(date)delimiter(")>operator(,)
+ key<delimiter(")content(mandatory)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(confirm)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(attributes)char(\\/)content(5220)delimiter(")>operator(,)
+ key<delimiter(")content(value)delimiter(")>operator(:) string<delimiter(")content(2008-10-08)delimiter(")>operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Bestelldatum)delimiter(")>operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) integer(5220)operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(false)
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(references)delimiter(")>operator(,)
+ key<delimiter(")content(create_options)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(create_element_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements?list=Lists%3A%3AEmployees&source_id=5221&type=Elements%3A%3APerson)delimiter(")>operator(,)
+ key<delimiter(")content(essential_attributes)delimiter(")>operator(:) operator([)
+ operator(])operator(,)
+ key<delimiter(")content(names)delimiter(")>operator(:) operator({)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(Person)delimiter(")>operator(,)
+ key<delimiter(")content(list)delimiter(")>operator(:) string<delimiter(")content(Mitarbeiter)delimiter(")>
+ operator(})operator(,)
+ key<delimiter(")content(ask_for_email)delimiter(")>operator(:) reserved(true)
+ operator(})
+ operator(])operator(,)
+ key<delimiter(")content(maximum_reached)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(constraints)delimiter(")>operator(:) operator({)
+ key<delimiter(")content(neighbourhood)delimiter(")>operator(:) reserved(null)operator(,)
+ key<delimiter(")content(attribute)delimiter(")>operator(:) reserved(null)operator(,)
+ key<delimiter(")content(maximum)delimiter(")>operator(:) integer(1)operator(,)
+ key<delimiter(")content(element)delimiter(")>operator(:) operator([)
+ string<delimiter(")content(Elements::Person)delimiter(")>
+ operator(])operator(,)
+ key<delimiter(")content(list)delimiter(")>operator(:) reserved(null)operator(,)
+ key<delimiter(")content(follow)delimiter(")>operator(:) reserved(null)
+ operator(})operator(,)
+ key<delimiter(")content(essential_attributes)delimiter(")>operator(:) operator([)
+ operator(])operator(,)
+ key<delimiter(")content(mandatory)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(confirm)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(attributes)char(\\/)content(5221)delimiter(")>operator(,)
+ key<delimiter(")content(value)delimiter(")>operator(:) operator({)
+ key<delimiter(")content(elements)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(color)delimiter(")>operator(:) reserved(null)operator(,)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(Elements::Person)delimiter(")>operator(,)
+ key<delimiter(")content(has_predecessors)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(successors)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements)char(\\/)content(582)char(\\/)content(successors)delimiter(")>operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements)char(\\/)content(582)delimiter(")>operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Clovis Schwenger)delimiter(")>operator(,)
+ key<delimiter(")content(attributes)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements)char(\\/)content(582)char(\\/)content(attributes)delimiter(")>operator(,)
+ key<delimiter(")content(link_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(inbound_references)char(\\/)content(457)delimiter(")>operator(,)
+ key<delimiter(")content(state)delimiter(")>operator(:) reserved(null)operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(list)delimiter(")>operator(:) string<delimiter(")content(Lists::Employees)delimiter(")>operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) integer(582)operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(family)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements)char(\\/)content(582)char(\\/)content(family)delimiter(")>
+ operator(})
+ operator(])
+ operator(})operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(bestellt von)delimiter(")>operator(,)
+ key<delimiter(")content(candidates_uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(attributes)char(\\/)content(5221)char(\\/)content(candidates)delimiter(")>operator(,)
+ key<delimiter(")content(create_reference_uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(inbound_references)delimiter(")>operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) integer(5221)operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(false)
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(text)delimiter(")>operator(,)
+ key<delimiter(")content(mandatory)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(confirm)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(attributes)char(\\/)content(5222)delimiter(")>operator(,)
+ key<delimiter(")content(value)delimiter(")>operator(:) operator({)
+ key<delimiter(")content(language)delimiter(")>operator(:) reserved(null)operator(,)
+ key<delimiter(")content(version)delimiter(")>operator(:) integer(0)operator(,)
+ key<delimiter(")content(text)delimiter(")>operator(:) string<delimiter(")delimiter(")>
+ operator(})operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Verwendungszweck)delimiter(")>operator(,)
+ key<delimiter(")content(multiline)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) integer(5222)operator(,)
+ key<delimiter(")content(languages)delimiter(")>operator(:) operator([)
+ operator(])operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(true)
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(references)delimiter(")>operator(,)
+ key<delimiter(")content(create_options)delimiter(")>operator(:) operator([)
+ operator(])operator(,)
+ key<delimiter(")content(maximum_reached)delimiter(")>operator(:) reserved(null)operator(,)
+ key<delimiter(")content(constraints)delimiter(")>operator(:) operator({)
+ key<delimiter(")content(neighbourhood)delimiter(")>operator(:) reserved(null)operator(,)
+ key<delimiter(")content(attribute)delimiter(")>operator(:) reserved(null)operator(,)
+ key<delimiter(")content(maximum)delimiter(")>operator(:) reserved(null)operator(,)
+ key<delimiter(")content(element)delimiter(")>operator(:) operator([)
+ string<delimiter(")content(Elements::Merchandise)delimiter(")>
+ operator(])operator(,)
+ key<delimiter(")content(list)delimiter(")>operator(:) reserved(null)operator(,)
+ key<delimiter(")content(follow)delimiter(")>operator(:) string<delimiter(")content(Article)delimiter(")>
+ operator(})operator(,)
+ key<delimiter(")content(essential_attributes)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Menge)delimiter(")>operator(,)
+ key<delimiter(")content(default)delimiter(")>operator(:) integer(1)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) string<delimiter(")content(Amount)delimiter(")>
+ operator(})
+ operator(])operator(,)
+ key<delimiter(")content(mandatory)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(confirm)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(attributes)char(\\/)content(5223)delimiter(")>operator(,)
+ key<delimiter(")content(value)delimiter(")>operator(:) operator({)
+ key<delimiter(")content(elements)delimiter(")>operator(:) operator([)
+ operator({)
+ key<delimiter(")content(color)delimiter(")>operator(:) reserved(null)operator(,)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(Elements::Merchandise)delimiter(")>operator(,)
+ key<delimiter(")content(has_predecessors)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(successors)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements)char(\\/)content(627)char(\\/)content(successors)delimiter(")>operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements)char(\\/)content(627)delimiter(")>operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(8 x <div class=)char(\\")content(thumbnail)char(\\")content(><img src=)char(\\")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(files)char(\\/)content(875)char(\\/)content(thumbnail?attribute_id=5001)char(\\")content( )char(\\/)content(><)char(\\/)content(div>#005 Stressball)delimiter(")>operator(,)
+ key<delimiter(")content(attributes)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements)char(\\/)content(627)char(\\/)content(attributes)delimiter(")>operator(,)
+ key<delimiter(")content(link_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(inbound_references)char(\\/)content(458)delimiter(")>operator(,)
+ key<delimiter(")content(state)delimiter(")>operator(:) reserved(null)operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(list)delimiter(")>operator(:) string<delimiter(")content(Lists::OrderItems)delimiter(")>operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) integer(627)operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(family)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements)char(\\/)content(627)char(\\/)content(family)delimiter(")>
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(color)delimiter(")>operator(:) reserved(null)operator(,)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(Elements::Merchandise)delimiter(")>operator(,)
+ key<delimiter(")content(has_predecessors)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(successors)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements)char(\\/)content(628)char(\\/)content(successors)delimiter(")>operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements)char(\\/)content(628)delimiter(")>operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(3 x <div class=)char(\\")content(thumbnail)char(\\")content(><img src=)char(\\")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(files)char(\\/)content(881)char(\\/)content(thumbnail?attribute_id=5091)char(\\")content( )char(\\/)content(><)char(\\/)content(div>#011 Post-It Block)delimiter(")>operator(,)
+ key<delimiter(")content(attributes)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements)char(\\/)content(628)char(\\/)content(attributes)delimiter(")>operator(,)
+ key<delimiter(")content(link_url)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(inbound_references)char(\\/)content(459)delimiter(")>operator(,)
+ key<delimiter(")content(state)delimiter(")>operator(:) reserved(null)operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(list)delimiter(")>operator(:) string<delimiter(")content(Lists::OrderItems)delimiter(")>operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) integer(628)operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(family)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(elements)char(\\/)content(628)char(\\/)content(family)delimiter(")>
+ operator(})
+ operator(])
+ operator(})operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Bestellpositionen)delimiter(")>operator(,)
+ key<delimiter(")content(candidates_uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(attributes)char(\\/)content(5223)char(\\/)content(candidates)delimiter(")>operator(,)
+ key<delimiter(")content(create_reference_uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(inbound_references)delimiter(")>operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) integer(5223)operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(true)
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(float)delimiter(")>operator(,)
+ key<delimiter(")content(mandatory)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(confirm)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(attributes)char(\\/)content(5224)delimiter(")>operator(,)
+ key<delimiter(")content(value)delimiter(")>operator(:) string<delimiter(")content(12,10)delimiter(")>operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Summe)delimiter(")>operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) integer(5224)operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(false)
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(document)delimiter(")>operator(,)
+ key<delimiter(")content(files)delimiter(")>operator(:) operator([)
+ operator(])operator(,)
+ key<delimiter(")content(mandatory)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(confirm)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(attributes)char(\\/)content(5225)delimiter(")>operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Bestellschein)delimiter(")>operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) integer(5225)operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(false)
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(type)delimiter(")>operator(:) string<delimiter(")content(document)delimiter(")>operator(,)
+ key<delimiter(")content(files)delimiter(")>operator(:) operator([)
+ operator(])operator(,)
+ key<delimiter(")content(mandatory)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(confirm)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(uri)delimiter(")>operator(:) string<delimiter(")content(http:)char(\\/)char(\\/)content(localhost:3000)char(\\/)content(attributes)char(\\/)content(5226)delimiter(")>operator(,)
+ key<delimiter(")content(name)delimiter(")>operator(:) string<delimiter(")content(Empf)char(\\u00e4)content(ngernachweis)delimiter(")>operator(,)
+ key<delimiter(")content(readable)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(id)delimiter(")>operator(:) integer(5226)operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(false)
+ operator(})
+ operator(])operator(,)
+ key<delimiter(")content(writable)delimiter(")>operator(:) reserved(true)
+operator(}) \ No newline at end of file
diff --git a/test/scanners/json/big2.in.json b/test/scanners/json/big2.in.json
new file mode 100644
index 0000000..3a81cd7
--- /dev/null
+++ b/test/scanners/json/big2.in.json
@@ -0,0 +1,267 @@
+{
+ "url": "http:\/\/localhost:3000\/elements\/633\/attributes",
+ "name": "Bestellung: 3 <strong>Clovis Schwenger<\/strong> (\u20ac 12.10, 2008-10-08)",
+ "attributes": [
+ {
+ "color": "red",
+ "type": "state",
+ "uri": "http:\/\/localhost:3000\/elements\/633\/state",
+ "options": [
+ {
+ "color": "red",
+ "name": "neu",
+ "id": "new"
+ },
+ {
+ "color": "orange",
+ "name": "abgeschlossen",
+ "id": "closed"
+ },
+ {
+ "color": "green",
+ "name": "freigegeben",
+ "id": "approved"
+ },
+ {
+ "color": "",
+ "name": "verschickt",
+ "id": "shipped"
+ }
+ ],
+ "name": "Zustand",
+ "value": "new",
+ "readable": true,
+ "journals": [
+ {
+ "user": "CS",
+ "timestamp": "17:05 10\/07\/08",
+ "created": true
+ }
+ ],
+ "writable": false
+ },
+ {
+ "type": "boolean",
+ "mandatory": false,
+ "confirm": true,
+ "uri": "http:\/\/localhost:3000\/attributes\/5217",
+ "value": false,
+ "name": "abgeschlossen",
+ "readable": true,
+ "id": 5217,
+ "writable": true
+ },
+ {
+ "type": "boolean",
+ "mandatory": false,
+ "confirm": true,
+ "uri": "http:\/\/localhost:3000\/attributes\/5218",
+ "value": false,
+ "name": "freigegeben",
+ "readable": true,
+ "id": 5218,
+ "writable": false
+ },
+ {
+ "type": "boolean",
+ "mandatory": false,
+ "confirm": true,
+ "uri": "http:\/\/localhost:3000\/attributes\/5219",
+ "value": false,
+ "name": "verschickt",
+ "readable": true,
+ "id": 5219,
+ "writable": false
+ },
+ {
+ "type": "date",
+ "mandatory": true,
+ "confirm": false,
+ "uri": "http:\/\/localhost:3000\/attributes\/5220",
+ "value": "2008-10-08",
+ "name": "Bestelldatum",
+ "readable": true,
+ "id": 5220,
+ "writable": false
+ },
+ {
+ "type": "references",
+ "create_options": [
+ {
+ "create_element_url": "http:\/\/localhost:3000\/elements?list=Lists%3A%3AEmployees&source_id=5221&type=Elements%3A%3APerson",
+ "essential_attributes": [
+ ],
+ "names": {
+ "type": "Person",
+ "list": "Mitarbeiter"
+ },
+ "ask_for_email": true
+ }
+ ],
+ "maximum_reached": true,
+ "constraints": {
+ "neighbourhood": null,
+ "attribute": null,
+ "maximum": 1,
+ "element": [
+ "Elements::Person"
+ ],
+ "list": null,
+ "follow": null
+ },
+ "essential_attributes": [
+ ],
+ "mandatory": false,
+ "confirm": false,
+ "uri": "http:\/\/localhost:3000\/attributes\/5221",
+ "value": {
+ "elements": [
+ {
+ "color": null,
+ "type": "Elements::Person",
+ "has_predecessors": false,
+ "successors": "http:\/\/localhost:3000\/elements\/582\/successors",
+ "uri": "http:\/\/localhost:3000\/elements\/582",
+ "name": "Clovis Schwenger",
+ "attributes": "http:\/\/localhost:3000\/elements\/582\/attributes",
+ "link_url": "http:\/\/localhost:3000\/inbound_references\/457",
+ "state": null,
+ "readable": true,
+ "list": "Lists::Employees",
+ "id": 582,
+ "writable": true,
+ "family": "http:\/\/localhost:3000\/elements\/582\/family"
+ }
+ ]
+ },
+ "name": "bestellt von",
+ "candidates_uri": "http:\/\/localhost:3000\/attributes\/5221\/candidates",
+ "create_reference_uri": "http:\/\/localhost:3000\/inbound_references",
+ "readable": true,
+ "id": 5221,
+ "writable": false
+ },
+ {
+ "type": "text",
+ "mandatory": false,
+ "confirm": false,
+ "uri": "http:\/\/localhost:3000\/attributes\/5222",
+ "value": {
+ "language": null,
+ "version": 0,
+ "text": ""
+ },
+ "name": "Verwendungszweck",
+ "multiline": true,
+ "readable": true,
+ "id": 5222,
+ "languages": [
+ ],
+ "writable": true
+ },
+ {
+ "type": "references",
+ "create_options": [
+ ],
+ "maximum_reached": null,
+ "constraints": {
+ "neighbourhood": null,
+ "attribute": null,
+ "maximum": null,
+ "element": [
+ "Elements::Merchandise"
+ ],
+ "list": null,
+ "follow": "Article"
+ },
+ "essential_attributes": [
+ {
+ "name": "Menge",
+ "default": 1,
+ "id": "Amount"
+ }
+ ],
+ "mandatory": true,
+ "confirm": false,
+ "uri": "http:\/\/localhost:3000\/attributes\/5223",
+ "value": {
+ "elements": [
+ {
+ "color": null,
+ "type": "Elements::Merchandise",
+ "has_predecessors": true,
+ "successors": "http:\/\/localhost:3000\/elements\/627\/successors",
+ "uri": "http:\/\/localhost:3000\/elements\/627",
+ "name": "8 x <div class=\"thumbnail\"><img src=\"http:\/\/localhost:3000\/files\/875\/thumbnail?attribute_id=5001\" \/><\/div>#005 Stressball",
+ "attributes": "http:\/\/localhost:3000\/elements\/627\/attributes",
+ "link_url": "http:\/\/localhost:3000\/inbound_references\/458",
+ "state": null,
+ "readable": true,
+ "list": "Lists::OrderItems",
+ "id": 627,
+ "writable": true,
+ "family": "http:\/\/localhost:3000\/elements\/627\/family"
+ },
+ {
+ "color": null,
+ "type": "Elements::Merchandise",
+ "has_predecessors": true,
+ "successors": "http:\/\/localhost:3000\/elements\/628\/successors",
+ "uri": "http:\/\/localhost:3000\/elements\/628",
+ "name": "3 x <div class=\"thumbnail\"><img src=\"http:\/\/localhost:3000\/files\/881\/thumbnail?attribute_id=5091\" \/><\/div>#011 Post-It Block",
+ "attributes": "http:\/\/localhost:3000\/elements\/628\/attributes",
+ "link_url": "http:\/\/localhost:3000\/inbound_references\/459",
+ "state": null,
+ "readable": true,
+ "list": "Lists::OrderItems",
+ "id": 628,
+ "writable": true,
+ "family": "http:\/\/localhost:3000\/elements\/628\/family"
+ }
+ ]
+ },
+ "name": "Bestellpositionen",
+ "candidates_uri": "http:\/\/localhost:3000\/attributes\/5223\/candidates",
+ "create_reference_uri": "http:\/\/localhost:3000\/inbound_references",
+ "readable": true,
+ "id": 5223,
+ "writable": true
+ },
+ {
+ "type": "float",
+ "mandatory": false,
+ "confirm": false,
+ "uri": "http:\/\/localhost:3000\/attributes\/5224",
+ "value": "12,10",
+ "name": "Summe",
+ "readable": true,
+ "id": 5224,
+ "writable": false
+ },
+ {
+ "type": "document",
+ "files": [
+ ],
+ "mandatory": false,
+ "confirm": false,
+ "uri": "http:\/\/localhost:3000\/attributes\/5225",
+ "name": "Bestellschein",
+ "readable": true,
+ "id": 5225,
+ "writable": false
+ },
+ {
+ "type": "document",
+ "files": [
+ ],
+ "mandatory": false,
+ "confirm": false,
+ "uri": "http:\/\/localhost:3000\/attributes\/5226",
+ "name": "Empf\u00e4ngernachweis",
+ "readable": true,
+ "id": 5226,
+ "writable": false
+ }
+ ],
+ "writable": true
+} \ No newline at end of file
diff --git a/test/scanners/json/example.expected.raydebug b/test/scanners/json/example.expected.raydebug
new file mode 100644
index 0000000..20a1560
--- /dev/null
+++ b/test/scanners/json/example.expected.raydebug
@@ -0,0 +1,22 @@
+operator([)
+ operator({)
+ key<delimiter(")content(precision)delimiter(")>operator(:) string<delimiter(")content(zip)delimiter(")>operator(,)
+ key<delimiter(")content(Latitude)delimiter(")>operator(:) float(37.7668)operator(,)
+ key<delimiter(")content(Longitude)delimiter(")>operator(:) float(-122.3959)operator(,)
+ key<delimiter(")content(Address)delimiter(")>operator(:) string<delimiter(")delimiter(")>operator(,)
+ key<delimiter(")content(City)delimiter(")>operator(:) string<delimiter(")content(SAN FRANCISCO)delimiter(")>operator(,)
+ key<delimiter(")content(State)delimiter(")>operator(:) string<delimiter(")content(CA)delimiter(")>operator(,)
+ key<delimiter(")content(Zip)delimiter(")>operator(:) string<delimiter(")content(94107)delimiter(")>operator(,)
+ key<delimiter(")content(Country)delimiter(")>operator(:) string<delimiter(")content(US)delimiter(")>
+ operator(})operator(,)
+ operator({)
+ key<delimiter(")content(precision)delimiter(")>operator(:) string<delimiter(")content(zip)delimiter(")>operator(,)
+ key<delimiter(")content(Latitude)delimiter(")>operator(:) float(37.371991)operator(,)
+ key<delimiter(")content(Longitude)delimiter(")>operator(:) float(-122.026020)operator(,)
+ key<delimiter(")content(Address)delimiter(")>operator(:) string<delimiter(")delimiter(")>operator(,)
+ key<delimiter(")content(City)delimiter(")>operator(:) string<delimiter(")content(SUNNYVALE)delimiter(")>operator(,)
+ key<delimiter(")content(State)delimiter(")>operator(:) string<delimiter(")content(CA)delimiter(")>operator(,)
+ key<delimiter(")content(Zip)delimiter(")>operator(:) string<delimiter(")content(94085)delimiter(")>operator(,)
+ key<delimiter(")content(Country)delimiter(")>operator(:) string<delimiter(")content(US)delimiter(")>
+ operator(})
+operator(])
diff --git a/test/scanners/json/example.in.json b/test/scanners/json/example.in.json
new file mode 100644
index 0000000..2a0cb68
--- /dev/null
+++ b/test/scanners/json/example.in.json
@@ -0,0 +1,22 @@
+[
+ {
+ "precision": "zip",
+ "Latitude": 37.7668,
+ "Longitude": -122.3959,
+ "Address": "",
+ "City": "SAN FRANCISCO",
+ "State": "CA",
+ "Zip": "94107",
+ "Country": "US"
+ },
+ {
+ "precision": "zip",
+ "Latitude": 37.371991,
+ "Longitude": -122.026020,
+ "Address": "",
+ "City": "SUNNYVALE",
+ "State": "CA",
+ "Zip": "94085",
+ "Country": "US"
+ }
+]
diff --git a/test/scanners/json/json-lib.expected.raydebug b/test/scanners/json/json-lib.expected.raydebug
new file mode 100644
index 0000000..cb2b188
--- /dev/null
+++ b/test/scanners/json/json-lib.expected.raydebug
@@ -0,0 +1,73 @@
+operator([)
+ string<delimiter(")content(JSON Test Pattern pass1)delimiter(")>operator(,)
+ operator({)key<delimiter(")content(object with 1 member)delimiter(")>operator(:)operator([)string<delimiter(")content(array with 1 element)delimiter(")>operator(])operator(})operator(,)
+ operator({)operator(})operator(,)
+ operator([)operator(])operator(,)
+ integer(-42)operator(,)
+ reserved(true)operator(,)
+ reserved(false)operator(,)
+ reserved(null)operator(,)
+ operator({)
+ key<delimiter(")content(integer)delimiter(")>operator(:) integer(1234567890)operator(,)
+ key<delimiter(")content(real)delimiter(")>operator(:) float(-9876.543210)operator(,)
+ key<delimiter(")content(e)delimiter(")>operator(:) float(0.123456789e-12)operator(,)
+ key<delimiter(")content(E)delimiter(")>operator(:) float(1.234567890E+34)operator(,)
+ key<delimiter(")delimiter(")>operator(:) float(23456789012E666)operator(,)
+ key<delimiter(")content(zero)delimiter(")>operator(:) integer(0)operator(,)
+ key<delimiter(")content(one)delimiter(")>operator(:) integer(1)operator(,)
+ key<delimiter(")content(space)delimiter(")>operator(:) string<delimiter(")content( )delimiter(")>operator(,)
+ key<delimiter(")content(quote)delimiter(")>operator(:) string<delimiter(")char(\\")delimiter(")>operator(,)
+ key<delimiter(")content(backslash)delimiter(")>operator(:) string<delimiter(")char(\\\\)delimiter(")>operator(,)
+ key<delimiter(")content(controls)delimiter(")>operator(:) string<delimiter(")char(\\b)char(\\f)char(\\n)char(\\r)char(\\t)delimiter(")>operator(,)
+ key<delimiter(")content(slash)delimiter(")>operator(:) string<delimiter(")content(/ & )char(\\/)delimiter(")>operator(,)
+ key<delimiter(")content(alpha)delimiter(")>operator(:) string<delimiter(")content(abcdefghijklmnopqrstuvwyz)delimiter(")>operator(,)
+ key<delimiter(")content(ALPHA)delimiter(")>operator(:) string<delimiter(")content(ABCDEFGHIJKLMNOPQRSTUVWYZ)delimiter(")>operator(,)
+ key<delimiter(")content(digit)delimiter(")>operator(:) string<delimiter(")content(0123456789)delimiter(")>operator(,)
+ key<delimiter(")content(special)delimiter(")>operator(:) string<delimiter(")content(`1~!@#$%^&*(\)_+-={':[,]}|;.</>?)delimiter(")>operator(,)
+ key<delimiter(")content(hex)delimiter(")>operator(:) string<delimiter(")char(\\u0123)char(\\u4567)char(\\u89AB)char(\\uCDEF)char(\\uabcd)char(\\uef4A)delimiter(")>operator(,)
+ key<delimiter(")content(true)delimiter(")>operator(:) reserved(true)operator(,)
+ key<delimiter(")content(false)delimiter(")>operator(:) reserved(false)operator(,)
+ key<delimiter(")content(null)delimiter(")>operator(:) reserved(null)operator(,)
+ key<delimiter(")content(array)delimiter(")>operator(:)operator([) operator(])operator(,)
+ key<delimiter(")content(object)delimiter(")>operator(:)operator({) operator(})operator(,)
+ key<delimiter(")content(address)delimiter(")>operator(:) string<delimiter(")content(50 St. James Street)delimiter(")>operator(,)
+ key<delimiter(")content(url)delimiter(")>operator(:) string<delimiter(")content(http://www.JSON.org/)delimiter(")>operator(,)
+ key<delimiter(")content(comment)delimiter(")>operator(:) string<delimiter(")content(// /* <!-- --)delimiter(")>operator(,)
+ key<delimiter(")content(# -- --> */)delimiter(")>operator(:) string<delimiter(")content( )delimiter(")>operator(,)
+ key<delimiter(")content( s p a c e d )delimiter(")> operator(:)operator([)integer(1)operator(,)integer(2) operator(,) integer(3)
+
+operator(,)
+
+integer(4) operator(,) integer(5) operator(,) integer(6) operator(,)integer(7) operator(])operator(,)
+ key<delimiter(")content(compact)delimiter(")>operator(:) operator([)integer(1)operator(,)integer(2)operator(,)integer(3)operator(,)integer(4)operator(,)integer(5)operator(,)integer(6)operator(,)integer(7)operator(])operator(,)
+ key<delimiter(")content(jsontext)delimiter(")>operator(:) string<delimiter(")content({)char(\\")content(object with 1 member)char(\\")content(:[)char(\\")content(array with 1 element)char(\\")content(]})delimiter(")>operator(,)
+ key<delimiter(")content(quotes)delimiter(")>operator(:) string<delimiter(")content(&#34; )char(\\u0022)content( %22 0x22 034 &#x22;)delimiter(")>operator(,)
+ key<delimiter(")char(\\/)char(\\\\)char(\\")char(\\uCAFE)char(\\uBABE)char(\\uAB98)char(\\uFCDE)char(\\ubcda)char(\\uef4A)char(\\b)char(\\f)char(\\n)char(\\r)char(\\t)content(`1~!@#$%^&*(\)_+-=[]{}|;:',./<>?)delimiter(")>
+operator(:) string<delimiter(")content(A key can be any string)delimiter(")>
+ operator(})operator(,)
+ float(0.5) operator(,)float(98.6)
+operator(,)
+float(99.44)
+operator(,)
+
+integer(1066)
+
+
+operator(,)string<delimiter(")content(rosebud)delimiter(")>operator(])
+
+operator([)string<delimiter(")content(Illegal backslash escape: )content(\\x)content(15)delimiter(")>operator(])
+
+operator([)string<delimiter(")content(Illegal backslash escape: )content(\\')delimiter(")>operator(])
+
+operator([)string<delimiter(")content(Illegal backslash escape: )content(\\0)content(17)delimiter(")>operator(])
+
+operator([)operator([)operator([)operator([)operator([)operator([)operator([)operator([)operator([)operator([)operator([)operator([)operator([)operator([)operator([)operator([)operator([)operator([)operator([)string<delimiter(")content(Not too deep)delimiter(")>operator(])operator(])operator(])operator(])operator(])operator(])operator(])operator(])operator(])operator(])operator(])operator(])operator(])operator(])operator(])operator(])operator(])operator(])operator(])
+
+operator([)string<delimiter(")content(tab)content(\\ )content( character)content(\\ )content( in)content(\\ )content( string)content(\\ )content( )delimiter(")>operator(])
+
+operator({)
+ key<delimiter(")content(JSON Test Pattern pass3)delimiter(")>operator(:) operator({)
+ key<delimiter(")content(The outermost value)delimiter(")>operator(:) string<delimiter(")content(must be an object or array.)delimiter(")>operator(,)
+ key<delimiter(")content(In this test)delimiter(")>operator(:) string<delimiter(")content(It is an object.)delimiter(")>
+ operator(})
+operator(})
diff --git a/test/scanners/json/json-lib.in.json b/test/scanners/json/json-lib.in.json
new file mode 100644
index 0000000..b007f5a
--- /dev/null
+++ b/test/scanners/json/json-lib.in.json
@@ -0,0 +1,73 @@
+[
+ "JSON Test Pattern pass1",
+ {"object with 1 member":["array with 1 element"]},
+ {},
+ [],
+ -42,
+ true,
+ false,
+ null,
+ {
+ "integer": 1234567890,
+ "real": -9876.543210,
+ "e": 0.123456789e-12,
+ "E": 1.234567890E+34,
+ "": 23456789012E666,
+ "zero": 0,
+ "one": 1,
+ "space": " ",
+ "quote": "\"",
+ "backslash": "\\",
+ "controls": "\b\f\n\r\t",
+ "slash": "/ & \/",
+ "alpha": "abcdefghijklmnopqrstuvwyz",
+ "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",
+ "digit": "0123456789",
+ "special": "`1~!@#$%^&*()_+-={':[,]}|;.</>?",
+ "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",
+ "true": true,
+ "false": false,
+ "null": null,
+ "array":[ ],
+ "object":{ },
+ "address": "50 St. James Street",
+ "url": "http://www.JSON.org/",
+ "comment": "// /* <!-- --",
+ "# -- --> */": " ",
+ " s p a c e d " :[1,2 , 3
+
+,
+
+4 , 5 , 6 ,7 ],
+ "compact": [1,2,3,4,5,6,7],
+ "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}",
+ "quotes": "&#34; \u0022 %22 0x22 034 &#x22;",
+ "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"
+: "A key can be any string"
+ },
+ 0.5 ,98.6
+,
+99.44
+,
+
+1066
+
+
+,"rosebud"]
+
+["Illegal backslash escape: \x15"]
+
+["Illegal backslash escape: \'"]
+
+["Illegal backslash escape: \017"]
+
+[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]]
+
+["tab\ character\ in\ string\ "]
+
+{
+ "JSON Test Pattern pass3": {
+ "The outermost value": "must be an object or array.",
+ "In this test": "It is an object."
+ }
+}
diff --git a/test/scanners/json/suite.rb b/test/scanners/json/suite.rb
new file mode 100644
index 0000000..3497d34
--- /dev/null
+++ b/test/scanners/json/suite.rb
@@ -0,0 +1,2 @@
+class JSON < CodeRay::TestCase
+end