private async Task GetTopNAndRespond(Update update, int N) { var counters = await _counterDao.GetCountersWithLimit(update.Message.Chat.Id, N); var userId = update.Message.From.Id; var userCounters = await Task.WhenAll(counters.Select(async(c) => new { User = await _userDao.GetUserById(c.userId), Counter = c.counter })); var result = userCounters.Select(uc => ((object)(uc.User != null ? uc.User.FirstName + " " + uc.User.LastName : "%Unknown%"), (object)uc.Counter) ).ToList(); var table = TableGenerator.GenerateTable("person", "words", result); await _client.SendTextMessageAsync( update.Message.Chat.Id, "<pre>" + table + "</pre>", replyToMessageId : update.Message.MessageId, parseMode : ParseMode.Html); }
public void TestOracleTableWithTrigger() { //arrange var schema = new DatabaseSchema(null, SqlType.Oracle); var table = schema.AddTable("Test"); var id = table.AddColumn <int>("Id").AddPrimaryKey(); id.IsAutoNumber = true; table.AddColumn <string>("Name").AddLength(200); table.Triggers.Add(new DatabaseTrigger { Name = "Test_INS_TRG", TriggerEvent = "INSERT", TriggerBody = @"BEGIN SELECT ""Test_SEQ"".NEXTVAL INTO :NEW.""Id"" FROM DUAL; END;", TriggerType = "BEFORE EACH ROW", }); var tableGen = new TableGenerator(table); //act var ddl = tableGen.Write(); //assert Assert.IsTrue(ddl.Contains("\"Id\" NUMBER (9) NOT NULL,"), "Table should include Id column " + ddl); //line breaks may cause environmental differences Assert.IsTrue(ddl.Contains(@"CREATE OR REPLACE TRIGGER ""Test_INS_TRG"""), "Table should include 'create trigger' " + ddl); Assert.IsTrue(ddl.Contains(@"SELECT ""Test_SEQ"".NEXTVAL INTO :NEW.""Id"" FROM DUAL;"), "Table should include trigger body " + ddl); }
static void Main(string[] args) { UWP uwp = new UWP(); uwp.Atmosphere.Value = 7; uwp.Hydro.Value = 7; uwp.Size.Value = 7; int tsize = 2; bool cepheus = true; foreach (string arg in args) { if (arg.Length > 0) { if (arg[0].ToString().Equals("/")) { if (arg.Length > 1) { tsize = int.Parse(arg[1].ToString()); if (tsize != 1 && tsize != 2) { throw new ArgumentException("Invalid table size"); } } } else { // it's a UPP if (arg.Length > 0) { uwp.Size.Value = int.Parse(arg[0].ToString(), System.Globalization.NumberStyles.HexNumber); } if (arg.Length > 1) { uwp.Atmosphere.Value = int.Parse(arg[1].ToString(), System.Globalization.NumberStyles.HexNumber); } if (arg.Length > 2) { uwp.Hydro.Value = int.Parse(arg[2].ToString(), System.Globalization.NumberStyles.HexNumber); } } } } if (!cepheus) { TableGenerator table = new TableGenerator(); table.Generate(tsize, uwp); table.WriteStreamAsText(Console.Out); } else { var tg = new Cepheus.TableGenerator(); var tables = tg.Generate(tsize, uwp); foreach (var t in tables) { t.WriteStreamAsText(Console.Out); } } }
public SimulateData() { InitializeComponent(); setupUI(); genetictable = new TableGenerator(this.tableGeneticModel); traitTable = new TableGenerator(this.panelTableContainer); popInfoTable = new TableGenerator(this.tableDataPrecentage); //set the format of the dates this.btnNext.MouseClick += BtnNext_MouseClick; this.btnBack.MouseClick += BtnBack_MouseClick; this.comboBoxTrait.SelectedIndexChanged += ComboBoxTrait_SelectedIndexChanged; popInfoTable.AmountOfRowsChanged += PopInfoTable_AmountOfRowsChanged; generateGeneticTable(); generatePopInfoTable(); SetDateTimeFormat(); /* * DataGeneratorPresentor dgp = new DataGeneratorPresentor(); * dgp.DefineChromosomeLength(); * dgp.DefineChromosomePositions(); * dgp.DefineParentalHaplotypes(); * dgp.SimulateRecombination(); * dgp.DefineQTL(); */ }
public Table AddTable <T>(string tableName) { var table = TableGenerator.GetTable(typeof(T), tableName); Add(table); return(table); }
public Table AddTable <T>(string tableName, ILocalizationStore localizationStore) { var table = TableGenerator.GetTable(typeof(T), tableName, localizationStore); Add(table); return(table); }
public virtual void SaveToXML(XmlElement objOrbit) { var nfi = System.Globalization.NumberFormatInfo.InvariantInfo; var xePlanet = objOrbit.OwnerDocument.CreateElement("Planet"); objOrbit.AppendChild(xePlanet); Common.CreateTextNode(xePlanet, "Type", PlanetType.ToString()); Common.CreateTextNode(xePlanet, "Dense", Dense.ToString()); Common.CreateTextNode(xePlanet, "Mass", Mass.ToString()); Common.CreateTextNode(xePlanet, "Gravity", Grav.ToString()); Common.CreateTextNode(xePlanet, "Pressure", Pressure.ToString()); Common.CreateTextNode(xePlanet, "MaxPop", Maxpop.ToString()); Common.CreateTextNode(xePlanet, "OrbitRange", OrbitRange.ToString()); Common.CreateTextNode(xePlanet, "OrbitNumber", OrbitNumber.ToString()); Common.CreateTextNode(xePlanet, "Tilt", Tilt.ToString()); Common.CreateTextNode(xePlanet, "Ecc", Ecc.ToString()); Common.CreateTextNode(xePlanet, "Rotation", Rotation.ToString()); Common.CreateTextNode(xePlanet, "TidallyLocked", TidallyLocked.ToString()); Common.CreateTextNode(xePlanet, "Temp", Temp.ToString()); Common.CreateTextNode(xePlanet, "Diameter", Diameter.ToString()); Common.CreateTextNode(xePlanet, "NumSats", Satellites.Count.ToString()); Common.CreateTextNode(xePlanet, "Mainworld", MainWorld.ToString()); Common.CreateTextNode(xePlanet, "NormalUWP", Normal.DisplayString(PlanetType, Diameter)); Common.CreateTextNode(xePlanet, "CollapseUWP", Collapse.DisplayString(PlanetType, Diameter)); Common.CreateTextNode(xePlanet, "Life", Life.ToString()); Common.CreateTextNode(xePlanet, "LifeFactor", LifeFactor.ToString()); Common.CreateTextNode(xePlanet, "Name", Name); var xeChild = objOrbit.OwnerDocument.CreateElement("Temperature"); for (var i = 0; i < (Constants.NUM_HEX_ROWS * 2) - 1; i += 2) { var xeTemp = objOrbit.OwnerDocument.CreateElement("Row" + (i / 2 + 1).ToString()); Common.CreateTextNode(xeTemp, "Summer", Summer[i].ToString("N", nfi) + "/" + Summer[i + 1].ToString("N", nfi)); Common.CreateTextNode(xeTemp, "Fall", Fall[i].ToString("N", nfi) + "/" + Fall[i + 1].ToString("N", nfi)); Common.CreateTextNode(xeTemp, "Winter", Winter[i].ToString("N", nfi) + "/" + Winter[i + 1].ToString("N", nfi)); xeChild.AppendChild(xeTemp); } xePlanet.AppendChild(xeChild); if (Life) { xeChild = objOrbit.OwnerDocument.CreateElement("AnimalEncounters"); TableGenerator.WriteToXML(xeChild); xePlanet.AppendChild(xeChild); } Normal.SaveToXML(xePlanet); Collapse.SaveToXML(xePlanet); foreach (var satellite in Satellites) { satellite.SaveToXML(xePlanet); } }
public LLkParser(TableGenerator tg, IEnumerable <Token> input) { _tg = tg; _input = input.GetEnumerator(); _stack = new Stack <_Entry>(); _nodeType = LLNodeType.Initial; _current = new List <Token>(); }
private TokenTableSet GenerateTable(int size, string alphabet) { var generator = new TableGenerator(new GeneratorSettings { Size = size, CharacterString = alphabet }); return(generator.Generate()); }
private TokenTableSet GenerateTable(int size, string alphabet, bool includeSpaces, bool includePunctuation, bool includeSpecialCharacters) { var generator = new TableGenerator(new GeneratorSettings { Size = size, CharacterString = alphabet, IncludeSpaces = includeSpaces, IncludePunctuation = includePunctuation, IncludeSpecialCharacters = includeSpecialCharacters }); return(generator.Generate()); }
public FileResult Post(List <IFormFile> files) { List <Model> Models = new List <Model>(); long size = files.Sum(f => f.Length); try { var filePath = Path.GetTempFileName(); foreach (var formFile in files) { if (formFile.Length > 0) { using (var reader = new StreamReader(formFile.OpenReadStream())) { string text = reader.ReadToEnd(); reader.Dispose(); string[] models = text.Split(new string[] { "class" }, StringSplitOptions.None); for (int i = 1; i < models.Length; i++) { Model m = new Model(models[i], "Test"); Models.Add(m); } } } } string fileName = "Project.txt"; byte[] bytes = new byte[0]; MemoryStream ms = new MemoryStream(); TextWriter tw = new StreamWriter(ms); List <string> downloads = new List <string>(); foreach (Model m in Models) { tw.WriteLine(APIControllerGenerator.Generate(m)); tw.WriteLine(RepositoryGenerator.Generate(m)); tw.WriteLine(ServiceGenerator.Generate(m)); tw.WriteLine(TableGenerator.Generate(m, Models)); } tw.Flush(); bytes = ms.ToArray(); ms.Dispose(); return(File(bytes, "application/x-msdownload", fileName)); } catch (Exception ex) { return(File("", "")); } }
/// <summary> /// Creates one record in the table, and applies the customDefinitions action to the record /// to specify values explicity. /// </summary> /// <example> /// var dataFactory = new DataFactory("myConfiguredConnection"); /// /// var generatedData = dataFactory.CreateOne("dbo.MyTable", t => { /// t.WithValue("MyColumn", "ABCDE"); /// }); /// /// // Print the id /// Console.WriteLine(generatedData["Id"]); /// </example> /// <param name="tableName">Table's name to create a record.</param> /// <returns>A dictionary including all generated values for this record, including their Id.</returns> public IDictionary <string, object> CreateOne(string tableName, Action <FactoryDefinition> customDefinitions) { TableGenerator tableGenerator = new TableGenerator(_databaseDialect, tableName); var generatedValues = tableGenerator.GenerateValues(customDefinitions); _tearDownStack.Push(() => tableGenerator.TearDown()); return(generatedValues); }
public static void Main(string[] args) { var cfg = new CfgDocument(); ParserHandler pn = new ParserHandler(); // S -> a A a a cfg.Rules.Add(new CfgRule("S", "a", "A", "a", "a")); // S -> b A b a cfg.Rules.Add(new CfgRule("S", "b", "A", "b", "a")); // A -> cfg.Rules.Add(new CfgRule("A")); // A -> b cfg.Rules.Add(new CfgRule("A", "b")); Console.WriteLine(cfg.ToString()); cfg.RebuildCache(); // faster if we do it this way var msgs = cfg.TryValidate(); var hasErrors = false; foreach (var msg in msgs) { Console.Error.WriteLine(msg); if (ErrorLevel.Error == msg.ErrorLevel) { hasErrors = true; } } if (hasErrors) { return; } pn.statusText = "ok"; pn.cfg = cfg; pn.finish(); var tg = new TableGenerator(); tg.construct(cfg, 2); Debug.Assert(3 == tg.Tcounter, "Test failed"); Debug.Assert(string.Join(" ", tg.LLksf) == "T:S,{} T:A,{a:a} T:A,{b:a}", "Test failed"); Debug.Assert(string.Join(" ", tg.PT.fif) == "T0 T1 T2 :a :b |$", "Test failed"); Debug.Assert(string.Join(" ", tg.PT.sif) == "a:a a:b a b:a b:b b ", "Test failed"); Debug.Assert(6 == tg.PT.field.Count, "Test failed"); for (var i = 0; i < tg.PT.field.Count; ++i) { var fld = tg.PT.field[i]; Debug.Assert(7 == fld.Count, "Test failed"); } return; }
public void SelectAndUpdateStringContainCustomWhere() { const string customWhere = "table_name='second'"; var dialect = new MsSql2005Dialect(); var tg = new TableGenerator(); tg.Configure(NHibernateUtil.Int64, new Dictionary <string, string> { { "where", customWhere } }, dialect); Assert.That(selectSql.GetValue(tg).ToString(), Is.StringContaining(customWhere)); Assert.That(updateSql.GetValue(tg).ToString(), Is.StringContaining(customWhere)); }
private void Awake() { var parameter = SceneLoader.GetParam("difficulty"); if (parameter != "") { TileCount = System.Int32.Parse(parameter); } generator = new TableGenerator(TileCount * TileCount * 10); gameManager = FindObjectOfType <GameManager> (); }
public void CanSerliaiseTable() { var serialiser = new Serialisation(); var generator = new TableGenerator(new GeneratorSettings { CharacterString = Alphabet.English, Size = 1000 }); var table = generator.Generate(); var result = serialiser.Serliaise(table); var key = table.ForwardTable[0].Keys.ToList()[0]; var expectedText = "{\"ForwardTable\":{\"columns\":[{\"rows\":[{\"f\":" + (int)key + ",\"t\":" + (int)table.ForwardTable[0][key].Item1 + ",\"n\":" + table.ForwardTable[0][key].Item2 + "},"; Assert.IsTrue(result.Contains(expectedText)); }
public void PartialRow() { var headers = new string[] { "h1", "h2", "h3" }; var table = new string[][][] { new string[][] { new string[] { "c1", "c2" } } }; Console.WriteLine(TableGenerator.Generate(headers, table, OutputFormat.Txt)); }
protected virtual bool DoAreas(string rawParameters, params CommandParameter[] parameters) { TableGenerator <IArea> generator = new TableGenerator <IArea>("Areas"); generator.AddColumn("Name", 30, area => area.DisplayName, TableGenerator <IArea> .AlignLeftFunc); generator.AddColumn("Min", 5, area => area.MinLevel.ToString()); generator.AddColumn("Max", 5, area => area.MaxLevel.ToString()); generator.AddColumn("Builders", 15, area => area.Builders, TableGenerator <IArea> .AlignLeftFunc); generator.AddColumn("Credits", 40, area => area.Credits, TableGenerator <IArea> .AlignLeftFunc); StringBuilder sb = generator.Generate(DependencyContainer.Instance.GetInstance <IWorld>().Areas); Page(sb); return(true); }
public void CanCompressATokenTableAndDecompressIt() { var compressor = new Compression(); var serialiser = new Serialisation(); var generator = new TableGenerator(new GeneratorSettings { CharacterString = Alphabet.English, Size = 1000 }); var table = generator.Generate(); var serialised = serialiser.Serliaise(table); var result = compressor.Compress(serialised); Assert.IsTrue(serialised.Length > result.Length); result = compressor.Decompress(result); Assert.AreEqual(serialised, result); }
public void TestSqlServerTableWithIdentity() { //arrange var schema = new DatabaseSchema(null, SqlType.SqlServer); var table = schema.AddTable("Test") .AddColumn <int>("Id").AddIdentity() .AddColumn <string>("Name").AddLength(200) .Table; var tableGen = new TableGenerator(table); //act var ddl = tableGen.Write(); //assert Assert.IsTrue(ddl.Contains("[Id] INT IDENTITY(1,1) NOT NULL")); }
public void Cepheus1D6TableTest() { UWP uwp = new UWP(); uwp.Atmosphere.Value = 7; uwp.Hydro.Value = 7; uwp.Size.Value = 7; var tg = new TableGenerator(); var tables = tg.Generate(1, uwp); foreach (var t in tables) { t.WriteStreamAsText(Console.Out); } }
private void Button1_Click_1(object sender, EventArgs e) { LoadingSpinner ls = new LoadingSpinner(this, AppMessages.messages["data_save"]); try { ls.show(); ExcelReader excelReader = new ExcelReader(); excelReader.saveExcelFromDataGridView( new DataGridView[2] { dataGridView1, dataGridView2 }, new int[2] { 1, 2 }, new string[2] { "Sales Forecast", "Cost Of Sales" } ); TableGenerator tbl = new TableGenerator(); tbl.GenerateMultipleTable(new DataGridView[2] { dataGridView1, dataGridView2 }, "sales_forecast_table.rtf", new string[2] { "Sales Forecast", "Cost Of Sales" }); ChartGenerator cgr = new ChartGenerator(); cgr.generateBarChart(dataGridView1, "generate.png", "Forecast Sales"); cgr.ImageToRtf("sales_forecast_table.rtf", "generate.png"); cgr.generateBarChart(dataGridView2, "generate1.png", "Cost of Sales"); cgr.ImageToRtf("sales_forecast_table.rtf", "generate1.png"); Label l = mw.Controls.Find("label4", true)[0] as Label; ProgressBar pbar = mw.Controls.Find("progressBar1", true)[0] as ProgressBar; dgp.updateProgress("sales_forecast_table.rtf", dataGridView1.Rows.Count > 0 && dataGridView2.Rows.Count > 0 ? 1 : 0); l.Text = dgp.completedSteps().ToString() + " /"; pbar.Value = dgp.completedSteps(); l.Refresh(); } catch (Exception ex) { MessageBox.Show("Exception: " + ex.Message); } finally { ls.hide(); } }
static void Main(string[] args) { var name = "t_to_gen.json"; FileReader reader = new FileReader(); reader.Read(name); var emuns = EnumsGenerator.Generate(reader.enumerators); var table = TableGenerator.Generate(EnumsGenerator.arrays, "SimpleTable"); Console.WriteLine(table); using (var textWriter = new StreamWriter(name + "asdas", false, Encoding.ASCII)) { textWriter.WriteLine(emuns); textWriter.WriteLine(table); } }
public void TestSqlServerConversionTableWithIdentity() { //arrange var schema = new DatabaseSchema(null, SqlType.SqlServer); var table = schema.AddTable("Test") .AddColumn <int>("Id").AddPrimaryKey().AddIdentity() .AddColumn <string>("Name").AddLength(200) .Table; var tableGen = new TableGenerator(table); //act var ddl = tableGen.Write(); //assert Assert.IsTrue(ddl.Contains("\"Id\" NUMBER (9) NOT NULL,")); Assert.IsTrue(ddl.Contains(@"CREATE OR REPLACE TRIGGER "), "Creates a trigger"); }
public void TestSqlServerCeTableWithIdentity() { //arrange var schema = new DatabaseSchema(null, SqlType.SqlServerCe); var table = schema.AddTable("Test") .AddColumn <int>("Id").AddIdentity().AddPrimaryKey() .AddColumn <string>("Name").AddLength(200) .Table; var tableGen = new TableGenerator(table); //act var ddl = tableGen.Write(); //assert Assert.IsTrue(ddl.Contains("GO")); //batch separators Assert.IsFalse(ddl.Contains(";")); //valid but useless in SqlServer CE because you can't batch }
public void TestOracle12TableWithIdentityAutoNumber() { //arrange var schema = new DatabaseSchema(null, SqlType.Oracle); var table = schema.AddTable("Test") .AddColumn <int>("Id").AddPrimaryKey().AddIdentity() .AddColumn <string>("Name").AddLength(200) .Table; var tableGen = new TableGenerator(table); //acts var ddl = tableGen.Write(); //assert Assert.IsTrue(ddl.Contains("\"Id\" NUMBER (9) NOT NULL GENERATED AS IDENTITY")); Assert.IsFalse(ddl.Contains(@"CREATE OR REPLACE TRIGGER ")); }
public void TestSqlServerTableWithTableDescription() { //arrange var schema = new DatabaseSchema(null, SqlType.SqlServer); var table = schema.AddTable("Test"); table.Description = "This is the table's description"; table.AddColumn <int>("Id").AddPrimaryKey(); var tableGen = new TableGenerator(table); //act var ddl = tableGen.Write(); //assert Assert.IsTrue(ddl.Contains("EXEC sys.sp_addextendedproperty")); Assert.IsTrue(ddl.Contains("'This is the table''s description'")); }
private void Button1_Click(object sender, EventArgs e) { if (validateData()) { LoadingSpinner ls = new LoadingSpinner(this, AppMessages.messages["data_save"]); try { ls.show(); ExcelReader excelReader = new ExcelReader(); excelReader.saveExcelFromDataGridView( new DataGridView[1] { dataGridView1 }, new int[1] { 1 }, new string[1] { "Market Analysis" } ); TableGenerator tbl = new TableGenerator(); tbl.Generate(dataGridView1, "market_analysis.rtf"); ChartGenerator cgen = new ChartGenerator(); cgen.generatePieChart(dataGridView1, "generated.png", "Market Analysis"); cgen.ImageToRtf("market_analysis.rtf", "generated.png"); Label l = mw.Controls.Find("label4", true)[0] as Label; ProgressBar pbar = mw.Controls.Find("progressBar1", true)[0] as ProgressBar; dgp.updateProgress("market_analysis.rtf", dataGridView1.Rows.Count > 0 ? 1 : 0); l.Text = dgp.completedSteps().ToString() + " /"; pbar.Value = dgp.completedSteps(); l.Refresh(); } catch (Exception ex) { MessageBox.Show("Exception: " + ex.Message); } finally { ls.hide(); } } else { MessageBox.Show("Percentage cannot exceed 100 !"); } }
public static void Generate(string resPath, string outFilePath) { Assert.IsTrue(!string.IsNullOrEmpty(resPath)); Assert.IsTrue(!string.IsNullOrEmpty(outFilePath) && outFilePath.EndsWith(".cs")); int start = outFilePath.LastIndexOf('/') + 1; int end = outFilePath.LastIndexOf(".cs"); string className = outFilePath.Substring(start, end - start); string contents = new TableGenerator(resPath, className).Generate(); byte[] data = Encoding.UTF8.GetBytes(contents); using (FileStream writer = File.Create(outFilePath, data.Length)) { writer.Write(data, 0, data.Length); Debug.Log("Created: " + outFilePath); } }
public void ApplyTable(OpenApiSchema schema, SchemaFilterContext context, TableGenerator table) { ApplyTableProperties(schema, context.Type, context, table); var baseType = context.Type.BaseType; while (baseType?.IsGenericType ?? false) { ApplyTableProperties(schema, baseType, context, table); baseType = baseType.BaseType; } if (!context.Type.IsAbstract) { var itemType = DBTable.GetItemTypeAttribute(context.Type); schema.Extensions.Add("x-type-id", new OpenApiInteger(itemType?.Attribute.Id ?? 0)); if (context.Type == table.ItemType) { var mapping = new Dictionary <string, string>(); foreach (var type in table.Types) { var itemTypeAttribute = DBTable.GetItemTypeAttribute(type); if (itemTypeAttribute != null) { var itemTypeSchema = context.SchemaGenerator.GenerateSchema(type, context.SchemaRepository); mapping.Add(itemTypeAttribute.Attribute.Id.ToString(), itemTypeSchema.Reference.ReferenceV3); } } if (mapping.Count > 0) { schema.Discriminator = new OpenApiDiscriminator { PropertyName = table.TypeKey.PropertyName }; schema.Discriminator.Mapping["0"] = $"#/components/schemas/{context.Type.Name}"; foreach (var mapItem in mapping) { schema.Discriminator.Mapping[mapItem.Key] = mapItem.Value; } } } } else { schema.Extensions.Add("x-type-id", new OpenApiInteger(-1)); } }
public void TestSqlServerTableWithSequenceAutoNumber() { //arrange var schema = new DatabaseSchema(null, SqlType.SqlServer); var table = schema.AddTable("Test"); var id = table.AddColumn <int>("Id").AddPrimaryKey(); id.DefaultValue = "NEXT VALUE FOR [MySequence]"; id.IsAutoNumber = true; //but id.IdentityDefinition == null table.AddColumn <string>("Name").AddLength(200); var tableGen = new TableGenerator(table); //act var ddl = tableGen.Write(); //assert Assert.IsTrue(ddl.Contains("[Id] INT NOT NULL DEFAULT NEXT VALUE FOR [MySequence]")); }
public void SetUp() { _tags = MockRepository.GenerateStub<ITagGenerator<MyModel>>(); _generator = new TableGenerator<MyModel>(_tags); _data = new MyModel[] { new MyModel {Foo = new FooClass(), Bar = new BarClass(), Woo = "woo", Number = 1, NotUsed = 2}, new MyModel {Foo = new FooClass(), Bar = new BarClass(), Woo = "woohoo", Number = 2, NotUsed = 3}, new MyModel {Foo = new FooClass(), Bar = new BarClass(), Woo = "woodeedoo", Number = 3, NotUsed = 4} }; _generator.AddColumnWithDisplayFor(_barExp); _generator.AddColumnWithDisplayFor(_fooExp, "this is some foo"); _generator.AddColumnWithDisplayFor(_wooExp, new LinkTag("a link to nowhere", "http://nowhere")); _generator.AddColumnWithDefaultHeaderAndDisplayFor(_numberExp, tr => tr.AddClass("number")); _capturedModels = new List<MyModel>(); Action<object> modelCapture = m => { _currentModel = m as MyModel; _capturedModels.Add(_currentModel); }; _capturedExpressions = new List<Expression<Func<MyModel, object>>>(); _tags.Stub(t => t.SetModel(null)).IgnoreArguments().Do(modelCapture); Func<Expression<Func<MyModel, object>>, HtmlTag> df = (e) => { _capturedExpressions.Add(e); var data = e.Compile().Invoke(_currentModel); var tag = new HtmlTag("span").Text(data.ToString()); return tag; }; Expression<Func<MyModel, object>> exp = null; _tags.Stub(t => t.DisplayFor(exp)).IgnoreArguments().Do(df); }