Skip to content
This repository was archived by the owner on Nov 8, 2024. It is now read-only.
This repository was archived by the owner on Nov 8, 2024. It is now read-only.

Expand upon the browser capabilities mechanism #3

@craigfowler

Description

@craigfowler

I have a mechanism for describing the capabilities of web browsers and then detecting those capabilities within test code (particularly actions).

Unfortunately browser and OS versions and their behaviours presents us with a moving target and so this mechanism needs to be expanded upon.

Desired features of new system

  • Cheap to develop and ship
    As new versions are released and capabilities change, it needs to be cheap to update and release a new version
  • Cheap to read and understand
    It should be easy for a developer with only limited skill to open and edit and understand browser capabilities.
  • Avoid needing updates when nothing changes
    The mechanism of mapping browser versions to capabilities should only need updating when something changes. There should be a concept of 'latest' version and if there is no chance between two latest versions then the info does not need changing.
  • Easy for developers to override locally with their own info
    Even though new capabilities into can be shipped quickly, it must be possible for developers to override the shipped info which their own. This allows them to quickly patch in their own workarounds or updates before they are centrally available.

Proposed solution

Use a text-based tabular format like CSV for the browser capabilities. This would be a matrix of version numbers and the capabilities showing which apply to which.

Each browser and OS combination gets a single text file. Each file would be compiled into an assembly which can then be shipped as a NuGet package. This would be frequently re-released with updates.

When a file has an OS then that is used. Also an earlier OS version may be used as a fallback. Finally a non-versioned OS version of the file may also be used.

We need a separate OS file which lists the operating system versions and how they relate to one another:

  • Is an OS name a parent of another (a parent is a general name for that same operating system, like Windows is a parent of Windows 10)
  • Is a version earlier than another or later than the other

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions