livekit-protocol 0.7.5

Livekit protocol and utilities for the Rust SDK
Documentation
package list

import (
	"testing"

	"github.com/stretchr/testify/require"
)

type testItem struct {
	Hook[testItem]
	value string
}

type testList = List[testItem, *testItem]

func collectValues(l *testList) []string {
	var out []string
	for it := l.Front(); it != nil; it = it.Next() {
		out = append(out, it.value)
	}
	return out
}

func TestTLZeroValue(t *testing.T) {
	var l testList
	require.True(t, l.Empty())
	require.Nil(t, l.Front())
	require.Nil(t, l.Back())
}

func TestTLPushFrontBackAndRemove(t *testing.T) {
	var l testList
	a := &testItem{value: "a"}
	b := &testItem{value: "b"}
	c := &testItem{value: "c"}

	l.PushFront(b)
	l.PushFront(a)
	l.PushBack(c)

	require.Equal(t, []string{"a", "b", "c"}, collectValues(&l))
	require.Same(t, a, l.Front())
	require.Same(t, c, l.Back())
	require.Same(t, b, a.Next())
	require.Same(t, b, c.Prev())

	l.Remove(b)
	require.Equal(t, []string{"a", "c"}, collectValues(&l))
	require.Nil(t, b.Next())
	require.Nil(t, b.Prev())

	l.Remove(a)
	l.Remove(c)
	require.True(t, l.Empty())
	require.Nil(t, l.Front())
	require.Nil(t, l.Back())
}

func TestTLInsertAndMove(t *testing.T) {
	var l testList
	a := &testItem{value: "a"}
	b := &testItem{value: "b"}
	c := &testItem{value: "c"}
	d := &testItem{value: "d"}

	l.PushBack(a)
	l.PushBack(c)
	l.InsertAfter(b, a)
	l.InsertBefore(d, a)

	require.Equal(t, []string{"d", "a", "b", "c"}, collectValues(&l))

	l.MoveToFront(c)
	require.Equal(t, []string{"c", "d", "a", "b"}, collectValues(&l))

	l.MoveToBack(d)
	require.Equal(t, []string{"c", "a", "b", "d"}, collectValues(&l))
	require.Same(t, c, l.Front())
	require.Same(t, d, l.Back())
}