-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
toBeMultiLineStringGeometry #12
Comments
M-Scott-Lassiter
added
the
new matcher proposal
Proposal for a new GeoJSON matcher
label
May 24, 2022
M-Scott-Lassiter
changed the title
[New Matcher]: toBeMultiLineStringGeometry
toBeMultiLineStringGeometry
May 24, 2022
M-Scott-Lassiter
added a commit
that referenced
this issue
May 28, 2022
Verifies an object is a valid GeoJSON MultiLineString Geometry. Fixes some API typos in lineStringGeometry and multiPointGeometry. Resolves: #12
github-actions bot
pushed a commit
that referenced
this issue
May 28, 2022
## [1.0.0-beta.9](v1.0.0-beta.8...v1.0.0-beta.9) (2022-05-28) ### 🎯 Test Changes * **toBeLineStringGeometry:** add a stress test with many points ([22df5c7](22df5c7)) ### 🐞 Bug Fixes * **toBeLineStringGeometry:** prohibit single coordinate in "coordinates" member ([ee5de52](ee5de52)), closes [/datatracker.ietf.org/doc/html/rfc7946#section-3](https://github.com/M-Scott-Lassiter//datatracker.ietf.org/doc/html/rfc7946/issues/section-3) [#11](#11) ### 🎁 Feature Changes * **toBeMultiLineStringGeometry:** add new matcher ([3d3a15e](3d3a15e)), closes [#12](#12)
🎉 This issue has been resolved in version 1.0.0-beta.9 🎉 The release is available on: Your semantic-release bot 📦🚀 |
M-Scott-Lassiter
added
released on @beta
matchers/geometries
and removed
new matcher proposal
Proposal for a new GeoJSON matcher
labels
May 28, 2022
This was referenced May 30, 2022
Closed
Reopening to add coverage to validate optional bounding boxes. |
M-Scott-Lassiter
added a commit
that referenced
this issue
Jun 1, 2022
…d matchers The spec for [bounding boxes](https://datatracker.ietf.org/doc/html/rfc7946#section-5) permits GeoJSON objects to have bounding boxes. Section 3 of the spec states "A GeoJSON object represents a Geometry, Feature, or collection of Features." Therefore, the geometry objects should all have allowed bounding boxes. Thus, they all need to check that if that property is present that it is in fact a valid 2D or 3D bbox. Resolves: #9, #10, #11, #12, #13, #14, #16, #29
github-actions bot
pushed a commit
that referenced
this issue
Jun 1, 2022
## [1.0.0-beta.14](v1.0.0-beta.13...v1.0.0-beta.14) (2022-06-01) ### 🐞 Bug Fixes * add bounding box validity checking to geometry core functions and matchers ([ac6a9a1](ac6a9a1)), closes [/datatracker.ietf.org/doc/html/rfc7946#section-5](https://github.com/M-Scott-Lassiter//datatracker.ietf.org/doc/html/rfc7946/issues/section-5) [#9](#9) [#10](#10) [#11](#11) [#12](#12) [#13](#13) [#14](#14) [#16](#16) [#29](#29)
🎉 This issue has been resolved in version 1.0.0-beta.14 🎉 The release is available on: Your semantic-release bot 📦🚀 |
github-actions bot
pushed a commit
that referenced
this issue
Jun 2, 2022
## 1.0.0 (2022-06-02) ### 🧭 API Documentation Changes * **toBeMultiLineStringGeometry:** add the min point count error to the JSDoc API ([01f6c4b](01f6c4b)) * change JSDoc param types to avoid using GeoJSON unknown types ([06ac03a](06ac03a)) * **all:** cleanup JSDoc formatting and standardize API examples ([300a96d](300a96d)) * update JSDoc descriptions of coordinate core functions ([f5658f3](f5658f3)) * update JSDoc organization ([7ab7eca](7ab7eca)) * **isValidCoordinate:** update returns description ([70bd43e](70bd43e)) * **isValidCoordinate:** update the error and parameter descriptions ([7e3e8ed](7e3e8ed)) ### 🐞 Bug Fixes * add bounding box validity checking to geometry core functions and matchers ([ac6a9a1](ac6a9a1)), closes [/datatracker.ietf.org/doc/html/rfc7946#section-5](https://github.com/M-Scott-Lassiter//datatracker.ietf.org/doc/html/rfc7946/issues/section-5) [#9](#9) [#10](#10) [#11](#11) [#12](#12) [#13](#13) [#14](#14) [#16](#16) [#29](#29) * **toBeLineStringGeometry:** prohibit single coordinate in "coordinates" member ([ee5de52](ee5de52)), closes [/datatracker.ietf.org/doc/html/rfc7946#section-3](https://github.com/M-Scott-Lassiter//datatracker.ietf.org/doc/html/rfc7946/issues/section-3) [#11](#11) ### 🎯 Test Changes * add 'Feature' and 'FeatureCollection' to test list of disallowed geometry type values ([f139a09](f139a09)) * **toBeLineStringGeometry:** add a stress test with many points ([22df5c7](22df5c7)) * **toBeGeometryCollection:** add an unrecognizable geometry to the invalid tests ([5c041c6](5c041c6)) * **toBeGeometryCollection:** add robust snapshot tests, verify coordinates treated as foreign member ([472d12d](472d12d)), closes [#32](#32) [#33](#33) * **isValid2DBoundingBox:** add robust snapshot tests ([4363710](4363710)), closes [#32](#32) * **isValid2DCoordinate:** add robust snapshot tests ([ae92f67](ae92f67)), closes [#32](#32) * **isValid3DBoundingBox:** add robust snapshot tests ([a37ec48](a37ec48)), closes [#32](#32) * **isValid3DCoordinate:** add robust snapshot tests ([56fbf92](56fbf92)), closes [#32](#32) * **isValidBoundingBox:** add robust snapshot tests ([063b94e](063b94e)), closes [#32](#32) * **isValidCoordinate:** add robust snapshot tests ([7b4a804](7b4a804)), closes [#32](#32) * **toBeAnyGeometry:** add robust snapshot tests ([8a6e611](8a6e611)), closes [#32](#32) * **toBeLineStringGeometry:** add robust snapshot tests ([cfaed46](cfaed46)), closes [#32](#32) * **toBeMultiLineStringGeometry:** add robust snapshot tests ([57dc767](57dc767)), closes [#32](#32) * **toBeMultiPointGeometry:** add robust snapshot tests ([36013e1](36013e1)), closes [#32](#32) * **toBeMultiPolygonGeometry:** add robust snapshot tests ([df1c23a](df1c23a)), closes [#32](#32) * **toBePointGeometry:** add robust snapshot tests ([fd5c516](fd5c516)), closes [#32](#32) * **toBePolygonGeometry:** add robust snapshot tests ([1c9df69](1c9df69)), closes [#32](#32) * **toBeMultiLineStringGeometry:** fix coordinate out of range test that ([d6fe2ac](d6fe2ac)) * **toBeMultiPointGeometry:** fix typo in test and core function that was omitting coverage ([bc10f4e](bc10f4e)) * **isValid2DBoundingBox:** fix typo in test descriptions ([df94c27](df94c27)) * setup the project testing framework ([6a95c37](6a95c37)) ### 🎁 Feature Changes * **isValid2DBoundingBox:** add new matcher function ([7fe56f3](7fe56f3)), closes [#6](#6) * **isValid2DCoordinate:** add new matcher function ([527bbc4](527bbc4)), closes [#1](#1) * **isValid3DCoordinate:** add new matcher function ([0329231](0329231)), closes [#2](#2) * **isValidCoordinate:** add new matcher function ([d7e5b70](d7e5b70)), closes [#4](#4) * **isValid3DBoundingBox:** add new matcher ([6ee8cc6](6ee8cc6)), closes [#7](#7) * **isValidBoundingBox:** add new matcher ([9a8b7ed](9a8b7ed)), closes [#8](#8) * **toBeAnyGeometry:** add new matcher ([ed7c3eb](ed7c3eb)), closes [#15](#15) * **toBeFeature:** add new matcher ([551aa7f](551aa7f)), closes [#32](#32) [#24](#24) * **toBeFeatureCollection:** add new matcher ([21fe044](21fe044)), closes [#25](#25) * **toBeGeometryCollection:** add new matcher ([63cc919](63cc919)), closes [#16](#16) * **toBeLineStringGeometry:** add new matcher ([54416a5](54416a5)), closes [#11](#11) * **toBeMultiLineStringGeometry:** add new matcher ([3d3a15e](3d3a15e)), closes [#12](#12) * **toBeMultiPointGeometry:** add new matcher ([9a12752](9a12752)), closes [#10](#10) * **toBeMultiPolygonGeometry:** add new matcher ([41fef3a](41fef3a)), closes [#14](#14) * **toBePointGeometry:** add new matcher ([9973afa](9973afa)), closes [#9](#9) * **toBePolygonGeometry:** add new matcher ([3b9d18d](3b9d18d)), closes [#13](#13) * split package exports into matcher and core functionality ([a7340d9](a7340d9)), closes [#5](#5) ### 🏗️ Build Changes * add conventional-changelog-conventionalcommits as dev dependency ([7361d79](7361d79)), closes [#3](#3) * **package:** add entry points for all, boundingboxes, and coordinates ([8c1d312](8c1d312)) * move release configuration into a separate shareable file ([fa6e50d](fa6e50d)) * **package:** rename matcher loader entry script ([5221d6d](5221d6d)) * setup initial project environment ([b468a41](b468a41)) * **package:** update the commitizen config for customized scopes ([ac05626](ac05626)) * **devDependencies:** upgrade Jest to v28.1, specify peerDependency at >v24.0.0 ([22d1614](22d1614)), closes [#30](#30) * **package:** upgrade min required Node version to 16 ([58a9824](58a9824)) * **package:** upgrade minimum required node version from 10 to 14 to match LTS schedule ([1e8a8bb](1e8a8bb))
🎉 This issue has been resolved in version 1.0.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Description
This is a building block matcher. Geometries are the basis of all objects, and we need a way to reliably test that they have been formatted appropriately.
This matcher focuses only on "MultiLineString". All coordinates must be valid coordinates per the WGS-84 standard. Any non-conforming values should fail. However, the "coordinates" property MAY have an empty array (
[ ]
) as a valid value. It MAY NOT have an array of empty arrays as a value ([ [ ], [ ] ]
).The geometry object should have a "type" and a "coordinates" property. It is prohibited from having a "geometry", "properties", or "features" property.
Although illogical, it is NOT PROHIBITED from having a "geometries" property, although if present it would be considered a foreign member.
Other foreign members ARE allowed (see https://datatracker.ietf.org/doc/html/rfc7946#section-6.1). None of these foreign members should get checked for validity of any type; they may contain anything that is valid JSON.
See GeoJSON Spec: What does it mean to extend GeoJSON without using a foreign member? for further clarification.
Bounding boxes, if present, must validate (see isValidBoundingBox).
Valid GeoJSON MultiLineString Examples
Multiple Points:
An empty coordinates
Contained as an object within a geometries array on a GeometryCollection:
In each case, the matcher should only get passed the object in its entirety, not the individual components, and not as part of another collection object.
Example Matcher Usage
Passing Tests
This matcher should use core functions to test coordinate validity. Either two or three digit coordinates are allowed.
Values in Range
2D:
[[[0, 1], [0, 2]], [[1, 0], [2, 0], [3, 0]]]
3D:
[[[2, 20, 0], [4, 10, 0]], [[3, 0.0, 0], [6, -10, 0], [9, -20, 0]]]
Mixed:
[[[100.0, 0.0], [90, 0.0, 0]], [[100.0, 0.0, 0], [110, 5], [100.0, 11.33, 259]]]
Single LineString:
[[[180.0, 40.0], [180.0, 50.0], [170.0, 50.0], [170.0, 40.0], [180.0, 40.0]]]
Antimeridian:
[[[175, 0], [-175, 0]], [[-175, 0], [175, 0]]]
Repeated and Redundant:
[[[0, 0], [0, 0], [0, 0]], [[0, 0], [0, 0], [0, 0]]]
Stressed: A 30 element array, each element being an array of 30 coordinates
Empty Coordinate
Foreign Properties Allowed
'Test 1'
,1
ID Normally needs to be a letter or number, but because it is a foreign member on a geometry object, the GeoJSON standard takes no consideration about it.
May Have Optional Bounding Box
[-10.0, -10.0, 10.0, 10.0]
[-10.0, -10.0, 0, 10.0, 10.0, 200]
Failing Tests
Geometry Input Not an Object
Any of the following inputs to the matcher should fail:
undefined
null
true
,false
200
,-200
,Infinity
,-Infinity
,NaN
[[[180, 10.2, -125]
,[-180, 90, 35000]]]
,[ ]
''
,'Random Geometry'
,'[0, 0]'
,'[[[0, 0], [0, 0]]]'
Invalid Coordinates
Coordinates Out of Range
This only tests a handful of invalid coordinates to verify behavior. Detailed coordinate validation occurs in
isValidCoordinate
Input:
[[[181, 0], [0, 1], [1, 1], [1, 0], [181, 0]]]
[[[0, 0], [0, 91], [1, 1], [1, 0], [0, 0]]]
[[[0, 0], [0, 1], [-181, 1], [1, 0], [0, 0]]]
[[[0, -181], [0, 1], [1, 1], [1, 0], [0, -181]]]
[[[0, 0, 0, 0]]]
Single Coordinates
Type Value Incorrect
Input:
'Point'
,'MultiPoint'
,'LineString'
,'Polygon'
,'MultiPolygon'
, and'GeometryCollection'
, or'MULTILINESTRING'
,'multilinestring'
Contains Prohibited Properties
Geometry
Properties
Features
Missing Required Properties
Coordinates is an Array of Null Arrays
Invalid Bounding Box
null
undefined
[]
[-10.0, -10.0, 10.0]
[-10.0, -10.0, 190.0, 10.0]
[-10.0, 10.0, 10.0, -10]
[-10.0, -10.0, 0, 10, 10.0, '200']
The text was updated successfully, but these errors were encountered: