private void TestFormat(string expression, string result) { var inputStream = new AntlrInputStream(expression); var lexer = new Z80EvalLexer(inputStream); var tokenStream = new CommonTokenStream(lexer); var evalParser = new Z80EvalParser(tokenStream); var context = evalParser.compileUnit(); var visitor = new Z80EvalVisitor(); var z80Expr = (Z80ExpressionNode)visitor.Visit(context); evalParser.SyntaxErrors.Count.ShouldBe(0); var value = z80Expr.Expression.Evaluate(new FakeEvaluationContext()); var formatted = WatchToolWindowViewModel.FormatWatchExpression(z80Expr.Expression, value, z80Expr.FormatSpecifier?.Format); formatted.ShouldBe(result); }
/// <summary> /// Initialization of the package; this method is called right after the package is sited, so this is the place /// where you can put all the initialization code that rely on services provided by VisualStudio. /// </summary> /// <param name="cancellationToken">A cancellation token to monitor for initialization cancellation, which can occur when VS is shutting down.</param> /// <param name="progress">A provider for progress updates.</param> /// <returns>A task representing the async work of package initialization, or an already completed task if there is none. Do not return null from this method.</returns> protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress <ServiceProgressData> progress) { await base.InitializeAsync(cancellationToken, progress); // --- Background initialization part Default = this; // --- Prepare project system extension files CheckCpsFiles(); Z80AsmLanguage = new Z80AsmLanguageService(this); // --- Special providers for the ZX Spectrum virtual machine DebugInfoProvider = new VsIntegratedSpectrumDebugInfoProvider(); SpectrumMachine.Reset(); SpectrumMachine.RegisterDefaultProviders(); SpectrumMachine.RegisterProvider <IRomProvider>(() => new PackageRomProvider()); SpectrumMachine.RegisterProvider <IBeeperProvider>(() => new AudioWaveProvider()); SpectrumMachine.RegisterProvider <ISoundProvider>(() => new AudioWaveProvider(AudioProviderType.Psg)); SpectrumMachine.RegisterProvider <ITapeLoadProvider>(() => new VsIntegratedTapeLoadProvider()); SpectrumMachine.RegisterProvider <ITapeSaveProvider>(() => new VsIntegratedTapeSaveProvider()); SpectrumMachine.RegisterProvider <IKempstonProvider>(() => new KempstonProvider()); SpectrumMachine.RegisterProvider <ISpectrumDebugInfoProvider>(() => DebugInfoProvider); SpectrumMachine.RegisterStackDebugSupport(new SimpleStackDebugSupport()); // --- Initialize other services BreakpointChangeWatcher = new BreakpointChangeWatcher(); BreakpointChangeWatcher.Start(); // --- Main thread initialization part await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken); // --- Initialize the package here InitializeCommands(); // --- Register custom editors RegisterEditorFactory(new RomEditorFactory()); RegisterEditorFactory(new TzxEditorFactory()); RegisterEditorFactory(new TapEditorFactory()); // --- Manage the solution and its events Solution = new SolutionStructure(); Solution.ActiveProjectChanged += OnActiveProjectChanged; ErrorList = new ErrorListWindow(); TaskList = new TaskListWindow(); // --- Create view models EmulatorViewModel = new EmulatorViewModel(); SpectrumViewModel = new SpectrumEmulatorToolWindowViewModel(); KeyboardToolModel = new KeyboardToolWindowViewModel(); RegistersViewModel = new RegistersToolWindowViewModel(); MemoryViewModel = new MemoryToolWindowViewModel(); DisassemblyViewModel = new DisassemblyToolWindowViewModel(); StackViewModel = new StackToolWindowViewModel(); BasicListViewModel = new BasicListToolWindowViewModel(); WatchViewModel = new WatchToolWindowViewModel(); // --- Prepare the provider for debugging DebugInfoProvider.Prepare(); // --- Prepare language services Z80AsmClassifierProvider.AttachToPackage(); Z80AsmViewTaggerProvider.AttachToPackage(); Log("SpectNetIdePackage initialized."); }