public World(IControls controls) { _controls = controls; _start = new State { Update = StartUpdate, Draw = StartDraw }; _alive = new State { Update = AliveUpdate, Draw = AliveDraw }; _dead = new State { Update = DeadUpdate, Draw = DeadDraw }; _gameOver = new State { Update = GameOverUpdate, Draw = GameOverDraw }; _state = _start; _viewer = new Viewer(); _bird = new Bird(controls); _pipeCollection = new PipeCollection(); }
public void WizardLoggingExtensionMethods_RollingFileLogger() { var currentFolderPath = Path.GetDirectoryName(GetType().Assembly.Location); var folderPath = Path.Combine(currentFolderPath, "TestLogs"); var fileProvider = new RollingFileProvider(folderPath); var serializer = StringLogSerializerBuilder.DefaultSerializer; var serializerApply = new Action <StringLogSerializerBuilder>(s => { }); var recordVerifier = new MinimumLogLevelVerifier(LogLevel.Debug); var minLevel = LogLevel.Debug; var enc = Encoding.UTF8; var pipes = new PipeCollection <RollingFileContext>(); var l1 = LoggingWizard.Spell.RollingFileLogger(fileProvider, serializer, enc, pipes); var l2 = LoggingWizard.Spell.RollingFileLogger(fileProvider, serializerApply, enc, pipes); var l3 = LoggingWizard.Spell.RollingFileLogger(folderPath, serializer, enc, pipes); var l4 = LoggingWizard.Spell.RollingFileLogger(folderPath, serializerApply, enc, pipes); var l5 = LoggingWizard.Spell.RollingFileLogger(fileProvider, recordVerifier, serializer, enc, pipes); var l6 = LoggingWizard.Spell.RollingFileLogger(fileProvider, recordVerifier, serializerApply, enc, pipes); var l7 = LoggingWizard.Spell.RollingFileLogger(fileProvider, minLevel, serializer, enc, pipes); var l8 = LoggingWizard.Spell.RollingFileLogger(fileProvider, minLevel, serializerApply, enc, pipes); var l9 = LoggingWizard.Spell.RollingFileLogger(folderPath, recordVerifier, serializer, enc, pipes); var l10 = LoggingWizard.Spell.RollingFileLogger(folderPath, recordVerifier, serializerApply, enc, pipes); var l11 = LoggingWizard.Spell.RollingFileLogger(folderPath, minLevel, serializer, enc, pipes); var l12 = LoggingWizard.Spell.RollingFileLogger(folderPath, minLevel, serializerApply, enc, pipes); }
//3 public static BackgroundLogger BackgroundRollingFileLogger( this LoggingWizardCharms charms, string folderPath, IStringLogSerializer serializer = null, Encoding encoding = null, PipeCollection <RollingFileContext> pipes = null ) { return(BackgroundRollingFileLogger( charms, folderPath, new MinimumLogLevelVerifier(LogLevel.Debug), serializer, encoding, pipes )); }
//9 public static RollingFileLogger RollingFileLogger( this LoggingWizardCharms charms, IRollingFileProvider fileProvider, IStringLogSerializer serializer = null, Encoding encoding = null, PipeCollection <RollingFileContext> pipes = null ) { return(RollingFileLogger( charms, fileProvider, new MinimumLogLevelVerifier(LogLevel.Debug), serializer, encoding, pipes )); }
//12 public static BackgroundLogger BackgroundRollingFileLogger( this LoggingWizardCharms charms, IRollingFileProvider fileProvider, Action <StringLogSerializerBuilder> serializerApply, Encoding encoding = null, PipeCollection <RollingFileContext> pipes = null ) { return(BackgroundRollingFileLogger( charms, fileProvider, new MinimumLogLevelVerifier(LogLevel.Debug), serializerApply, encoding, pipes )); }
//6 public static RollingFileLogger RollingFileLogger( this LoggingWizardCharms charms, string folderPath, Action <StringLogSerializerBuilder> serializerApply, Encoding encoding = null, PipeCollection <RollingFileContext> pipes = null ) { return(RollingFileLogger( charms, folderPath, new MinimumLogLevelVerifier(LogLevel.Debug), serializerApply, encoding, pipes )); }
//8 public static BackgroundLogger BackgroundRollingFileLogger( this LoggingWizardCharms charms, IRollingFileProvider fileProvider, LogLevel minLevel, IStringLogSerializer serializer = null, Encoding encoding = null, PipeCollection <RollingFileContext> pipes = null ) { return(BackgroundRollingFileLogger( charms, fileProvider, new MinimumLogLevelVerifier(minLevel), serializer, encoding, pipes )); }
//1 public static BackgroundLogger BackgroundRollingFileLogger( this LoggingWizardCharms charms, string folderPath, ILogRecordVerifier recordVerifier, IStringLogSerializer serializer = null, Encoding encoding = null, PipeCollection <RollingFileContext> pipes = null ) { return(BackgroundRollingFileLogger( charms, new RollingFileProvider(folderPath), recordVerifier, serializer, encoding, pipes )); }
//2 public static RollingFileLogger RollingFileLogger( this LoggingWizardCharms charms, string folderPath, LogLevel minLevel, IStringLogSerializer serializer = null, Encoding encoding = null, PipeCollection <RollingFileContext> pipes = null ) { return(RollingFileLogger( charms, folderPath, new MinimumLogLevelVerifier(minLevel), serializer, encoding, pipes )); }
//7 public static BackgroundLogger BackgroundRollingFileLogger( this LoggingWizardCharms charms, IRollingFileProvider fileProvider, ILogRecordVerifier recordVerifier, IStringLogSerializer serializer = null, Encoding encoding = null, PipeCollection <RollingFileContext> pipes = null ) { var baseLogger = new RollingFileLogger(fileProvider) { RecordVerifier = recordVerifier }; baseLogger.Serializer = serializer ?? baseLogger.Serializer; baseLogger.Encoding = encoding ?? baseLogger.Encoding; baseLogger.Pipes = pipes ?? baseLogger.Pipes; return(charms.BackgroundLogger(baseLogger)); }
//7 public static RollingFileLogger RollingFileLogger( this LoggingWizardCharms charms, IRollingFileProvider fileProvider, ILogRecordVerifier recordVerifier, IStringLogSerializer serializer = null, Encoding encoding = null, PipeCollection <RollingFileContext> pipes = null ) { var logger = new RollingFileLogger(fileProvider) { RecordVerifier = recordVerifier }; logger.Serializer = serializer ?? logger.Serializer; logger.Encoding = encoding ?? logger.Encoding; logger.Pipes = pipes ?? logger.Pipes; return(logger); }
//4 public static BackgroundLogger BackgroundRollingFileLogger( this LoggingWizardCharms charms, string folderPath, ILogRecordVerifier recordVerifier, Action <StringLogSerializerBuilder> serializerApply, Encoding encoding = null, PipeCollection <RollingFileContext> pipes = null ) { var serializerBuilder = new StringLogSerializerBuilder(); serializerApply?.Invoke(serializerBuilder); var serializer = serializerBuilder.BuildSerializer(); return(BackgroundRollingFileLogger( charms, folderPath, recordVerifier, serializer, encoding, pipes )); }
//10 public static RollingFileLogger RollingFileLogger( this LoggingWizardCharms charms, IRollingFileProvider fileProvider, ILogRecordVerifier recordVerifier, Action <StringLogSerializerBuilder> serializerApply, Encoding encoding = null, PipeCollection <RollingFileContext> pipes = null ) { var serializerBuilder = new StringLogSerializerBuilder(); serializerApply?.Invoke(serializerBuilder); var serializer = serializerBuilder.BuildSerializer(); return(RollingFileLogger( charms, fileProvider, recordVerifier, serializer, encoding, pipes )); }
public void RollingFileLogger_CustomPipeline() { #region Arrange var currentFolderPath = Path.GetDirectoryName(GetType().Assembly.Location); var currentFolder = new DirectoryInfo(currentFolderPath); var log = new LogRecord { Timestamp = DateTime.Now, Message = "str", Level = LogLevel.Error, Exception = new Exception("Ex") }; var filePathTemplate = $"{currentFolderPath}\\log.txt"; var lastFileMock = new Mock <FileInformation>(filePathTemplate); lastFileMock.SetupGet(x => x.CreationTime).Returns(DateTime.Now); lastFileMock.SetupGet(x => x.FullName).Returns(filePathTemplate); lastFileMock.SetupGet(x => x.Exists).Returns(true); var files = new List <FileInformation> { lastFileMock.Object }; new DirectoryInfo(currentFolderPath).GetFiles("*.txt").Each(x => x.Delete()); var fileProviderMock = new Mock <IRollingFileProvider>(); fileProviderMock.Setup(x => x.GetFiles()).Returns(() => files.ToArray()); fileProviderMock.Setup(x => x.Directory).Returns(currentFolder); fileProviderMock.Setup(x => x.TryResolveLastFile()).Returns(lastFileMock.Object); fileProviderMock.Setup(x => x.ProduceNewFile()).Returns(() => { var newFilePath = filePathTemplate.Replace(".txt", (files.Count + 1) + ".txt"); var fm = new Mock <FileInformation>(newFilePath); fm.SetupGet(x => x.CreationTime).Returns(DateTime.Now); fm.SetupGet(x => x.FullName).Returns(newFilePath); fm.SetupGet(x => x.Exists).Returns(false); files.Add(fm.Object); return(fm.Object); }); var logs = new List <LogRecord>(); var pipes = new PipeCollection <RollingFileContext>() .Add(new RollingFileWriterPipe()) .Add((c, n) => { n(c); logs.AddRange(c.Batch); }) .Add((c, n) => { c.Batch.Each(x => x.Message = x.Message.ToUpper()); n(c); }); var logger = new RollingFileLogger(fileProviderMock.Object) { Pipes = pipes }; #endregion Arrange #region Act logger.Log(log); logger.Dispose(); #endregion Act #region Assert var logFile = new FileInfo(lastFileMock.Object.FullName); Assert.IsTrue(logFile.Exists); Assert.AreEqual(1, logs.Count); Assert.AreSame(logs[0], log); Assert.AreEqual(logs[0].Message, log.Message.ToUpper()); //because last file exists fileProviderMock.Verify(x => x.ProduceNewFile(), Times.Never()); fileProviderMock.Verify(x => x.TryResolveLastFile(), Times.Once()); new DirectoryInfo(currentFolderPath).GetFiles("*.txt").Each(x => x.Delete()); #endregion Assert }
/// <summary> /// 多管一键标注 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_AllMulltiplePipe_Click(object sender, EventArgs e) { if (!CheckInputsOfMultiple()) { return; } if (!CheckInputsOfSingle()) { return; } if (!CheckInputsOfCommon()) { return; } //先删除后新增 var lines = new FilteredElementCollector(Doc, View.Id) .OfClass(typeof(FamilyInstance)) .WherePasses(new FamilyInstanceFilter(Doc, PAContext.GetMultipleTagSymbol(Doc).Id)); var pipeTags = new FilteredElementCollector(Doc, View.Id) .OfCategory(BuiltInCategory.OST_PipeTags) .WhereElementIsNotElementType(); if (pipeTags.Count() > 0 || lines.Count() > 0) { if (PMMessageBox.ShowQuestion("已存在标注,继续将重新生成所有管道标注", MessageBoxButtons.OKCancel) != DialogResult.OK) { return; } } DelegateHelper.DelegateTransaction(Doc, "清空已有标注", () => { //清空模型对象 var lineIds = lines.Select(c => c.Id).ToList(); foreach (var lineId in lineIds) { Doc.Delete(lineId); } var pipeTagIds = pipeTags.Select(c => c.Id).ToList(); foreach (var pipeTagId in pipeTagIds) { Doc.Delete(pipeTagId); } //删除存储的关联 var storageCollection = PAContext.GetCollection(Doc); storageCollection.RemoveAll(c => c.ViewId == View.Id.IntegerValue); storageCollection.Save(Doc); var creator = new AnnotationCreater(); //生成处理 var pipes = new FilteredElementCollector(Doc, View.Id) .OfCategory(BuiltInCategory.OST_PipeCurves) .WhereElementIsNotElementType(); PipeCollection collection = new PipeCollection(); foreach (Pipe pipe in pipes) { if (CheckFilter(pipe)) { collection.Add(pipe); } } collection.SortBySkew(); List <PipeGroup> slopedPipeGroups = null; try { slopedPipeGroups = collection.GetPipeGroups(PipeAnnotationCmd.PipeAnnotationUIData.SettingForMultiple.LengthBetweenPipe_Inch); } catch (Exception ex)//特定情况暂时以提示处理,比如连续超过7个,比如 { TaskDialog.Show("警告", ex.Message); return(false); } foreach (var pipeGroup in slopedPipeGroups) { if (pipeGroup.Count > 1) { creator.GenerateMultipleTagSymbol(Doc, pipeGroup.Select(c => c.Id), PipeAnnotationCmd.PipeAnnotationUIData.SettingForMultiple, false); } else { var pipe = Doc.GetElement(pipeGroup.First().Id) as Pipe; var setting = PipeAnnotationCmd.PipeAnnotationUIData.SettingForSingle; var headerPoint = setting.GetHeaderPoint(pipe); var tag = Doc.Create.NewTag(View, pipe, setting.NeedLeader, TagMode.TM_ADDBY_CATEGORY, TagOrientation.Horizontal, headerPoint); tag.TagHeadPosition = headerPoint; } } creator.FinishMultipleGenerate(Doc); return(true); }); }
public void WizardLoggingExtensions_RollingFileLogger() { #region Arrange var defaultMinLevel = LogLevel.Debug; var defaultEncoding = new UTF8Encoding(false); var defaultOutputTemplate = StringLogSerializer.DefaultOutputTemplate; var minLevel = LogLevel.Warning; var levelVerifier = new RangeLogLevelVerifier(LogLevel.Debug, LogLevel.Warning); var outputTemplate = "{Message}"; var serializer = new StringLogSerializer { OutputTemplate = outputTemplate }; var serializerApply = new Action <StringLogSerializer>(s => { s.OutputTemplate = outputTemplate; }); var encoding = Encoding.ASCII; var folder = Environment.CurrentDirectory; var fileNameProviderMock = new Mock <IRollingFileProvider>(); fileNameProviderMock.SetupGet(x => x.FolderPath).Returns(folder); var fileNameProvider = fileNameProviderMock.Object; var stubPipe = LambdaPipe <RollingFileContext> .Stub; var stubPipeDelegate = new Action <RollingFileContext, Action <RollingFileContext> >( (c, n) => { stubPipe.Perform(c); n(c); } ); var pipeCollection = new PipeCollection <RollingFileContext>().Apply(c => c.Add(stubPipe)); #endregion Arrange #region Act var logger1 = LoggingWizard.Spell.RollingFileLogger(folder); var logger2 = LoggingWizard.Spell.RollingFileLogger(folder, serializer, encoding, pipeCollection); var logger3 = LoggingWizard.Spell.RollingFileLogger(folder, serializerApply, encoding, pipeCollection); var logger4 = LoggingWizard.Spell.RollingFileLogger(folder, minLevel, serializer, encoding, pipeCollection); var logger5 = LoggingWizard.Spell.RollingFileLogger(folder, levelVerifier, serializer, encoding, pipeCollection); var logger6 = LoggingWizard.Spell.RollingFileLogger(folder, minLevel, serializerApply, encoding, pipeCollection); var logger7 = LoggingWizard.Spell.RollingFileLogger(folder, levelVerifier, serializerApply, encoding, pipeCollection); var logger8 = LoggingWizard.Spell.RollingFileLogger(fileNameProvider); var logger9 = LoggingWizard.Spell.RollingFileLogger(fileNameProvider, serializer, encoding, pipeCollection); var logger10 = LoggingWizard.Spell.RollingFileLogger(fileNameProvider, serializerApply, encoding, pipeCollection); var logger11 = LoggingWizard.Spell.RollingFileLogger(fileNameProvider, minLevel, serializer, encoding, pipeCollection); var logger12 = LoggingWizard.Spell.RollingFileLogger(fileNameProvider, levelVerifier, serializer, encoding, pipeCollection); var logger13 = LoggingWizard.Spell.RollingFileLogger(fileNameProvider, minLevel, serializerApply, encoding, pipeCollection); var logger14 = LoggingWizard.Spell.RollingFileLogger(fileNameProvider, levelVerifier, serializerApply, encoding, pipeCollection); #endregion Act #region Assert Assert.IsNotEmpty(logger1.Pipes); Assert.AreEqual(defaultMinLevel, logger1.RecordVerifier.CastTo <MinimumLogLevelVerifier>().MinimumLevel); Assert.AreEqual(defaultOutputTemplate, logger1.Serializer.CastTo <StringLogSerializer>().OutputTemplate); Assert.AreEqual(defaultEncoding, logger1.Encoding); Assert.AreEqual(folder, logger1.FileProvider.FolderPath); Assert.AreEqual(pipeCollection, logger2.Pipes); Assert.AreEqual(serializer, logger2.Serializer); Assert.AreEqual(encoding, logger2.Encoding); Assert.AreEqual(defaultMinLevel, logger2.RecordVerifier.CastTo <MinimumLogLevelVerifier>().MinimumLevel); Assert.AreEqual(folder, logger2.FileProvider.FolderPath); #endregion Assert }