# @exodus/networking-spec

This repository contains test suites for networking related features such as form data, URL parsing, HTTP requests,
and more.

## Implementations

| Platform                                                                                         | Description                                                                                                                      |
| ------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------- |
| [Browser](https://github.com/ExodusMovement/exodus-hydra/tree/master/modules/networking-browser) | Implements the spec for browser contexts. Tests are executed with karma in a real browser.                                       |
| [Node](https://github.com/ExodusMovement/exodus-hydra/tree/master/modules/networking-node)       | Implements the spec for node contexts. Tests are executed with Jest in a node environment.                                       |
| [Mobile](https://github.com/ExodusMovement/exodus-hydra/tree/master/modules/networking-mobile)   | Implements the spec for React Native contexts. Tests are executed with Jest using the React Native preset in a node environment. |

## Developing

### Form

Import the testsuite from `@exodus/networking-spec/form` and invoke it with your
FormData implementation.

```ts
import { testsuite } from '@exodus/networking-spec/form'

testsuite(() => new MyFormDataImplementation())
```

### Http

Import the testsuite from `@exodus/networking-spec/http` and invoke it with your
HttpClient implementation and a mock adapter that exposes received requests in a
uniform way and a method to define how a request is responded to.

### Cookie

Import the testsuite from `@exodus/networking-spec/cookie` and invoke it with your
CookieJar implementation.

```ts
import { testsuite } from '@exodus/networking-spec/cookie'

testsuite(() => new CookieJar())
```

### URL

Import the testsuite from `@exodus/networking-spec/url` and invoke it with your
URLParser implementation.

```ts
import { testsuite } from '@exodus/networking-spec/url'

testsuite(() => new UrlParser())
```

The URL parsing testsuite comes with a large number of tests from the web-platform-tests project, which also
includes about 11 test cases for unicode parsing. To opt out of the test cases for unicode parsing, provide the
following options to the testsuite:

```ts
testsuite(() => new UrlParser(), { unicode: false })
```
