8 changed files with 121 additions and 82 deletions
@ -0,0 +1,85 @@ |
|||||
|
using System; |
||||
|
using System.Collections; |
||||
|
using System.Collections.Generic; |
||||
|
using System.IO; |
||||
|
using System.Linq; |
||||
|
using System.Net.Http; |
||||
|
|
||||
|
namespace Avalonia.Visuals.UnitTests.Media.TextFormatting |
||||
|
{ |
||||
|
public abstract class TestDataGenerator : IEnumerable<object[]> |
||||
|
{ |
||||
|
private readonly string _fileName; |
||||
|
private readonly List<object[]> _testData; |
||||
|
|
||||
|
protected TestDataGenerator(string fileName) |
||||
|
{ |
||||
|
_fileName = fileName; |
||||
|
_testData = ReadTestData(); |
||||
|
} |
||||
|
|
||||
|
public IEnumerator<object[]> GetEnumerator() |
||||
|
{ |
||||
|
return _testData.GetEnumerator(); |
||||
|
} |
||||
|
|
||||
|
IEnumerator IEnumerable.GetEnumerator() |
||||
|
{ |
||||
|
return GetEnumerator(); |
||||
|
} |
||||
|
|
||||
|
private List<object[]> ReadTestData() |
||||
|
{ |
||||
|
var testData = new List<object[]>(); |
||||
|
|
||||
|
using (var client = new HttpClient()) |
||||
|
{ |
||||
|
var url = Path.Combine(UnicodeDataGenerator.Ucd, _fileName); |
||||
|
|
||||
|
using (var result = client.GetAsync(url).GetAwaiter().GetResult()) |
||||
|
{ |
||||
|
if (!result.IsSuccessStatusCode) |
||||
|
return testData; |
||||
|
|
||||
|
using (var stream = result.Content.ReadAsStreamAsync().GetAwaiter().GetResult()) |
||||
|
using (var reader = new StreamReader(stream)) |
||||
|
{ |
||||
|
while (!reader.EndOfStream) |
||||
|
{ |
||||
|
var line = reader.ReadLine(); |
||||
|
|
||||
|
if (line == null) |
||||
|
{ |
||||
|
break; |
||||
|
} |
||||
|
|
||||
|
if (line.StartsWith("#") || string.IsNullOrEmpty(line)) |
||||
|
{ |
||||
|
continue; |
||||
|
} |
||||
|
|
||||
|
var elements = line.Split('#'); |
||||
|
|
||||
|
elements = elements[0].Replace("÷\t", "÷").Trim('÷').Split('÷'); |
||||
|
|
||||
|
var chars = elements[0].Replace(" × ", " ").Split(' '); |
||||
|
|
||||
|
var codepoints = chars.Where(x => x != "" && x != "×") |
||||
|
.Select(x => Convert.ToInt32(x, 16)).ToArray(); |
||||
|
|
||||
|
var text = string.Join(null, codepoints.Select(char.ConvertFromUtf32)); |
||||
|
|
||||
|
var length = codepoints.Select(x => x > ushort.MaxValue ? 2 : 1).Sum(); |
||||
|
|
||||
|
var data = new object[] { text, length }; |
||||
|
|
||||
|
testData.Add(data); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return testData; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue