summaryrefslogtreecommitdiffstats
path: root/tests.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'tests.mjs')
-rw-r--r--tests.mjs141
1 files changed, 5 insertions, 136 deletions
diff --git a/tests.mjs b/tests.mjs
index 1dc4c09..a364e8e 100644
--- a/tests.mjs
+++ b/tests.mjs
@@ -1,137 +1,6 @@
-import { chromaticScale } from "./scale.mjs";
+import TestHarness from './test-harness.mjs';
-customElements.define('x-string', class extends HTMLElement {
- static observedAttributes = ['tonic', 'value', 'frets'];
- constructor() {
- super();
- console.debug('x-string#constructor', this);
-
- this.muted.onclick = this.muteClicked.bind(this);
- this.tonic.onclick = this.fretClicked.bind(this);
- this.attachShadow({mode: 'open'});
- }
-
- connectedCallback() {
- const template = this.querySelector('template').content;
- this.shadowRoot.appendChild(template.cloneNode(true));
- console.debug('attached', template, 'to shadow root', shadowRoot);
- }
-
- get tonic() {
- return this.fretList.querySelector('.tonic');
- }
-
- get fretList() {
- return this.querySelector('.fretlist');
- }
-
- get fretInputs() {
- return this.querySelectorAll('.fretlist input[name="string"]');
- }
-
- get muted() {
- return this.querySelector('input[name="muted"]');
- }
-
- get selected() {
- return this.querySelector('[slot="selected"]');
- }
-
- get chromIndex() {
- return chromaticScale.indexOf(this.getAttribute('tonic'));
- }
-
- muteClicked(e) {
- e.preventDefault();
- console.debug('x-string#muteClicked', this, e.target.checked);
- if (e.target.checked) {
- this.setAttribute('value', 'x');
- } else {
- this.setAttribute('value', this.getAttribute('tonic'));
- }
- }
-
- fretClicked(e) {
- e.preventDefault();
- console.debug('x-string#fretClicked', this, e.target.getAttribute('value'));
- this.setAttribute('value', e.target.getAttribute('value'));
- }
-
- attributeChangedCallback(name, old, v) {
- console.debug('x-string#attributeChangedCallback', this, name, old, v);
- switch (name) {
- case 'tonic':
- return this.updateTonic(v);
- case 'value':
- return this.updateValue(v);
- case 'frets':
- return this.updateFrets(Number(old || '0'), Number(v));
- }
- }
-
- updateTonic(tonic) {
- console.debug('x-string#updateTonic', this, tonic);
-
- // for compat with the radio inputs.
- this.tonic.setAttribute('value', tonic);
- this.tonic.textContent = tonic;
-
- // update all fret values
- this.fretInputs
- .forEach((fret, i) => {
- console.debug(' -- fret', i, fret);
- fret.setAttribute('value', i.toString());
- });
- }
-
- updateValue(value) {
- console.debug('x-string#updateValue', this, value);
- this.selected.textContent = value;
- if (value === 'x') {
- this.classList.add('muted');
- this.muted.checked = true;
- return;
- } else {
- this.classList.remove('muted');
- this.muted.checked = false;
- }
-
- this.fretInputs
- .forEach(fret => {
- fret.checked = this.getAttribute('value') === fret.getAttribute('value');
- if (fret.checked) {
- fret.classList.add('checked');
- } else {
- fret.classList.remove('checked');
- }
- console.debug(' -- fret', fret, fret.checked);
- });
- }
-
- updateFrets(old, frets) {
- console.debug('x-string#updateFrets', this, old, frets);
- if (old < frets) {
- const tonic = this.getAttribute('tonic');
- if (!tonic) {
- return;
- }
-
- const chromIndex = this.chromIndex;
- const fretList = this.fretList;
- for (let i = old+1; i <= frets; i++) {
- const note = chromaticScale[chromIndex + i];
- console.debug(' -- appending fret', i, 'from', note, fretList);
-
- const input = document.createElement('input');
- input.setAttribute('type', 'radio');
- input.setAttribute('name', 'string');
- input.setAttribute('value', note);
- input.onclick = this.fretClicked.bind(this);
-
- const li = document.createElement('li');
- li.appendChild(input);
- fretList.appendChild(li);
- }
- }
- }
-});
+function init() {
+ TestHarness.register();
+}
+document.addEventListener('DOMContentLoaded', init);