public void RangeCase7Test() { var mwb = MockWorkbook.standardMockWorkbook(); var e = mwb.envForSheet(1); String s = "A1,A2:A3,A4"; AddrPair[] addrpairs = { new AddrPair( AST.Address.fromA1withMode(1, "A", AST.AddressMode.Relative, AST.AddressMode.Relative, e.WorksheetName, e.WorkbookName, e.Path), AST.Address.fromA1withMode(1, "A", AST.AddressMode.Relative, AST.AddressMode.Relative, e.WorksheetName, e.WorkbookName, e.Path) ), new AddrPair( AST.Address.fromA1withMode(2, "A", AST.AddressMode.Relative, AST.AddressMode.Relative, e.WorksheetName, e.WorkbookName, e.Path), AST.Address.fromA1withMode(3, "A", AST.AddressMode.Relative, AST.AddressMode.Relative, e.WorksheetName, e.WorkbookName, e.Path) ), new AddrPair( AST.Address.fromA1withMode(4, "A", AST.AddressMode.Relative, AST.AddressMode.Relative, e.WorksheetName, e.WorkbookName, e.Path), AST.Address.fromA1withMode(4, "A", AST.AddressMode.Relative, AST.AddressMode.Relative, e.WorksheetName, e.WorkbookName, e.Path) ) }; AST.Reference r = Parcel.simpleReferenceParser(s, e); AST.Reference correct = new AST.ReferenceRange(e, new AST.Range(addrpairs)); Assert.AreEqual(r, correct); }
public void standardAddress() { var mwb = MockWorkbook.standardMockWorkbook(); var e = mwb.envForSheet(1); String s = "A3"; AST.Reference r = Parcel.simpleReferenceParser(s, e); AST.Reference correct = new AST.ReferenceAddress(e, AST.Address.fromA1withMode(3, "A", AST.AddressMode.Relative, AST.AddressMode.Relative, e.WorksheetName, e.WorkbookName, e.Path)); Assert.AreEqual(r, correct); }
public void standardRange() { var mwb = MockWorkbook.standardMockWorkbook(); var e = mwb.envForSheet(1); String s = "A3:B22"; AST.Reference r = Parcel.simpleReferenceParser(s, e); AST.Reference correct = new AST.ReferenceRange(e, new AST.Range(Utility.makeAddressForA1("A", 3, e), Utility.makeAddressForA1("B", 22, e)) ); Assert.AreEqual(r, correct); }
public void mixedRangeTest2() { var mwb = MockWorkbook.standardMockWorkbook(); var e = mwb.envForSheet(1); String s = "A$1:B$1"; AST.Range range = new AST.Range( AST.Address.fromA1withMode(1, "A", AST.AddressMode.Absolute, AST.AddressMode.Relative, e.WorkbookName, e.WorkbookName, e.Path), AST.Address.fromA1withMode(1, "B", AST.AddressMode.Absolute, AST.AddressMode.Relative, e.WorkbookName, e.WorkbookName, e.Path) ); AST.Reference r = Parcel.simpleReferenceParser(s, e); AST.Reference correct = new AST.ReferenceRange(e, range); Assert.AreEqual(r, correct); }
private FSharpOption <BugClass> DualsFor(AST.Address addr) { // extract address environment var env = new AST.Env(addr.Path, addr.WorkbookName, addr.WorksheetName); // duals regexp var r = new Regex(@".*dual\s*=\s*((?<AddrOrRange>[A-Z]+[0-9]+(:?:[A-Z]+[0-9]+)?)(:?\s*,\s*)?)+", RegexOptions.Compiled); // get note for this address var note = _notes[addr]; Match m = r.Match(note); if (!m.Success) { if (note.Contains("dual")) { Console.Out.WriteLine("Malformed dual annotation for cell " + addr.A1FullyQualified() + " : " + note); } return(FSharpOption <BugClass> .None); } else { // init duals list var duals = new List <AST.Address>(); var cs = m.Groups["AddrOrRange"].Captures; foreach (Capture c in cs) { // get string value string addrOrRange = c.Value; AST.Reference xlref = null; try { // parse xlref = Parcel.simpleReferenceParser(addrOrRange, env); } catch (Exception e) { var msg = "Bad reference: '" + addrOrRange + "'"; Console.Out.WriteLine(msg); throw new Exception(msg); } // figure out the reference type if (xlref.Type == AST.ReferenceType.ReferenceRange) { var rrref = (AST.ReferenceRange)xlref; duals.AddRange(rrref.Range.Addresses()); } else if (xlref.Type == AST.ReferenceType.ReferenceAddress) { var aref = (AST.ReferenceAddress)xlref; duals.Add(aref.Address); } else { throw new Exception("Unsupported address reference type."); } } var bugclass = new BugClass(duals); return(FSharpOption <BugClass> .Some(bugclass)); } }