#library('AudioContextTest');
#import('../../pkg/unittest/unittest.dart');
#import('../../pkg/unittest/html_config.dart');
#import('dart:html');

main() {

  useHtmlConfiguration();

  var isAudioContext =
      predicate((x) => x is AudioContext, 'is an AudioContext');

  test('constructorTest', () {
      var ctx = new AudioContext();
      expect(ctx, isNotNull);
      expect(ctx, isAudioContext);
  });
  test('createBuffer', () {
      var ctx = new AudioContext();
      ArrayBufferView arrayBufferView = new Float32Array.fromList([]);
      try {
        // Test that native overload is chosen correctly. Native implementation
        // should throw 'SYNTAX_ERR' DOMException because the buffer is empty.
        AudioBuffer buffer = ctx.createBuffer(arrayBufferView.buffer, false);
      } catch (e) {
        expect(e.code, equals(DOMException.SYNTAX_ERR));
      }
  });

  test('audioRenames', () {
    AudioContext context = new AudioContext();
    GainNode gainNode = context.createGainNode();
    gainNode.connect(context.destination, 0, 0);
    expect(gainNode is GainNode, isTrue);

    expect(context.createAnalyser() is AnalyserNode, isTrue);
    expect(context.createChannelMerger() is ChannelMergerNode, isTrue);
    expect(context.createChannelSplitter() is ChannelSplitterNode, isTrue);
    expect(context.createOscillator() is OscillatorNode, isTrue);
    expect(context.createPanner() is PannerNode, isTrue);
    expect(context.createJavaScriptNode(4096) is ScriptProcessorNode, isTrue);
  });
}
