using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using StackExchange.Redis;
using Xunit;
using Xunit.Extensions;
using Xunit.Serialization;
using Xunit.Abstractions;
using Xunit.Sdk;
using RedisStudyModel;
using RedisStuy;
namespace RedisStudyTest
{
[Trait("RedisString", "All")]
public class RedisListStudyTest : IDisposable
{
#region 初始化
private readonly ITestOutputHelper testOutput;
private IDatabase redisDatabase = null;
private RedisListStudy redisListStudy = null;
private TimeSpan defaultExpiry = TimeSpan.FromSeconds(20);
private string defaultRedisKey = "RedisStudy:List:xUnitTest";
///
/// 构造
///
public RedisListStudyTest(ITestOutputHelper output)
{
this.testOutput = output;
redisDatabase = RedisHelper.GetRedisDatabase();
redisListStudy = new RedisListStudy();
}
#endregion
#region ListLeftPush
[Fact]
public void ListLeftPushTest()
{
var listLength = redisListStudy.ListLeftPush(defaultRedisKey, "first");
Assert.Equal(1, listLength);
listLength = redisListStudy.ListLeftPush(defaultRedisKey, "second");
Assert.Equal(2, listLength);
var second = redisListStudy.ListLeftPop(defaultRedisKey);
Assert.Equal("second", second);
var first = redisListStudy.ListLeftPop(defaultRedisKey);
Assert.Equal("first", first);
}
[Fact]
public void ListLeftPushsTest()
{
RedisValue[] listValues = new RedisValue[]
{
"first",
"secnd",
"third"
};
var listLenth = redisListStudy.ListLeftPush(defaultRedisKey, listValues);
Assert.Equal(3, listLenth);
}
#endregion
#region ListRightPush
[Fact]
public void ListRightPushTest()
{
var listLength = redisListStudy.ListRightPush(defaultRedisKey, "first");
Assert.Equal(1, listLength);
listLength = redisListStudy.ListRightPush(defaultRedisKey, "second");
Assert.Equal(2, listLength);
var second = redisListStudy.ListRightPop(defaultRedisKey);
Assert.Equal("second", second);
var first = redisListStudy.ListRightPop(defaultRedisKey);
Assert.Equal("first", first);
}
[Fact]
public void ListRightPushsTest()
{
RedisValue[] listValues = new RedisValue[]
{
"first",
"secnd",
"third"
};
var listLenth = redisListStudy.ListRightPush(defaultRedisKey, listValues);
Assert.Equal(3, listLenth);
}
#endregion
#region ListInsertBefore
///
/// Key不存在时,不执行操作,返回0
///
[Fact]
public void ListInsertBeforeNotKeyTest()
{
var listLenth = redisListStudy.ListInsertBefore(defaultRedisKey, "first", "firstBefore");
Assert.Equal(0, listLenth);
}
///
/// 未找到指定参照值时,返回 -1
///
[Fact]
public void ListInsertBeforeNotPivotTest()
{
redisListStudy.ListLeftPush(defaultRedisKey, "second");
var listLenth = redisListStudy.ListInsertBefore(defaultRedisKey, "first", "firstBefore");
Assert.Equal(-1, listLenth);
}
[Fact]
public void ListInsertBeforeTest()
{
redisListStudy.ListLeftPush(defaultRedisKey, "third");
var listLenth = redisListStudy.ListInsertBefore(defaultRedisKey, "third", "second");
Assert.Equal(2, listLenth);
listLenth = redisListStudy.ListInsertBefore(defaultRedisKey, "second", "first");
Assert.Equal(3, listLenth);
}
#endregion
#region ListInsertAfter
///
/// Key不存在时,不执行操作,返回0
///
[Fact]
public void ListInsertAfterNotKeyTest()
{
var listLenth = redisListStudy.ListInsertAfter(defaultRedisKey, "first", "firstAfter");
Assert.Equal(0, listLenth);
}
///
/// 未找到指定参照值时,返回 -1
///
[Fact]
public void ListInsertAfterNotPivotTest()
{
redisListStudy.ListLeftPush(defaultRedisKey, "second");
var listLenth = redisListStudy.ListInsertAfter(defaultRedisKey, "first", "firstAfter");
Assert.Equal(-1, listLenth);
}
[Fact]
public void ListInsertAfterTest()
{
redisListStudy.ListLeftPush(defaultRedisKey, "first");
var listLenth = redisListStudy.ListInsertAfter(defaultRedisKey, "first", "second");
Assert.Equal(2, listLenth);
listLenth = redisListStudy.ListInsertAfter(defaultRedisKey, "second", "third");
Assert.Equal(3, listLenth);
}
#endregion
#region ListSetByIndex
[Fact]
public void ListGetByIndexNotKeyTest()
{
Assert.Throws(() => redisListStudy.ListSetByIndex(defaultRedisKey, 0, "first"));
}
[Fact]
public void ListSetByIndexTest()
{
redisListStudy.ListLeftPush(defaultRedisKey, "first");
redisListStudy.ListSetByIndex(defaultRedisKey, 0, "firstSetByIndex");
var first = redisListStudy.ListLeftPop(defaultRedisKey);
Assert.Equal("firstSetByIndex", first);
}
#endregion
#region ListLength
[Fact]
public void ListLengthNotKeyTest()
{
var listLenth = redisListStudy.ListLength(defaultRedisKey);
Assert.Equal(0, listLenth);
}
[Fact]
public void ListLengthTest()
{
redisListStudy.ListLeftPush(defaultRedisKey, "first");
var listLenth = redisListStudy.ListLength(defaultRedisKey);
Assert.Equal(1, listLenth);
redisListStudy.ListLeftPush(defaultRedisKey, "second");
listLenth = redisListStudy.ListLength(defaultRedisKey);
Assert.Equal(2, listLenth);
redisListStudy.ListLeftPush(defaultRedisKey, "third");
listLenth = redisListStudy.ListLength(defaultRedisKey);
Assert.Equal(3, listLenth);
}
#endregion
#region ListRange
[Fact]
public void ListRangeNotKeyTest()
{
RedisValue[] values = redisListStudy.ListRange(defaultRedisKey, 0, -1);
Assert.Empty(values);
}
[Fact]
public void ListRangeTest()
{
redisListStudy.ListLeftPush(defaultRedisKey, "first");
var values = redisListStudy.ListRange(defaultRedisKey, 0, -1);
Assert.NotEmpty(values);
Assert.Contains("first", values);
redisListStudy.ListLeftPush(defaultRedisKey, "second");
values = redisListStudy.ListRange(defaultRedisKey, 0, -1);
Assert.NotEmpty(values);
Assert.Contains("first", values);
Assert.Contains("second", values);
}
#endregion
#region ListRemove
[Fact]
public void ListRemoveNotKeyTest()
{
var removeNum = redisListStudy.ListRemove(defaultRedisKey, "first");
Assert.Equal(0, removeNum);
}
[Fact]
public void ListRemoveTest()
{
var removeNum = 0L;
redisListStudy.ListLeftPush(defaultRedisKey, new RedisValue[] { "first", "second", "third", "four" });
removeNum = redisListStudy.ListRemove(defaultRedisKey, "first", 0);
Assert.Equal(1, removeNum);
redisListStudy.ListLeftPush(defaultRedisKey, new RedisValue[] { "third", "four" });
removeNum = redisListStudy.ListRemove(defaultRedisKey, "third", 0);
Assert.Equal(2, removeNum);
redisListStudy.ListLeftPush(defaultRedisKey, new RedisValue[] { "1", "2", "1", "2", "1", "2" });
removeNum = redisListStudy.ListRemove(defaultRedisKey, "2", 0);
Assert.Equal(3, removeNum);
}
#endregion
#region ListTrim
[Fact]
public void ListTrimNotKeyTest()
{
redisListStudy.ListTrim(defaultRedisKey, 2, 5);
var listCount = redisListStudy.ListLength(defaultRedisKey);
Assert.Equal(0, listCount);
}
[Fact]
public void ListTrimTest()
{
RedisValue[] values = new RedisValue[]
{
"first",
"second",
"third",
"four"
};
redisListStudy.ListLeftPush(defaultRedisKey, values);
redisListStudy.ListTrim(defaultRedisKey,1,-1);
Assert.Equal(3, redisListStudy.ListLength(defaultRedisKey));
redisListStudy.ListTrim(defaultRedisKey, 2, -1);
Assert.Equal(1, redisListStudy.ListLength(defaultRedisKey));
}
#endregion
#region 清理
public void Dispose()
{
redisDatabase.KeyDelete(defaultRedisKey);
}
#endregion
}
}