private IExpression CreateSimpleBinary(RelativePath binaryFile) { var pdbPath = binaryFile.ChangeExtension(m_pathTable.StringTable, m_pdbExtension); var xmlPath = binaryFile.ChangeExtension(m_pathTable.StringTable, m_xmlExtension); return(new CallExpression( PropertyAccess("Managed", "Factory", "createBinaryFromFiles"), GetFileExpressionForPath(binaryFile), m_packageOnDisk.Contents.Contains(pdbPath) ? GetFileExpressionForPath(pdbPath) : null, m_packageOnDisk.Contents.Contains(xmlPath) ? GetFileExpressionForPath(xmlPath) : null)); }
/// <summary> /// Adds or changes the file extension of a relative path, returning a new relative path. /// </summary> /// <param name="path">The original relative path that may or may not have an extension.</param> /// <param name="extension">The new extension (this string must include a leading .). If this is PathAtom.Invalid then this method is equivalent to calling RemoveExtension instead.</param> public RelativePath ChangeExtension(RelativePath path, PathAtom extension) { Contract.Requires(path.IsValid); Contract.Ensures(Contract.Result <RelativePath>().IsValid); return(path.ChangeExtension(m_stringTable, extension)); }
public void ChangeExtension() { var st = new StringTable(0); // change a single char extension RelativePath rp1 = RelativePath.Create(st, @"a.c"); RelativePath rp2 = rp1.ChangeExtension(st, PathAtom.Create(st, ".d")); XAssert.AreEqual(@"a.d", rp2.ToString(st)); // change a multi char extension rp1 = RelativePath.Create(st, @"a.cpp"); rp2 = rp1.ChangeExtension(st, PathAtom.Create(st, ".d")); XAssert.AreEqual(@"a.d", rp2.ToString(st)); // change nothing rp1 = RelativePath.Create(st, @"a"); rp2 = rp1.ChangeExtension(st, PathAtom.Create(st, ".d")); XAssert.AreEqual(@"a.d", rp2.ToString(st)); // change a single char extension rp1 = RelativePath.Create(st, @"ab.c"); rp2 = rp1.ChangeExtension(st, PathAtom.Create(st, ".d")); XAssert.AreEqual(@"ab.d", rp2.ToString(st)); // change a multi char extension rp1 = RelativePath.Create(st, @"ab.cpp"); rp2 = rp1.ChangeExtension(st, PathAtom.Create(st, ".d")); XAssert.AreEqual(@"ab.d", rp2.ToString(st)); // change nothing rp1 = RelativePath.Create(st, @"ab"); rp2 = rp1.ChangeExtension(st, PathAtom.Create(st, ".d")); XAssert.AreEqual(@"ab.d", rp2.ToString(st)); // change a single char extension rp1 = RelativePath.Create(st, @"ab.xyz.c"); rp2 = rp1.ChangeExtension(st, PathAtom.Create(st, ".d")); XAssert.AreEqual(@"ab.xyz.d", rp2.ToString(st)); // change a multi char extension rp1 = RelativePath.Create(st, @"ab.xyz.cpp"); rp2 = rp1.ChangeExtension(st, PathAtom.Create(st, ".d")); XAssert.AreEqual(@"ab.xyz.d", rp2.ToString(st)); rp1 = RelativePath.Create(st, @".cpp"); rp2 = rp1.ChangeExtension(st, PathAtom.Create(st, ".d")); XAssert.AreEqual(@".d", rp2.ToString(st)); // change a single char extension rp1 = RelativePath.Create(st, @"xyz\a.c"); rp2 = rp1.ChangeExtension(st, PathAtom.Create(st, ".d")); XAssert.AreEqual(@"xyz\a.d", rp2.ToString(st)); // change a multi char extension rp1 = RelativePath.Create(st, @"xyz\a.cpp"); rp2 = rp1.ChangeExtension(st, PathAtom.Create(st, ".d")); XAssert.AreEqual(@"xyz\a.d", rp2.ToString(st)); // change nothing rp1 = RelativePath.Create(st, @"xyz\a"); rp2 = rp1.ChangeExtension(st, PathAtom.Create(st, ".d")); XAssert.AreEqual(@"xyz\a.d", rp2.ToString(st)); // change a single char extension rp1 = RelativePath.Create(st, @"xyz\ab.c"); rp2 = rp1.ChangeExtension(st, PathAtom.Create(st, ".d")); XAssert.AreEqual(@"xyz\ab.d", rp2.ToString(st)); // change a multi char extension rp1 = RelativePath.Create(st, @"xyz\ab.cpp"); rp2 = rp1.ChangeExtension(st, PathAtom.Create(st, ".d")); XAssert.AreEqual(@"xyz\ab.d", rp2.ToString(st)); // change nothing rp1 = RelativePath.Create(st, @"xyz\ab"); rp2 = rp1.ChangeExtension(st, PathAtom.Create(st, ".d")); XAssert.AreEqual(@"xyz\ab.d", rp2.ToString(st)); // change a single char extension rp1 = RelativePath.Create(st, @"xyz\ab.xyz.c"); rp2 = rp1.ChangeExtension(st, PathAtom.Create(st, ".d")); XAssert.AreEqual(@"xyz\ab.xyz.d", rp2.ToString(st)); // change a multi char extension rp1 = RelativePath.Create(st, @"xyz\ab.xyz.cpp"); rp2 = rp1.ChangeExtension(st, PathAtom.Create(st, ".d")); XAssert.AreEqual(@"xyz\ab.xyz.d", rp2.ToString(st)); rp1 = RelativePath.Create(st, @"xyz\.cpp"); rp2 = rp1.ChangeExtension(st, PathAtom.Create(st, ".d")); XAssert.AreEqual(@"xyz\.d", rp2.ToString(st)); // nop change rp1 = RelativePath.Create(st, @"xyz\ab.xyz.cpp"); rp2 = rp1.ChangeExtension(st, PathAtom.Create(st, ".cpp")); XAssert.AreEqual(rp1, rp2); rp1 = RelativePath.Create(st, @"xyz\ab.xyz.cpp"); rp2 = rp1.ChangeExtension(st, PathAtom.Invalid); XAssert.AreEqual(@"xyz\ab.xyz", rp2.ToString(st)); }