<!DOCTYPE html>
<meta charset=utf-8>
<title>Web NFC: NFCReader tests</title>
<link rel="author" title="Intel" href="http://www.intel.com"/>
<link rel="help" href="https://w3c.github.io/web-nfc/"/>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<meta name="flags" content="interact">

<p>Tap an NFC tag to the test device with NFC support.</p>

<p>Note: All the actions need to be done in 60 seconds, otherwise it will get TIMEOUT.</p>

<div id="log"></div>

<script>

"use strict";

promise_test(async t => {
  const reader = new NFCReader();
  const readerWatcher = new EventWatcher(t, reader, ["reading", "error"]);
  reader.start();
  const event = await readerWatcher.wait_for("reading");
  assert_true(event instanceof NFCReadingEvent);
}, 'Test that nfc watch success if NFC HW is enabled.');

promise_test(async t => {
  const reader = new NFCReader({url: "https://a.com"});
  const readerWatcher = new EventWatcher(t, reader, ["reading", "error"]);
  reader.start();
  const event = await readerWatcher.wait_for("reading");
  assert_true(event instanceof NFCReadingEvent);
}, 'Test that NFCReader.start succeeds if NFCReaderOptions.url is valid URL.');

promise_test(async t => {
  const reader = new NFCReader({url: "https://a.com/*"});
  const readerWatcher = new EventWatcher(t, reader, ["reading", "error"]);
  reader.start();
  const event = await readerWatcher.wait_for("reading");
  assert_true(event instanceof NFCReadingEvent);
}, 'Test that NFCReader.start succeeds if NFCReaderOptions.url is valid URL with "*"' +
   ' wildcard character in path.');

promise_test(async t => {
  const reader = new NFCReader({url: "https://a.com/*/bar"});
  const readerWatcher = new EventWatcher(t, reader, ["reading", "error"]);
  reader.start();
  const event = await readerWatcher.wait_for("reading");
  assert_true(event instanceof NFCReadingEvent);
}, 'Test that NFCReader.start succeeds if NFCReaderOptions.url is valid URL with "*"' +
   ' wildcard character in the beginning of path component followed by' +
   ' subpath.');

promise_test(async t => {
  const reader = new NFCReader({url: ""});
  const readerWatcher = new EventWatcher(t, reader, ["reading", "error"]);
  reader.start();
  const event = await readerWatcher.wait_for("reading");
  assert_true(event instanceof NFCReadingEvent);
}, 'Test that NFCReader.start succeeds if NFCReaderOptions.url is empty.');

</script>
