This is based on [1] at b4a495e. It’s generated some questions, which
I’ve asked on that PR.
Note that the spec has been through a few revisions since I started
implementing this; I’ve tried to keep everything in sync but some older
stuff might still be accidentally there.
I’ve implemented most of the specified behaviour for the ATTACH, DETACH,
and RELEASE operations. I have not yet implemented RETRY since it’s
quite different to those three and I wanted to get eyes on this first
chunk of work; have created ably-labs#51 for implementing it.
Of the operations that I have implemented, I have not implemented the
following (this is accurately reflected by the @SPEC… tags in the
tests):
- Lifecycle behaviour that relates to another ongoing operation (created
ably-labs#52)
- Lifecycle behaviour relating to “transient disconnect timeouts”
(created ably-labs#48)
- Lifecycle behaviour that occurs “asynchronously” outside an operation
(created ably-labs#50)
- CHA-RL1g2, which refers to emitting “discontinuity events” which are a
concept not yet implemented; this will come in ably-labs#53.
The room lifecycle manager introduced by this commit is currently a
standalone object, which is not integrated with the rest of the SDK.
I’ve created ably-labs#47 for doing this integration work.
The @SPEC… tags are based on the on the JS rules [2] @ 8c9ce8b, but I
camel-cased them and also decided that:
- if a test doesn't relate to a spec point, it doesn't need any markers
- there should be a way to know that a spec point is tested across
multiple tests
- there should be a way of marking a spec point as implemented but not
tested (so that can show up differently in reporting; important given
that we’re also going to use this report as a to-do list of what still
needs to be implemented)
Part of ably-labs#28.
[1] ably/specification#200
[2] https://github.com/ably/ably-js/blob/main/CONTRIBUTING.md#tests-alignment-with-the-ably-features-specification