public void MultiValueConversionThrowsForEmptyValues() { IMultiValueConverter converter = new MathOperationConverter(); Assert.Throws <ArgumentException>(() => converter.Convert(new object[] { }, typeof(object), null, null)); }
public void MultiValueConversionThrowsForNonIConvertible() { IMultiValueConverter converter = new MathOperationConverter(); Assert.Throws <NotSupportedException>(() => converter.Convert(new object[] { new object() }, typeof(object), null, null)); }
public void ThrowsForWrongInputTypes() { var converter = new MathOperationConverter(); Assert.Throws <NotSupportedException>(() => converter.Convert(10, new object(), CultureInfo.CurrentCulture)); }
public void SilentFailForNullValues() { var converter = new MathOperationConverter(); Assert.Null(converter.Convert(null, 1, CultureInfo.CurrentCulture)); Assert.Equal(10, converter.Convert(10, null, CultureInfo.CurrentCulture)); }
public void AcceptsConvertibles() { var converter = new MathOperationConverter(MathOperator.Multiply); // I won't test every convertible here, only two very contrary types. var result = converter.Convert("10", (decimal)10.123, CultureInfo.CurrentCulture); Assert.IsType <string>(result); }
public void SupportsMultiValueConversion() { IMultiValueConverter converter = new MathOperationConverter(MathOperator.Add); object[] values = { 1, 2, 3, 4, 5, 6 }; int sum = values.Sum(val => (int)val); Assert.Equal( sum, converter.Convert(values, typeof(int), null, null)); }
public void ConvertsValues() { var converter = new MathOperationConverter(); double l = 10.5; double r = 5.5; converter.Operator = MathOperator.Add; Assert.Equal(l + r, converter.Convert(l, r, CultureInfo.CurrentCulture)); converter.Operator = MathOperator.Subtract; Assert.Equal(l - r, converter.Convert(l, r, CultureInfo.CurrentCulture)); converter.Operator = MathOperator.Multiply; Assert.Equal(l * r, converter.Convert(l, r, CultureInfo.CurrentCulture)); converter.Operator = MathOperator.Divide; Assert.Equal(l / r, converter.Convert(l, r, CultureInfo.CurrentCulture)); }
public void InputTypeEqualsOutputType() { var converter = new MathOperationConverter(); Assert.IsType <string>(converter.Convert("10", 5.5, CultureInfo.CurrentCulture)); }
private async Task MainAsync() { // getting versions and assembly info SetBotVersionInfo(); // init log channels _logChannels = new List <DiscordChannel>(); _lastLogChWrite = File.GetLastWriteTime("logchannels.txt"); string json = await FileHandler.ReadJsonConfig(); if (json.Length == 0) { return; } if (json == "default") { Console.ForegroundColor = ConsoleColor.DarkGreen; Console.WriteLine("Created default config file.\n" + "Now you need to get your discord bot token " + "and put it in config.json file.\n" + "Also make sure you set other parameters."); Console.ResetColor(); return; } // setting up client var cfgjson = JsonSerializer.Deserialize <ConfigJson>(json); if (cfgjson == null) { return; } var cfg = new DiscordConfiguration { Token = cfgjson.Token, TokenType = TokenType.Bot, AutoReconnect = true, MinimumLogLevel = RuntimeInfo == "Debug" ? LogLevel.Debug : LogLevel.Information, MessageCacheSize = 2048, LogTimestampFormat = "dd-MM-yyyy HH:mm:ss zzz" }; // client init and event hooks _discord = new DiscordClient(cfg); _discord.Ready += Discord_Ready; _discord.GuildAvailable += Discord_GuildAvailable; _discord.GuildUnavailable += Discord_GuildUnavailable; _discord.GuildCreated += Discord_GuildCreated; _discord.GuildDeleted += Discord_GuildDeleted; _discord.ChannelDeleted += Discord_ChannelDeleted; _discord.DmChannelDeleted += Discord_DmChannelDeleted; _discord.GuildDownloadCompleted += Discord_GuildDownloadCompleted; _discord.ClientErrored += Discord_ClientErrored; _discord.SocketClosed += Discord_SocketClosed; _discord.Resumed += Discord_Resumed; _discord.Heartbeated += Discord_Heartbeated; // setting up interactivity var intcfg = new InteractivityConfiguration { Timeout = TimeSpan.FromMinutes(cfgjson.ActTimeout), PaginationDeletion = PaginationDeletion.DeleteMessage, PollBehaviour = PollBehaviour.KeepEmojis }; _discord.UseInteractivity(intcfg); // setting up commands var cmdcfg = new CommandsNextConfiguration { StringPrefixes = new List <string> { cfgjson.CommandPrefix }, EnableDms = cfgjson.DmsEnabled, EnableMentionPrefix = cfgjson.MentionEnabled, CaseSensitive = cfgjson.CaseSensitive, EnableDefaultHelp = true }; // commands hooks and register _commands = _discord.UseCommandsNext(cmdcfg); _commands.CommandExecuted += Commands_CommandExecuted; _commands.CommandErrored += Commands_CommandErrored; _commands.RegisterCommands <Commands.Commands>(); _commands.RegisterCommands <LeetCommands>(); _commands.RegisterCommands <Interactivities.Interactivities>(); _commands.RegisterCommands <Administrative>(); _commands.RegisterCommands <Cats>(); _commands.RegisterCommands <DiceRolling>(); _commands.RegisterCommands <CryptoAes>(); _commands.RegisterCommands <CryptoRsa>(); _commands.RegisterCommands <MathCommands>(); _commands.RegisterCommands <StatusCommands>(); _commands.RegisterCommands <VoiceCommands>(); // adding math converter for custom type and name var mathopscvrt = new MathOperationConverter(); _commands.RegisterConverter(mathopscvrt); _commands.RegisterUserFriendlyTypeName <MathOperation>("operator"); // setting up and enabling voice var vcfg = new VoiceNextConfiguration { AudioFormat = AudioFormat.Default, EnableIncoming = false }; _discord.UseVoiceNext(vcfg); // setting custom help formatter _commands.SetHelpFormatter <HelpFormatter>(); // init twitch live and youtube video monitors _ttvApIclid = cfgjson.TwitchApiClid; _ttvApIsecret = cfgjson.TwitchApiSecret; _ytApIkey = cfgjson.YoutubeApiKey; _tlm = new TwitchLiveMonitor(); _yvm = new YoutubeVideoMonitor(); // getting aes and rsa keys from config AesKey = cfgjson.AesKey; AesIv = cfgjson.AesIv; RsaPublicKey = cfgjson.RsaPublicKey; RsaPrivateKey = cfgjson.RsaPrivateKey; // connecting discord try { await _discord.ConnectAsync(); } catch (Exception e) { _discord.Logger.LogCritical($"{e.Message}"); return; } await Task.Delay(-1); }