private static async Task RegisterAndDownloadFile(FileHttpResponseHandler handler, string httpCacheDirectory, Uri baseUri, string fileName)
        {
            var    uri  = new Uri(baseUri, fileName);
            string path = Path.Combine(httpCacheDirectory, fileName);

            if (!File.Exists(path))
            {
                using (var httpClient = new HttpClient())
                {
                    var data = await httpClient.GetByteArrayAsync(uri).ConfigureAwait(false);

                    File.WriteAllBytes(path, data);
                }
            }

            handler.RegisterFile(uri, path);
        }
        public UnicodeInfoBuilderTests()
        {
            string httpCacheDirectory = Path.GetFullPath(HttpCacheDirectory);

            if (!Directory.Exists(httpCacheDirectory))
            {
                Directory.CreateDirectory(httpCacheDirectory);
            }

            var handler = new FileHttpResponseHandler();

            string ucdArchiveName    = UcdDataSourceName + ".zip";
            string unihanArchiveName = UnihanDataSourceName + ".zip";

            var ucdTask    = RegisterAndDownloadFile(handler, httpCacheDirectory, UnicodeCharacterDataUri, ucdArchiveName);
            var unihanTask = RegisterAndDownloadFile(handler, httpCacheDirectory, UnicodeCharacterDataUri, unihanArchiveName);
            var emojiTasks = EmojiRequiredFiles.Select(f => RegisterAndDownloadFile(handler, httpCacheDirectory, EmojiDataUri, f)).ToArray();

            _httpClient = new HttpClient(handler);

            if (Directory.Exists(UcdDataSourceName))
            {
                Directory.Delete(UcdDataSourceName, true);
            }
            if (File.Exists(ucdArchiveName))
            {
                File.Delete(ucdArchiveName);
            }
            if (Directory.Exists(UnihanDataSourceName))
            {
                Directory.Delete(UnihanDataSourceName, true);
            }
            if (File.Exists(unihanArchiveName))
            {
                File.Delete(unihanArchiveName);
            }

            Task.WaitAll(ucdTask, unihanTask, Task.WhenAll(emojiTasks));
        }
        public UnicodeInfoBuilderTests()
        {
            var httpCacheDirectory = Path.GetFullPath(HttpCacheDirectory);

            if (!Directory.Exists(httpCacheDirectory))
            {
                Directory.CreateDirectory(httpCacheDirectory);
            }

            var handler = new FileHttpResponseHandler();

            var ucdTask    = RegisterAndDownloadFile(handler, httpCacheDirectory, Program.UnicodeCharacterDataUri, Program.UcdArchiveName);
            var unihanTask = RegisterAndDownloadFile(handler, httpCacheDirectory, Program.UnicodeCharacterDataUri, Program.UnihanArchiveName);
            var emojiTasks = Program.emojiRequiredFiles.Select(f => RegisterAndDownloadFile(handler, httpCacheDirectory, Program.EmojiDataUri, f)).ToArray();

            Program.SetHttpMessageHandler(handler);

            if (Directory.Exists(Program.UcdDirectoryName))
            {
                Directory.Delete(Program.UcdDirectoryName, true);
            }
            if (File.Exists(Program.UcdArchiveName))
            {
                File.Delete(Program.UcdArchiveName);
            }
            if (Directory.Exists(Program.UnihanDirectoryName))
            {
                Directory.Delete(Program.UnihanDirectoryName, true);
            }
            if (File.Exists(Program.UnihanArchiveName))
            {
                File.Delete(Program.UnihanArchiveName);
            }

            Task.WaitAll(ucdTask, unihanTask, Task.WhenAll(emojiTasks));
        }