browser_tester 1.5.0

Deterministic lightweight browser runtime for Rust tests
Documentation
use super::*;

#[test]
fn issue_112_structured_throw_in_promise_chain_preserves_code_in_async_catch() -> Result<()> {
    let html = r#"
      <button id='run' type='button'>run</button>
      <p id='out'></p>
      <script>
        function validate(text) {
          if (text.includes('!')) {
            throw { code: 'invalid_char' };
          }
          return text;
        }

        document.getElementById('run').addEventListener('click', async () => {
          try {
            await Promise.resolve().then(() => validate('A!'));
            document.getElementById('out').textContent = 'ok';
          } catch (error) {
            const code = error && error.code ? error.code : '';
            document.getElementById('out').textContent = code || 'generic';
          }
        });
      </script>
    "#;

    let mut harness = Harness::from_html(html)?;
    harness.click("#run")?;
    harness.assert_text("#out", "invalid_char")?;
    Ok(())
}

#[test]
fn issue_112_structured_rejection_reason_preserves_code_in_async_catch() -> Result<()> {
    let html = r#"
      <button id='run' type='button'>run</button>
      <p id='out'></p>
      <script>
        document.getElementById('run').addEventListener('click', async () => {
          try {
            await Promise.reject({ code: 'missing_padding' });
            document.getElementById('out').textContent = 'ok';
          } catch (error) {
            const code = error && error.code ? error.code : '';
            document.getElementById('out').textContent = code || 'generic';
          }
        });
      </script>
    "#;

    let mut harness = Harness::from_html(html)?;
    harness.click("#run")?;
    harness.assert_text("#out", "missing_padding")?;
    Ok(())
}