public static void AddListener(IOutputListener listener) { lock (sync) { listeners.Add(listener); } }
public IOutputListener addOutputListener(string[] ports) { IOutputListener listener = this.createOutputListener(ports); this.output_listeners.Add(listener); return(listener); }
public override void ExitRule(IParseTreeListener listener) { IOutputListener typedListener = listener as IOutputListener; if (typedListener != null) { typedListener.ExitText(this); } }
public override void EnterRule(IParseTreeListener listener) { IOutputListener typedListener = listener as IOutputListener; if (typedListener != null) { typedListener.EnterParams(this); } }
public void testXML(string file_path) { XElement test_xml = XDocument.Load(file_path).Root.Element("test"); Assert.AreNotEqual(null, test_xml, "No test data found. (A test that should just compile correctly, still needs an empthy test tag.)"); //Calculate path to output file this.path_generated_code = Path.ChangeExtension(Path.GetFileName(file_path), ".cs"); this.keep_after_test = false; if (File.Exists(this.path_generated_code)) { this.keep_after_test = true; File.Delete(this.path_generated_code); } string expected_exception = null; if (test_xml.Attribute("exception") != null && test_xml.Attribute("exception").Value.Trim() != "") { expected_exception = test_xml.Attribute("exception").Value.Trim(); } //Call code generator if (!this.generate(file_path, expected_exception)) { return; } //Compile generated code CodeCompiler code_compiler = new CodeCompiler(); code_compiler.AddReferencedAssembly("System.dll"); code_compiler.AddReferencedAssembly("sccdlib.dll"); Assembly assembly = code_compiler.compileFile(this.path_generated_code); Type class_type = assembly.GetType("Controller"); //Prepare expected output XElement expected_xml = test_xml.Element("expected"); if (expected_xml == null) { return; } HashSet <string> output_ports = new HashSet <string>(); List <List <TestEvent> > expected_result = new List <List <TestEvent> >(); foreach (XElement slot_xml in expected_xml.Elements("slot")) { List <TestEvent> slot = new List <TestEvent>(); foreach (XElement event_xml in slot_xml.Elements("event")) { string event_name = event_xml.Attribute("name").Value; string port = event_xml.Attribute("port").Value; List <string> parameters = new List <string>(); foreach (XElement parameter_xml in event_xml.Elements("parameter")) { string parameter_value = parameter_xml.Attribute("value").Value; parameters.Add(parameter_value); } slot.Add(new TestEvent(event_name, port, parameters)); output_ports.Add(port); } if (slot.Count > 0) { expected_result.Add(slot); } } //Prepare model ThreadsControllerBase controller = (ThreadsControllerBase)Activator.CreateInstance(class_type, new object [] { false }); IOutputListener output_listener = controller.addOutputListener(output_ports.ToArray()); //Input XElement input_xml = test_xml.Element("input"); if (input_xml != null) { foreach (XElement event_xml in input_xml.Elements("event")) { controller.addInput(new Event(event_xml.Attribute("name").Value, event_xml.Attribute("port").Value), Convert.ToDouble(event_xml.Attribute("time").Value)); } } //Execute model controller.start(); controller.join(); //Check output for (int slot_index = 0; slot_index < expected_result.Count; slot_index++) { List <TestEvent> slot = expected_result[slot_index]; List <TestEvent> remaining_options = new List <TestEvent>(slot); List <Event> received_output = new List <Event>(); while (remaining_options.Count > 0) { Event output_event = output_listener.fetch(); Assert.AreNotEqual(null, output_event, string.Format("Expected results slot {0} mismatch. Expected [{1}], but got [{2}] followed by null instead.", slot_index, string.Join(", ", slot), string.Join(", ", received_output)) ); received_output.Add(output_event); int i = 0; foreach (TestEvent option in remaining_options) { if (option.matches(output_event)) { break; } i++; } //Mismath? Assert.AreNotEqual(remaining_options.Count, i, string.Format("Expected results slot {0} mismatch. Expected [{1}], but got [{2}] instead.", slot_index, string.Join(", ", slot), string.Join(", ", received_output)) ); remaining_options.RemoveAt(i); } } //check if there are no extra events Assert.AreEqual(null, output_listener.fetch(), "More output events than expected on selected ports."); }
public IntcodeComputer(IInputProvider inputProvider, IOutputListener outputListener) { _inputProvider = inputProvider; _outputListener = outputListener; }
public IntcodeComputer() { _inputProvider = new ConsoleInputProvider(); _outputListener = new ConsoleOutputListener(); }