-
Notifications
You must be signed in to change notification settings - Fork 3.2k
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
Add range tests for blob #34384
Add range tests for blob #34384
Conversation
Current status:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for making these!
It would be nice to assert response.text()
in all of these as well.
Have you considered creating an array-of-objects structure that you then for each so you can share all the assert and test boilerplate code? That might also make it easier to spot additional cases that need testing.
@jakearchibald might also want to take a look.
c0ddb3e
to
eda2593
Compare
eda2593
to
3264919
Compare
"Range": "bytes=10-5" | ||
} | ||
}, | ||
]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is great! I suggest we add some more invalid cases here to cover more parts of the parser:
bytes=x
bytes 5-
5-
bytes=5-x
bytes=x-5
Other places we could add more coverage for is whitespace handling between the various tokens.
Let me know if you'd like some help. I can make some time to push a few tests.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Other places we could add more coverage for is whitespace handling between the various tokens.
RFC 7233 doesn't seem to indicate a position on whitespace. Is this specified somewhere?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It does although in a convoluted way. See https://httpwg.org/specs/rfc7233.html#rfc.section.1.2 and https://httpwg.org/specs/rfc7233.html#collected.abnf for "normal" ABNF. It seems it allows whitespace in only a few places.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It seems I was wrong here, but I think we should still test cases like:
bytes=5 - 10
bytes= - \t5
They should probably fail given the RFC, but it seems like implementations are already not following the RFC for whitespace after bytes=
so who knows.
Perhaps this is also a thing we can still tighten however.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Based on some recent tests WebKit and Blink do seem to allow range specifications with whitespace like this...
3264919
to
741341f
Compare
741341f
to
41a39aa
Compare
41a39aa
to
a8f2e36
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks great.
Optional: add a test whereby the end is greater than the length (e.g., it's 100000) and test that it is clipped to the length.
Nit: (const
) variables can just be called supportedBlobRange
or some such, no need for all caps. Essentially think of const
as variables that are not reassigned, not literally constants.
a8f2e36
to
0a96c21
Compare
0a96c21
to
7fd647b
Compare
Add basic tests for a blob range request.
Related To: whatwg/fetch#1070