123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- using System;
- using System.Collections;
- using System.Linq;
- using NUnit.Framework;
- using UnityEngine;
- using UnityEngine.TestTools;
- using Unity.Collections;
- namespace Unity.WebRTC.RuntimeTest
- {
- class AudioStreamTrackTest
- {
- [SetUp]
- public void SetUp()
- {
- WebRTC.Initialize(true);
- }
- [TearDown]
- public void TearDown()
- {
- WebRTC.Dispose();
- }
- [UnityTest]
- [Timeout(5000)]
- public IEnumerator ConstructorWithAudioSource()
- {
- var test = new MonoBehaviourTest<SignalingPeers>();
- var source = test.gameObject.AddComponent<AudioSource>();
- source.clip = AudioClip.Create("test", 48000, 2, 48000, false);
- var audioTrack = new AudioStreamTrack(source);
- var sender = test.component.AddTrack(0, audioTrack);
- yield return test;
- Assert.That(test.component.RemoveTrack(0, sender), Is.EqualTo(RTCErrorType.None));
- yield return new WaitUntil(() => test.component.NegotiationCompleted());
- test.component.Dispose();
- UnityEngine.Object.DestroyImmediate(source.clip);
- UnityEngine.Object.DestroyImmediate(test.gameObject);
- }
- [UnityTest]
- [Timeout(5000)]
- public IEnumerator ConstructorWithAudioListener()
- {
- var test = new MonoBehaviourTest<SignalingPeers>();
- var listener = test.gameObject.AddComponent<AudioListener>();
- var audioTrack = new AudioStreamTrack(listener);
- var sender = test.component.AddTrack(0, audioTrack);
- yield return test;
- Assert.That(test.component.RemoveTrack(0, sender), Is.EqualTo(RTCErrorType.None));
- yield return new WaitUntil(() => test.component.NegotiationCompleted());
- test.component.Dispose();
- UnityEngine.Object.DestroyImmediate(test.gameObject);
- }
- [UnityTest]
- [Timeout(5000)]
- public IEnumerator GCCollect()
- {
- GameObject obj = new GameObject("audio");
- AudioSource source = obj.AddComponent<AudioSource>();
- var test = new MonoBehaviourTest<SignalingPeers>();
- var track = new AudioStreamTrack(source);
- test.component.AddTrack(0, track);
- yield return test;
- GC.Collect();
- var receivers = test.component.GetPeerReceivers(1);
- Assert.That(receivers.Count(), Is.EqualTo(1));
- var receiver = receivers.First();
- var audioTrack = receiver.Track as AudioStreamTrack;
- Assert.That(audioTrack, Is.Not.Null);
- test.component.Dispose();
- UnityEngine.Object.DestroyImmediate(test.gameObject);
- UnityEngine.Object.DestroyImmediate(obj);
- }
- [UnityTest]
- [Timeout(5000)]
- public IEnumerator AddMultiAudioTrack()
- {
- GameObject obj = new GameObject("audio");
- AudioSource source = obj.AddComponent<AudioSource>();
- int channels = 2;
- source.clip = AudioClip.Create("test", 48000, channels, 48000, false);
- source.Play();
- var test = new MonoBehaviourTest<SignalingPeers>();
- test.gameObject.AddComponent<AudioListener>();
- // first track
- var track1 = new AudioStreamTrack(source);
- var sender1 = test.component.AddTrack(0, track1);
- yield return test;
- var receivers = test.component.GetPeerReceivers(1);
- Assert.That(receivers.Count(), Is.EqualTo(1));
- var receiver = receivers.First();
- var audioTrack = receiver.Track as AudioStreamTrack;
- Assert.That(audioTrack, Is.Not.Null);
- // second track
- var track2 = new AudioStreamTrack(source);
- var sender2 = test.component.AddTrack(0, track2);
- yield return new WaitUntil(() => test.component.NegotiationCompleted());
- yield return new WaitUntil(() => test.component.GetPeerReceivers(1).Count() == 2);
- receivers = test.component.GetPeerReceivers(1);
- Assert.That(receivers.Count(), Is.EqualTo(2));
- receiver = receivers.Last();
- audioTrack = receiver.Track as AudioStreamTrack;
- Assert.That(audioTrack, Is.Not.Null);
- test.component.Dispose();
- UnityEngine.Object.DestroyImmediate(test.gameObject);
- UnityEngine.Object.DestroyImmediate(obj);
- }
- [Test]
- public void AudioStreamTrackInstantiateOnce()
- {
- GameObject obj = new GameObject("audio");
- AudioSource source = obj.AddComponent<AudioSource>();
- source.clip = AudioClip.Create("test", 48000, 2, 48000, false);
- var track = new AudioStreamTrack(source);
- track.Dispose();
- UnityEngine.Object.DestroyImmediate(source.clip);
- UnityEngine.Object.DestroyImmediate(obj);
- }
- [Test]
- public void AudioStreamTrackInstantiateMultiple()
- {
- GameObject obj1 = new GameObject("audio1");
- AudioSource source1 = obj1.AddComponent<AudioSource>();
- source1.clip = AudioClip.Create("test1", 48000, 2, 48000, false);
- GameObject obj2 = new GameObject("audio2");
- AudioSource source2 = obj2.AddComponent<AudioSource>();
- source2.clip = AudioClip.Create("test2", 48000, 2, 48000, false);
- var track1 = new AudioStreamTrack(source1);
- var track2 = new AudioStreamTrack(source2);
- track1.Dispose();
- track2.Dispose();
- UnityEngine.Object.DestroyImmediate(source1.clip);
- UnityEngine.Object.DestroyImmediate(source2.clip);
- UnityEngine.Object.DestroyImmediate(obj1);
- UnityEngine.Object.DestroyImmediate(obj2);
- }
- [Test]
- public void AudioStreamTrackSetData()
- {
- GameObject obj = new GameObject("audio");
- AudioSource source = obj.AddComponent<AudioSource>();
- source.clip = AudioClip.Create("test1", 48000, 2, 48000, false);
- var track = new AudioStreamTrack(source);
- Assert.That(() => track.SetData(null, 0, 0), Throws.ArgumentNullException);
- float[] data = new float[2048];
- Assert.That(() => track.SetData(data, 0, 0), Throws.ArgumentException);
- Assert.That(() => track.SetData(data, 1, 0), Throws.ArgumentException);
- Assert.That(() => track.SetData(data, 0, 48000), Throws.ArgumentException);
- Assert.That(() => track.SetData(data, 1, 48000), Throws.Nothing);
- track.Dispose();
- UnityEngine.Object.DestroyImmediate(source.clip);
- UnityEngine.Object.DestroyImmediate(obj);
- }
- //todo(kazuki): workaround ObjectDisposedException for Linux playmode test
- [Test]
- [UnityPlatform(exclude = new[] { RuntimePlatform.LinuxEditor })]
- public void AudioStreamTrackPlayAudio()
- {
- GameObject obj = new GameObject("audio");
- AudioSource source = obj.AddComponent<AudioSource>();
- source.clip = AudioClip.Create("test", 480, 2, 48000, false);
- var track = new AudioStreamTrack(source);
- source.Play();
- track.Dispose();
- UnityEngine.Object.DestroyImmediate(source.clip);
- UnityEngine.Object.DestroyImmediate(obj);
- }
- [Test]
- public void AudioStreamRenderer()
- {
- var obj = new GameObject("audio");
- var renderer = new AudioStreamTrack.AudioStreamRenderer(null);
- renderer.Source = obj.AddComponent<AudioSource>();
- renderer.Dispose();
- UnityEngine.Object.DestroyImmediate(obj);
- }
- }
- }
|