using Perforce.P4; using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Diagnostics; using NLog; namespace p4api.net.unit.test { /// ///This is a test class for RepositoryTest and is intended ///to contain all RepositoryTest Unit Tests /// [TestClass()] public partial class RepositoryTest { private static Logger logger = LogManager.GetCurrentClassLogger(); public TestContext TestContext { get; set; } [TestInitialize] public void SetupTest() { Utilities.LogTestStart(TestContext); } [TestCleanup] public void CleanupTest() { Utilities.LogTestFinish(TestContext); } String TestDir = "c:\\MyTestDir"; #region Additional test attributes // //You can use the following additional attributes as you write your tests: // //Use ClassInitialize to run code before running the first test in the class //[ClassInitialize()] //public static void MyClassInitialize(TestContext testContext) //{ //} // //Use ClassCleanup to run code after all tests in a class have run //[ClassCleanup()] //public static void MyClassCleanup() //{ //} // //Use TestInitialize to run code before running each test //[TestInitialize()] //public void MyTestInitialize() //{ //} // //Use TestCleanup to run code after each test has run //[TestCleanup()] //public void MyTestCleanup() //{ //} // #endregion /// ///A test for GetDepotFiles /// [TestMethod()] [DeploymentItem("p4api.net.dll")] public void GetDepotFilesTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 2, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); FileSpec fs = new FileSpec(new DepotPath("//depot/..."), null); List lfs = new List(); lfs.Add(fs); IList target = rep.GetDepotFiles(lfs, null); Assert.IsNotNull(target); bool foundit = false; foreach (FileSpec f in target) { if (f.DepotPath.Path == "//depot/MyCode/ReadMe.txt") { foundit = true; break; } } Assert.IsTrue(foundit); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetDepotFilesInUnloaded /// [TestMethod()] [DeploymentItem("p4api.net.dll")] public void GetDepotFilesInUloadedTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 2, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Depot depot = new Depot("Unloaded", DepotType.Unload, DateTime.Now, null, "admin", "desc", ".p4s", "Unloaded/...", "//Unloaded/1", null); depot.Id = "Unloaded"; depot.Type = DepotType.Unload; rep.CreateDepot(depot); Options options = new Options(); options["-c"] = "admin_space2"; P4Command cmd = new P4Command(con, "unload", true, null); try { cmd.Run(options); } catch { } GetDepotFilesCmdOptions opts = new GetDepotFilesCmdOptions(GetDepotFilesCmdFlags.InUnloadDepot, 0); FileSpec fs = new FileSpec(new DepotPath("//Unloaded/..."), null); List lfs = new List(); lfs.Add(fs); IList target = rep.GetDepotFiles(lfs, opts); Assert.IsNotNull(target); Assert.AreEqual(target.Count, 1); Assert.AreEqual(target[0].DepotPath.Path, "//Unloaded/client/admin_space2.ckp"); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetDepotFilesInArchiveTest /// [TestMethod()] [DeploymentItem("p4api.net.dll")] public void GetDepotFilesInArchiveTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 2, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Depot depot = new Depot("Archive", DepotType.Archive, DateTime.Now, null, "admin", "desc", ".p4s", "Archive/...", "//Archive/1", null); depot.Id = "Archive"; depot.Type = DepotType.Archive; rep.CreateDepot(depot); Options options = new Options(); options["-D"] = "Archive"; P4Command cmd = new P4Command(con, "archive", true, "//depot/TheirCode/..."); try { cmd.Run(options); } catch (P4Exception) { } GetDepotFilesCmdOptions opts = new GetDepotFilesCmdOptions(GetDepotFilesCmdFlags.InArchiveDepots, 0); FileSpec fs = new FileSpec(new DepotPath("//Archive/..."), null); List lfs = new List(); lfs.Add(fs); IList target = rep.GetDepotFiles(lfs, opts); Assert.IsNotNull(target); Assert.AreEqual(target[0].DepotPath.Path, "//Archive/depot/TheirCode/Silly.bmp"); } } finally { Utilities.RemoveTestServer(p4d, TestDir, resetDepot: true, unicode: unicode); } unicode = !unicode; } } /// ///A test for GetArchiveFileActionTestA /// [TestMethod()] public void GetArchiveFileActionTestA() { GetArchiveFileActionTest(false); } /// ///A test for GetArchiveFileActionTestU /// [TestMethod()] public void GetArchiveFileActionTestU() { GetArchiveFileActionTest(true); } /// ///A test for GetArchiveFileActionTest /// public void GetArchiveFileActionTest(bool unicode) { string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; Process p4d = Utilities.DeployP4TestServer(TestDir, 2, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Depot depot = new Depot("Archive", DepotType.Archive, DateTime.Now, null, "admin", "desc", ".p4s", "Archive/...", "//Archive/1", null); depot.Id = "Archive"; depot.Type = DepotType.Archive; rep.CreateDepot(depot); Options options = new Options(); options["-D"] = "Archive"; P4Command cmd = new P4Command(con, "archive", true, "//depot/TheirCode/..."); try { cmd.Run(options); } catch (P4Exception) { } FileSpec fs = new FileSpec(new DepotPath("//depot/TheirCode/Silly.bmp"), null); IList lfs = new List(); lfs.Add(fs); IList fmd = rep.GetFileMetaData(lfs, null); Assert.AreEqual(fmd[0].HeadAction, FileAction.Archive); } } finally { Utilities.RemoveTestServer(p4d, TestDir, resetDepot: true, unicode: unicode); } } /// ///A test for GetDepotFilesInRangeTest /// [TestMethod()] [DeploymentItem("p4api.net.dll")] public void GetDepotFilesInRangeTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 2, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); GetDepotFilesCmdOptions opts = new GetDepotFilesCmdOptions(GetDepotFilesCmdFlags.AllRevisions, 0); FileSpec fs = new FileSpec(new DepotPath("//depot/..."), new VersionRange(new ChangelistIdVersion(1), new ChangelistIdVersion(3))); List lfs = new List(); lfs.Add(fs); IList target = rep.GetDepotFiles(lfs, opts); Assert.IsNotNull(target); if (!unicode) { Assert.AreEqual(target.Count, 5); Assert.AreEqual(target[0].DepotPath.Path, "//depot/MyCode/pup.txt"); } else { Assert.AreEqual(target.Count, 3); Assert.AreEqual(target[0].DepotPath.Path, "//depot/MyCode/ReadMe.txt"); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetDepotFilesNotDeletedTest /// [TestMethod()] [DeploymentItem("p4api.net.dll")] public void GetDepotFilesNotDeletedTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 2, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); // sync -f to avoid a cant clobber error rep.Connection.Client.SyncFiles(new SyncFilesCmdOptions(SyncFilesCmdFlags.Force), new FileSpec(new DepotPath("//depot/..."))); // schedule file for delete FileSpec toFile = new FileSpec(new DepotPath("//depot/MyCode/ReadMe.txt")); Options deleteOptions = new Options(DeleteFilesCmdFlags.None, -1); IList oldfiles = con.Client.DeleteFiles(deleteOptions, toFile); Assert.AreEqual(1, oldfiles.Count); //submit file SubmitCmdOptions submitOpts = new SubmitCmdOptions(SubmitFilesCmdFlags.None, 0, null, "submitted", null); rep.Connection.Client.SubmitFiles(submitOpts, toFile); FileSpec fs = new FileSpec(new DepotPath("//depot/..."), null); GetDepotFilesCmdOptions opts = new GetDepotFilesCmdOptions(GetDepotFilesCmdFlags.NotDeleted, 0); List lfs = new List(); lfs.Add(fs); IList target = rep.GetDepotFiles(lfs, opts); Assert.IsNotNull(target); if (!unicode) { Assert.AreEqual(target.Count, 7); Assert.AreEqual(target[0].DepotPath.Path, "//depot/MyCode/pup.txt"); } else { Assert.AreEqual(target.Count, 11); Assert.AreEqual(target[0].DepotPath.Path, "//depot/Modifiers/ReadMe.txt"); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetDepotFiles job094897 /// [TestMethod()] public void GetDepotFilesjob094897Test() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; Process p4d = Utilities.DeployP4TestServer(TestDir, 2, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); //Listing of files in the Depot List fileListRequest = new List() { new FileSpec(new DepotPath("//depot/..."), null) }; //Returns 8 files List files = (List)rep.GetDepotFiles(fileListRequest, null); //Suppress the file headings GetFileContentsCmdOptions fileRequestOptions = new GetFileContentsCmdOptions(GetFileContentsCmdFlags.Suppress, null); //Get the 1st text file var fileX = rep.GetFileContentsEx(new List() { files[1] }, fileRequestOptions); //Get the 2nd text file var fileY = rep.GetFileContentsEx(new List() { files[3] }, fileRequestOptions); Assert.IsFalse(fileY[0].ToString().Contains("Don't")); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } } /// ///A test for GetDepotFiles job095001 /// [TestMethod()] public void GetDepotFilesjob095001Test() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; Process p4d = Utilities.DeployP4TestServer(TestDir, 2, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); //Listing of files in the Depot List fileListRequest = new List() { new FileSpec(new DepotPath("//depot/..."), null) }; //Returns 8 files List files = (List)rep.GetDepotFiles(fileListRequest, null); //Suppress the file headings GetFileContentsCmdOptions fileRequestOptions = new GetFileContentsCmdOptions(GetFileContentsCmdFlags.Suppress, null); //Get the 1st text file var fileX = rep.GetFileContents(new List() { files[1] }, fileRequestOptions); //Get the 2nd text file var fileY = rep.GetFileContents(new List() { files[3] }, fileRequestOptions); Assert.IsFalse(fileY[0].Contains("Don't")); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } /// ///A test for GetDepotFiles job095131 /// [TestMethod()] public void GetDepotFilesjob095131Test() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; Process p4d = Utilities.DeployP4TestServer(TestDir, 13, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); //Listing of files in the Depot List fileListRequest = new List() { new FileSpec(new DepotPath("//depot/MyCode2/..."), null) }; //Returns 6 files List files = (List)rep.GetDepotFiles(fileListRequest, null); //Suppress the file headings GetFileContentsCmdOptions fileRequestOptions = new GetFileContentsCmdOptions(GetFileContentsCmdFlags.Suppress, null); //Get a text file var fileX = rep.GetFileContents(new List() { files[4] }, fileRequestOptions); //Get a deleted file var fileY = rep.GetFileContents(new List() { files[1] }, fileRequestOptions); // behavior in job095131 will result in fileY having the same // file contents as FileX, when it should be "" Assert.IsFalse(fileY[0].Contains("Don't")); //Get a text file fileX = rep.GetFileContents(new List() { files[4] }, fileRequestOptions); //Get a binary file var fileZ = rep.GetFileContents(new List() { files[5] }, fileRequestOptions); // behavior in job095131 will result in fileZ having the same // file contents as FileX, when it should be "" Assert.IsFalse(fileZ[0].Contains("Don't")); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } /// ///A test for GetOpenedFiles /// [TestMethod()] public void GetOpenedFilesTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 12, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); FileSpec fs = new FileSpec(new DepotPath("//depot/..."), null); List lfs = new List(); lfs.Add(fs); IList target = rep.GetOpenedFiles(lfs, null); Assert.IsNotNull(target); bool foundit = false; foreach (File f in target) { if (f.DepotPath.Path == "//depot/MyCode/NewFile.txt") { foundit = true; break; } } Assert.IsTrue(foundit); Options opts = new Options(); opts["-c"] = "default"; opts["-C"] = con.Client.Name; target = rep.GetOpenedFiles(null, opts); Assert.IsNotNull(target); if (!unicode) { Assert.AreEqual(target.Count, 3); } else { Assert.AreEqual(target.Count, 7); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetOpenedFilesShortOutput /// [TestMethod()] public void GetOpenedFilesShortOutputTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 12, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); FileSpec fs = new FileSpec(new DepotPath("//..."), null); List lfs = new List(); lfs.Add(fs); // use -a GetOpenedFilesOptions opts = new GetOpenedFilesOptions(GetOpenedFilesCmdFlags.AllClients, null, null, null, 0); IList target = new List(); target = rep.GetOpenedFiles(lfs, opts); // file type is returned with p4 opened -a Assert.IsNotNull(target[0].Type); // use -a -s opts = new GetOpenedFilesOptions(GetOpenedFilesCmdFlags.ShortOutput | GetOpenedFilesCmdFlags.AllClients, null, null, null, 0); target = rep.GetOpenedFiles(lfs, opts); // file type is not returned with p4 opened -a -s Assert.IsNull(target[0].Type); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetOpenedFilesExclusive /// [TestMethod()] public void GetOpenedFilesExclusiveTest() { // TODO: add distributed environment to utilities setup // in order to test the success path of this operation bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 12, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Utilities.SetClientRoot(rep, TestDir, unicode, ws_client); FileSpec fs = new FileSpec(new DepotPath("//..."), null); List lfs = new List(); lfs.Add(fs); // open a file with exclusive lock FileSpec toOpen = new FileSpec(new DepotPath("//depot/MyCode/ReadMe.txt"), null, null, null); EditCmdOptions editOpts = new EditCmdOptions(EditFilesCmdFlags.None, 0, new FileType(BaseFileType.Text, FileTypeModifier.ExclusiveOpen)); rep.Connection.Client.EditFiles(editOpts, toOpen); GetOpenedFilesOptions opts = new GetOpenedFilesOptions(GetOpenedFilesCmdFlags.Exclusive, null, null, null, 0); IList target = new List(); try { target = rep.GetOpenedFiles(lfs, opts); } // p4 opened -x will fail on a non-distributed environment catch (P4Exception ex) { Assert.AreEqual(805379732, ex.ErrorCode, "This command is only supported in a distributed configuration.\n"); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetFileMetadata /// [TestMethod()] public void GetFileMetadataTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 6, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); FileSpec fs = new FileSpec(new DepotPath("//depot/MyCode2/ReadMe.txt"), null); List lfs = new List(); lfs.Add(fs); Options ops = new Options(); ops["-Oa"] = null; DepotPath movedfile = null; bool ismapped = false; bool shelved = false; FileAction headaction = FileAction.None; int headchange = -1; int headrev = -1; FileType headtype = new FileType("none"); DateTime headtime = DateTime.MinValue; DateTime headmodtime = DateTime.MinValue; int movedrev = -1; int haverev = -1; string desc = null; string digest = null; int filesize = -1; FileAction action = FileAction.None; FileType type = null; string actionowner = null; int change = -1; bool resolved = false; bool unresolved = false; bool reresolvable = false; int otheropen = -1; List otheropenuserclients = new List(); bool otherlock = false; List otherlockuserclients = new List(); List otheractions = new List(); List otherchanges = new List(); bool ourlock = false; List resolverecords = new List(); Dictionary attributes = null; Dictionary attributedigests = null; FileMetaData fmd = new FileMetaData ( movedfile, ismapped, shelved, headaction, headchange, headrev, headtype, headtime, headmodtime, movedrev, haverev, desc, digest, filesize, action, type, actionowner, change, resolved, unresolved, reresolvable, otheropen, otheropenuserclients, otherlock, otherlockuserclients, otheractions, otherchanges, ourlock, resolverecords, attributes, attributedigests, null, null, null, -1, null ); IList target = rep.GetFileMetaData(lfs, ops); int expected = 2; int actual = target[0].HaveRev; Assert.AreEqual(expected, actual); if (unicode == false) expected = 11; else expected = 10; actual = target[0].HeadChange; Assert.AreEqual(expected, actual); bool isresolved = false; bool actualres = target[0].Resolved; Assert.AreEqual(isresolved, actualres); bool foundit = false; foreach (FileMetaData f in target) { if (f.Attributes.ContainsKey("1st") && f.Attributes.ContainsValue("9999") ) { foundit = true; break; } } Assert.IsTrue(foundit); foundit = false; foreach (FileMetaData f in target) { if (f.OtherOpenUserClients.Contains("Alice@alice_space") | f.OtherOpenUserClients.Contains("alice@alice_space")) { foundit = true; break; } } Assert.IsTrue(foundit); foundit = false; foreach (FileMetaData f in target) { if (f.ActionOwner.Contains("admin")) { foundit = true; break; } } Assert.IsTrue(foundit); foundit = false; foreach (FileMetaData f in target) { if (f.Action == FileAction.Integrate) { foundit = true; break; } } Assert.IsTrue(foundit); // a test for the obsoleted options #pragma warning disable 618 ops = new GetFileMetaDataCmdOptions(GetFileMetadataCmdFlags.Opened, null, null, 0, null, null); #pragma warning restore 618 // if the options were not obsoleted correctly // they would be returned with a count of 0 // and contain no flags or arguements Assert.AreEqual(ops.Count, 1); Assert.IsTrue(ops.ContainsKey("-Ro")); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetFileMetadataStaleRevA /// [TestMethod()] public void GetFileMetadataStaleRevTestA() { GetFileMetadataStaleRevTest(false); } /// ///A test for GetFileMetadataStaleRevU /// [TestMethod()] public void GetFileMetadataStaleRevTestU() { GetFileMetadataStaleRevTest(true); } /// ///A test for GetFileMetadataStaleRev /// public void GetFileMetadataStaleRevTest(bool unicode) { string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; Process p4d = Utilities.DeployP4TestServer(TestDir, 6, unicode); var clientRoot = Utilities.TestClientRoot(TestDir, unicode); var adminSpace = System.IO.Path.Combine(clientRoot, "admin_space"); System.IO.Directory.CreateDirectory(adminSpace); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Utilities.SetClientRoot(rep, TestDir, unicode, ws_client); if (unicode) { FileSpec fs = new FileSpec(new DepotPath("//depot/MyCode/ReadMe.txt"), new Revision(0)); FileSpec fs2 = new FileSpec(new DepotPath("//depot/Modifiers/Text.txt"), new Revision(1)); // sync files to 0/1 and 1/2 rep.Connection.Client.SyncFiles(new SyncFilesCmdOptions(SyncFilesCmdFlags.Force), fs); rep.Connection.Client.SyncFiles(new SyncFilesCmdOptions(SyncFilesCmdFlags.Force), fs2); fs = new FileSpec(new DepotPath("//depot/MyCode/ReadMe.txt"), null); fs2 = new FileSpec(new DepotPath("//depot/Modifiers/Text.txt"), null); List lfs = new List(); lfs.Add(fs); lfs.Add(fs2); // check for stale revs and IsStale IList target = rep.GetFileMetaData(lfs, null); Assert.IsTrue(target[0].HaveRev < target[0].HeadRev); Assert.IsTrue(target[0].IsStale); Assert.IsTrue(target[1].HaveRev < target[1].HeadRev); Assert.IsTrue(target[1].IsStale); } else { FileSpec fs = new FileSpec(new DepotPath("//depot/MyCode/ReadMe.txt"), new Revision(0)); FileSpec fs2 = new FileSpec(new DepotPath("//depot/TestData/Numbers.txt"), new Revision(1)); // sync files to 0/1 and 1/2 rep.Connection.Client.SyncFiles(new SyncFilesCmdOptions(SyncFilesCmdFlags.Force), fs); rep.Connection.Client.SyncFiles(new SyncFilesCmdOptions(SyncFilesCmdFlags.Force), fs2); fs = new FileSpec(new DepotPath("//depot/MyCode/ReadMe.txt"), null); fs2 = new FileSpec(new DepotPath("//depot/TestData/Numbers.txt"), null); List lfs = new List(); lfs.Add(fs); lfs.Add(fs2); // check for stale revs and IsStale IList target = rep.GetFileMetaData(lfs, null); Assert.IsTrue(target[0].HaveRev < target[0].HeadRev); Assert.IsTrue(target[0].IsStale); Assert.IsTrue(target[1].HaveRev < target[1].HeadRev); Assert.IsTrue(target[1].IsStale); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } } /// ///A test for GetFileMetaDataFileCount /// [TestMethod()] [DeploymentItem("p4api.net.dll")] public void GetFileMetaDataFileCountTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 2, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); GetFileMetaDataCmdOptions opts = new GetFileMetaDataCmdOptions(GetFileMetadataCmdFlags.DateSort, null, null, 1, null, null, null); FileSpec fs = new FileSpec(new DepotPath("//Depot/..."), null); IList target = rep.GetFileMetaData(opts, fs); Assert.IsNotNull(target); Assert.AreEqual(target.Count, 1); if (unicode) { Assert.AreEqual(target[0].TotalFileCount, 14); } else { Assert.AreEqual(target[0].TotalFileCount, 9); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetFileMetaDataInUnloaded /// [TestMethod()] [DeploymentItem("p4api.net.dll")] public void GetFileMetaDataInUnloadedTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 2, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Depot depot = new Depot("Unloaded", DepotType.Unload, DateTime.Now, null, "admin", "desc", ".p4s", "Unloaded/...", "//Depot/1", null); depot.Id = "Unloaded"; depot.Type = DepotType.Unload; rep.CreateDepot(depot); Options options = new Options(); options["-c"] = "admin_space2"; P4Command cmd = new P4Command(con, "unload", true, null); try { cmd.Run(options); } catch { } GetFileMetaDataCmdOptions opts = new GetFileMetaDataCmdOptions(GetFileMetadataCmdFlags.InUnloadDepot, null, null, 0, null, null, null); FileSpec fs = new FileSpec(new DepotPath("//Unloaded/..."), null); IList target = rep.GetFileMetaData(opts, fs); Assert.IsNotNull(target); Assert.AreEqual(target.Count, 1); Assert.AreEqual(target[0].DepotPath.Path, "//Unloaded/client/admin_space2.ckp"); Assert.IsTrue(target[0].IsInDepot); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetFileMetaDataAttribute /// [TestMethod()] [DeploymentItem("p4api.net.dll")] public void GetFileMetaDataAttributeTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 13, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Utilities.SetClientRoot(rep, TestDir, unicode, ws_client); FileSpec fs = new FileSpec(new DepotPath("//depot/MyCode/ReadMe.txt"), null); rep.Connection.Client.EditFiles(null, fs); Options options = new Options(); options["-n"] = "attribute"; options["-v"] = "1024"; P4Command cmd = new P4Command(con, "attribute", true, "//depot/MyCode/ReadMe.txt"); try { cmd.Run(options); } catch { } SubmitCmdOptions submitOpts = new SubmitCmdOptions(SubmitFilesCmdFlags.None, 0, null, "submitted", null); rep.Connection.Client.SubmitFiles(submitOpts, fs); GetFileMetaDataCmdOptions opts = new GetFileMetaDataCmdOptions(GetFileMetadataCmdFlags.Attributes, null, null, 0, null, null, null); IList target = rep.GetFileMetaData(opts, fs); Assert.IsNotNull(target); Assert.AreEqual(target.Count, 1); Assert.IsTrue(target[0].Attributes.ContainsKey("attribute")); object value; target[0].Attributes.TryGetValue("attribute", out value); Assert.AreEqual(value, "1024"); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetFileMetaDataAttributeDigest /// [TestMethod()] [DeploymentItem("p4api.net.dll")] public void GetFileMetaDataAttributeDigestTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 13, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Utilities.SetClientRoot(rep, TestDir, unicode, ws_client); FileSpec fs = new FileSpec(new DepotPath("//depot/MyCode/ReadMe.txt"), null); rep.Connection.Client.EditFiles(null, fs); Options options = new Options(); options["-n"] = "attribute"; options["-v"] = "1024"; P4Command cmd = new P4Command(con, "attribute", true, "//depot/MyCode/ReadMe.txt"); try { cmd.Run(options); } catch { } options["-n"] = "anotherone"; options["-v"] = "1024"; cmd = new P4Command(con, "attribute", true, "//depot/MyCode/ReadMe.txt"); try { cmd.Run(options); } catch { } SubmitCmdOptions submitOpts = new SubmitCmdOptions(SubmitFilesCmdFlags.None, 0, null, "submitted", null); rep.Connection.Client.SubmitFiles(submitOpts, fs); GetFileMetaDataCmdOptions opts = new GetFileMetaDataCmdOptions(GetFileMetadataCmdFlags.AttributeDigest, null, null, 0, null, null, null); IList target = rep.GetFileMetaData(opts, fs); Assert.IsNotNull(target); Assert.AreEqual(target.Count, 1); Assert.IsTrue(target[0].AttributeDigests.ContainsKey("attribute")); object value; target[0].AttributeDigests.TryGetValue("attribute", out value); Assert.AreEqual(value, "021BBC7EE20B71134D53E20206BD6FEB"); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetFileMetaDataAttributeHex /// [TestMethod()] [DeploymentItem("p4api.net.dll")] public void GetFileMetaDataAttributeHexTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 13, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Utilities.SetClientRoot(rep, TestDir, unicode, ws_client); FileSpec fs = new FileSpec(new DepotPath("//depot/MyCode/ReadMe.txt"), null); rep.Connection.Client.EditFiles(null, fs); Options options = new Options(); options["-n"] = "attribute"; options["-v"] = "1024"; P4Command cmd = new P4Command(con, "attribute", true, "//depot/MyCode/ReadMe.txt"); try { cmd.Run(options); } catch { } SubmitCmdOptions submitOpts = new SubmitCmdOptions(SubmitFilesCmdFlags.None, 0, null, "submitted", null); rep.Connection.Client.SubmitFiles(submitOpts, fs); GetFileMetaDataCmdOptions opts = new GetFileMetaDataCmdOptions(GetFileMetadataCmdFlags.HexAttributes, null, null, 0, null, null, null); IList target = rep.GetFileMetaData(opts, fs); Assert.IsNotNull(target); Assert.AreEqual(target.Count, 1); Assert.IsTrue(target[0].Attributes.ContainsKey("attribute")); object value; target[0].Attributes.TryGetValue("attribute", out value); Assert.AreEqual(value, "31303234"); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetFileMetaDataAttributePattern /// [TestMethod()] [DeploymentItem("p4api.net.dll")] public void GetFileMetaDataAttributePatternTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 13, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Utilities.SetClientRoot(rep, TestDir, unicode, ws_client); FileSpec fs = new FileSpec(new DepotPath("//depot/MyCode/ReadMe.txt"), null); rep.Connection.Client.EditFiles(null, fs); Options options = new Options(); options["-n"] = "attribute"; options["-v"] = "1024"; P4Command cmd = new P4Command(con, "attribute", true, "//depot/MyCode/ReadMe.txt"); try { cmd.Run(options); } catch { } options["-n"] = "anotherone"; options["-v"] = "1024"; cmd = new P4Command(con, "attribute", true, "//depot/MyCode/ReadMe.txt"); try { cmd.Run(options); } catch { } options["-n"] = "anotheroney"; options["-v"] = "1024"; cmd = new P4Command(con, "attribute", true, "//depot/MyCode/ReadMe.txt"); try { cmd.Run(options); } catch { } SubmitCmdOptions submitOpts = new SubmitCmdOptions(SubmitFilesCmdFlags.None, 0, null, "submitted", null); rep.Connection.Client.SubmitFiles(submitOpts, fs); GetFileMetaDataCmdOptions opts = new GetFileMetaDataCmdOptions(GetFileMetadataCmdFlags.Attributes, null, null, 0, null, null, "anotherone"); IList target = rep.GetFileMetaData(opts, fs); Assert.IsNotNull(target); Assert.AreEqual(target.Count, 1); Assert.IsTrue(target[0].Attributes.ContainsKey("anotherone")); object value; target[0].Attributes.TryGetValue("anotherone", out value); Assert.AreEqual(value, "1024"); Assert.AreEqual(target[0].Attributes.Count, 1); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetFileMetaDataAttributePropagate /// [TestMethod()] [DeploymentItem("p4api.net.dll")] public void GetFileMetaDataAttributePropagateTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 13, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Utilities.SetClientRoot(rep, TestDir, unicode, ws_client); FileSpec fs = new FileSpec(new DepotPath("//depot/MyCode/ReadMe.txt"), null); rep.Connection.Client.EditFiles(null, fs); Options options = new Options(); options["-n"] = "attribute"; options["-v"] = "1024"; P4Command cmd = new P4Command(con, "attribute", true, "//depot/MyCode/ReadMe.txt"); try { cmd.Run(options); } catch { } options["-p"] = null; options["-n"] = "anotherone"; options["-v"] = "1024"; cmd = new P4Command(con, "attribute", true, "//depot/MyCode/ReadMe.txt"); try { cmd.Run(options); } catch { } SubmitCmdOptions submitOpts = new SubmitCmdOptions(SubmitFilesCmdFlags.None, 0, null, "submitted", null); rep.Connection.Client.SubmitFiles(submitOpts, fs); GetFileMetaDataCmdOptions opts = new GetFileMetaDataCmdOptions(GetFileMetadataCmdFlags.Attributes, null, null, 0, null, null, null); // get filemetadata for the file with a propagated attribute IList target = rep.GetFileMetaData(opts, fs); Assert.IsNotNull(target); Assert.AreEqual(target.Count, 1); Assert.IsTrue(target[0].AttributesProp.ContainsKey("anotherone")); object value; target[0].AttributesProp.TryGetValue("anotherone", out value); Assert.AreEqual(value, ""); rep.Connection.Client.EditFiles(null, fs); // now do it while the file is open for edit target = rep.GetFileMetaData(opts, fs); Assert.IsNotNull(target); Assert.AreEqual(target.Count, 1); Assert.IsTrue(target[0].OpenAttributes.ContainsKey("anotherone")); target[0].OpenAttributes.TryGetValue("anotherone", out value); Assert.AreEqual(value, "1024"); Assert.IsTrue(target[0].OpenAttributesProp.ContainsKey("anotherone")); target[0].OpenAttributesProp.TryGetValue("anotherone", out value); Assert.AreEqual(value, ""); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for FileMetaDataToFileSpecEditTestjob059334 /// [TestMethod()] [DeploymentItem("p4api.net.dll")] public void FileMetaDataToFileSpecEditTestjob059334A() { FileMetaDataToFileSpecEditTestjob059334(false); } /// ///A test for FileMetaDataToFileSpecEditTestjob059334 /// [TestMethod()] [DeploymentItem("p4api.net.dll")] public void FileMetaDataToFileSpecEditTestjob059334U() { FileMetaDataToFileSpecEditTestjob059334(true); } /// ///A test for FileMetaDataToFileSpecEditTestjob059334 /// public void FileMetaDataToFileSpecEditTestjob059334(bool unicode) { string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; Process p4d = Utilities.DeployP4TestServer(TestDir, 2, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); IList FileSpecs = new List(); FileSpec fs = new FileSpec(new DepotPath("//Depot/..."), null); // force sync all of the files SyncFilesCmdOptions opts = new SyncFilesCmdOptions(SyncFilesCmdFlags.Force); FileSpecs = con.Client.SyncFiles(opts, fs); // get the local files that exist in the workspace string[] files = System.IO.Directory.GetFiles(@"c:\MyTestDir\admin_space", "*", System.IO.SearchOption.AllDirectories); // turn them into a LocalSpecList FileSpecs = FileSpec.LocalSpecList(files); // get IList fmd = rep.GetFileMetaData(FileSpecs, null); FileSpecs = new List(); // convert the list of FileMetaData to a list of FileSpecs foreach (FileMetaData f in fmd) { FileSpecs.Add(f); } // attempting to edit the FileSpecs should fail since they // contain versions try { con.Client.EditFiles(FileSpecs, null); } catch (P4Exception ex) { // the error should be: // A revision specification (# or @) cannot be used here. Assert.AreEqual(ex.ErrorCode, P4ClientError.MsgDm_NoRev); } // send the FileSpecs as an UnversionedSpecList FileSpecs = con.Client.EditFiles(FileSpec.UnversionedSpecList(FileSpecs), null); Assert.IsNotNull(FileSpecs); if (unicode) { Assert.AreEqual(FileSpecs.Count, 7); } else { Assert.AreEqual(FileSpecs.Count, 5); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } } /// ///A test for GetFileMetaData job094926 [TestMethod()] public void GetFileMetaDatajob094926Test() { string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; Process p4d = Utilities.DeployP4TestServer(TestDir, 13, false); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Utilities.SetClientRoot(rep, TestDir, false, ws_client); FileSpec fs = new FileSpec(new DepotPath("//depot/MyCode/ReadMe.txt"), null); GetFileMetaDataCmdOptions opts = new GetFileMetaDataCmdOptions(GetFileMetadataCmdFlags.None, null, null, 0, null, null, null); // get filemetadata for the file with a propagated attribute IList target = rep.GetFileMetaData(opts, fs); Assert.IsNotNull(target); // there should be client data Assert.IsNotNull(target[0].ClientPath); Assert.IsTrue(target[0].IsInClient); Assert.IsNotNull(target[0].ClientPath); // the bug job094926 will result in a Path '' // is not under client's root ''. error // because Os is passed without "-" opts = new GetFileMetaDataCmdOptions(GetFileMetadataCmdFlags.ExcludeClientData, null, null, 0, null, null, null); // get filemetadata for the file with a propagated attribute target = rep.GetFileMetaData(opts, fs); Assert.IsNotNull(target); // there should not be client data Assert.IsNull(target[0].ClientPath); Assert.IsFalse(target[0].IsInClient); Assert.IsNull(target[0].ClientPath); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } } /// ///A test for Getting historical filetypes from tagged output /// [TestMethod()] public void HistoricalFileTypesTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 15, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); if (unicode == false) { FileSpec fs = new FileSpec(new DepotPath("//depot/Filetypes/ctempobj"), null); List lfs = new List(); lfs.Add(fs); FileMetaData fmd = new FileMetaData(); IList target = rep.GetFileMetaData(lfs, null); FileType ft = new FileType("ctempobj"); Assert.AreEqual(target[0].HeadType.BaseType, ft.BaseType); Assert.AreEqual(target[0].HeadType.Modifiers, ft.Modifiers); fs = new FileSpec(new DepotPath("//depot/Filetypes/ctext"), null); lfs = new List(); lfs.Add(fs); fmd = new FileMetaData(); target = rep.GetFileMetaData(lfs, null); ft = new FileType("ctext"); Assert.AreEqual(target[0].HeadType.BaseType, ft.BaseType); Assert.AreEqual(target[0].HeadType.Modifiers, ft.Modifiers); fs = new FileSpec(new DepotPath("//depot/Filetypes/cxtext"), null); lfs = new List(); lfs.Add(fs); fmd = new FileMetaData(); target = rep.GetFileMetaData(lfs, null); ft = new FileType("cxtext"); Assert.AreEqual(target[0].HeadType.BaseType, ft.BaseType); Assert.AreEqual(target[0].HeadType.Modifiers, ft.Modifiers); fs = new FileSpec(new DepotPath("//depot/Filetypes/ktext"), null); lfs = new List(); lfs.Add(fs); fmd = new FileMetaData(); target = rep.GetFileMetaData(lfs, null); ft = new FileType("ktext"); Assert.AreEqual(target[0].HeadType.BaseType, ft.BaseType); Assert.AreEqual(target[0].HeadType.Modifiers, ft.Modifiers); fs = new FileSpec(new DepotPath("//depot/Filetypes/kxtext"), null); lfs = new List(); lfs.Add(fs); fmd = new FileMetaData(); target = rep.GetFileMetaData(lfs, null); ft = new FileType("kxtext"); Assert.AreEqual(target[0].HeadType.BaseType, ft.BaseType); Assert.AreEqual(target[0].HeadType.Modifiers, ft.Modifiers); fs = new FileSpec(new DepotPath("//depot/Filetypes/ltext"), null); lfs = new List(); lfs.Add(fs); fmd = new FileMetaData(); target = rep.GetFileMetaData(lfs, null); ft = new FileType("ltext"); Assert.AreEqual(target[0].HeadType.BaseType, ft.BaseType); Assert.AreEqual(target[0].HeadType.Modifiers, ft.Modifiers); fs = new FileSpec(new DepotPath("//depot/Filetypes/tempobj"), null); lfs = new List(); lfs.Add(fs); fmd = new FileMetaData(); target = rep.GetFileMetaData(lfs, null); ft = new FileType("tempobj"); Assert.AreEqual(target[0].HeadType.BaseType, ft.BaseType); Assert.AreEqual(target[0].HeadType.Modifiers, ft.Modifiers); fs = new FileSpec(new DepotPath("//depot/Filetypes/ubinary"), null); lfs = new List(); lfs.Add(fs); fmd = new FileMetaData(); target = rep.GetFileMetaData(lfs, null); ft = new FileType("ubinary"); Assert.AreEqual(target[0].HeadType.BaseType, ft.BaseType); Assert.AreEqual(target[0].HeadType.Modifiers, ft.Modifiers); fs = new FileSpec(new DepotPath("//depot/Filetypes/uresource"), null); lfs = new List(); lfs.Add(fs); fmd = new FileMetaData(); target = rep.GetFileMetaData(lfs, null); ft = new FileType("uresource"); Assert.AreEqual(target[0].HeadType.BaseType, ft.BaseType); Assert.AreEqual(target[0].HeadType.Modifiers, ft.Modifiers); fs = new FileSpec(new DepotPath("//depot/Filetypes/uxbinary"), null); lfs = new List(); lfs.Add(fs); fmd = new FileMetaData(); target = rep.GetFileMetaData(lfs, null); ft = new FileType("uxbinary"); Assert.AreEqual(target[0].HeadType.BaseType, ft.BaseType); Assert.AreEqual(target[0].HeadType.Modifiers, ft.Modifiers); fs = new FileSpec(new DepotPath("//depot/Filetypes/xbinary"), null); lfs = new List(); lfs.Add(fs); fmd = new FileMetaData(); target = rep.GetFileMetaData(lfs, null); ft = new FileType("xbinary"); Assert.AreEqual(target[0].HeadType.BaseType, ft.BaseType); Assert.AreEqual(target[0].HeadType.Modifiers, ft.Modifiers); fs = new FileSpec(new DepotPath("//depot/Filetypes/xltext"), null); lfs = new List(); lfs.Add(fs); fmd = new FileMetaData(); target = rep.GetFileMetaData(lfs, null); ft = new FileType("xltext"); Assert.AreEqual(target[0].HeadType.BaseType, ft.BaseType); Assert.AreEqual(target[0].HeadType.Modifiers, ft.Modifiers); fs = new FileSpec(new DepotPath("//depot/Filetypes/xtext"), null); lfs = new List(); lfs.Add(fs); fmd = new FileMetaData(); target = rep.GetFileMetaData(lfs, null); ft = new FileType("xtext"); Assert.AreEqual(target[0].HeadType.BaseType, ft.BaseType); Assert.AreEqual(target[0].HeadType.Modifiers, ft.Modifiers); fs = new FileSpec(new DepotPath("//depot/Filetypes/xtempobj"), null); lfs = new List(); lfs.Add(fs); fmd = new FileMetaData(); target = rep.GetFileMetaData(lfs, null); ft = new FileType("xtempobj"); Assert.AreEqual(target[0].HeadType.BaseType, ft.BaseType); Assert.AreEqual(target[0].HeadType.Modifiers, ft.Modifiers); fs = new FileSpec(new DepotPath("//depot/Filetypes/xutf16"), null); lfs = new List(); lfs.Add(fs); fmd = new FileMetaData(); target = rep.GetFileMetaData(lfs, null); ft = new FileType("xutf16"); Assert.AreEqual(target[0].HeadType.BaseType, ft.BaseType); Assert.AreEqual(target[0].HeadType.Modifiers, ft.Modifiers); fs = new FileSpec(new DepotPath("//depot/Filetypes/xutf8"), null); lfs = new List(); lfs.Add(fs); fmd = new FileMetaData(); target = rep.GetFileMetaData(lfs, null); ft = new FileType("xutf8"); Assert.AreEqual(target[0].HeadType.BaseType, ft.BaseType); Assert.AreEqual(target[0].HeadType.Modifiers, ft.Modifiers); } if (unicode == true) { FileSpec fs = new FileSpec(new DepotPath("//depot/Filetypes/xunicode"), null); List lfs = new List(); lfs.Add(fs); FileMetaData fmd = new FileMetaData(); IList target = rep.GetFileMetaData(lfs, null); FileType ft = new FileType("xunicode"); Assert.AreEqual(target[0].HeadType.BaseType, ft.BaseType); Assert.AreEqual(target[0].HeadType.Modifiers, ft.Modifiers); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetDepotDirs /// [TestMethod()] public void GetDepotDirsTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, unicode, TestContext.TestName); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); IList dirs = new List() { "//*" }; string dir = "//*/*"; dirs.Add(dir); IList target = rep.GetDepotDirs(dirs, null); bool foundit = false; foreach (string line in target) { if (line == "//depot/MyCode") { foundit = true; break; } } Assert.IsTrue(foundit); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetFixes /// [TestMethod()] public void GetFixesTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 13, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); FileSpec fs = new FileSpec(new DepotPath("//depot/..."), null); List lfs = new List(); lfs.Add(fs); GetFixesCmdFlags flags = GetFixesCmdFlags.None; int changelistId = 0; string jobId = null; int maxFixes = 2; Options ops = new Options(flags, changelistId, jobId, maxFixes); IList target = rep.GetFixes(lfs, ops); foreach (Fix fix in target) { string expected = "admin"; string actual = fix.UserName; Assert.AreEqual(expected, actual); expected = "admin_space"; actual = fix.ClientName; Assert.AreEqual(expected, actual); // these dates sometimes come out an hour off, possibly do // tho daylight savings times? //if (unicode == false) //{ // string datestr = "12/2/2010 2:13:00 PM"; // DateTime date = DateTime.Parse(datestr); // Assert.AreEqual(fix.Date, date); //} //else //{ // string udatestr = "12/2/2010 2:19:21 PM"; // DateTime udate = DateTime.Parse(udatestr); // Assert.AreEqual(fix.Date, udate); //} expected = "job000001"; actual = fix.JobId; Assert.AreEqual(expected, actual); expected = "closed"; actual = fix.Status; Assert.AreEqual(expected, actual); FixAction left = FixAction.Fixed; FixAction right = fix.Action; Assert.AreEqual(left, right); if (unicode == false) { int cl = 4; int clpos = fix.ChangeId; Assert.AreEqual(cl, clpos); } else { int ucl = 3; int uclpos = fix.ChangeId; Assert.AreEqual(ucl, uclpos); } jobId = "job000001"; maxFixes = 2; ops = new Options(flags, changelistId, jobId, maxFixes); target = rep.GetFixes(lfs, ops); Assert.AreEqual(target.Count, 1); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetFileHistory /// [TestMethod()] public void GetFileHistoryTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 5, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); FileSpec fs = new FileSpec(new DepotPath("//depot/MyCode2/ReadMe.txt"), null); List lfs = new List(); lfs.Add(fs); Options ops = new Options(); ops["-m"] = "2"; IList target = rep.GetFileHistory(lfs, ops); int expected = 2; int actual = target[0].Revision; Assert.AreEqual(expected, actual); if (unicode == false) expected = 11; else expected = 10; actual = target[0].ChangelistId; Assert.AreEqual(expected, actual); expected = 30; long actual10 = target[0].FileSize; Assert.AreEqual(expected, actual10); string expected11 = "C7DECE3DB80A73F3F53AF4BCF6AC0576"; string actual11 = target[0].Digest; Assert.AreEqual(expected11, actual11); string expected1 = "admin"; string actual1 = target[0].UserName; Assert.AreEqual(expected1, actual1); if (unicode == false) expected1 = "submit without changes "; else expected1 = "submit with no changes "; actual1 = target[0].Description; Assert.AreEqual(expected1, actual1); expected1 = "admin_space"; actual1 = target[0].ClientName; Assert.AreEqual(expected1, actual1); FileAction expected2 = FileAction.Edit; FileAction actual2 = target[0].Action; Assert.AreEqual(expected2, actual2); int expected3 = 1; int actual3 = target[1].Revision; Assert.AreEqual(expected3, actual3); if (unicode == false) expected3 = 10; else expected3 = 8; actual3 = target[1].ChangelistId; Assert.AreEqual(expected3, actual3); string expected4 = "admin"; string actual4 = target[1].UserName; Assert.AreEqual(expected4, actual4); expected4 = "branch to MyCode2 "; actual4 = target[1].Description; Assert.AreEqual(expected4, actual4); expected4 = "admin_space"; actual4 = target[1].ClientName; Assert.AreEqual(expected4, actual4); FileAction expected5 = FileAction.Branch; FileAction actual5 = target[1].Action; Assert.AreEqual(expected5, actual5); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetCounters /// [TestMethod()] public void GetCountersTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 4, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); IList target = rep.GetCounters(null); bool foundit = false; foreach (Counter counter in target) { if (counter.Name == "deleteme" && counter.Value == "44") { foundit = true; break; } } Assert.IsTrue(foundit); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetCounter /// [TestMethod()] public void GetCounterTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 4, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Counter target = rep.GetCounter("deleteme", null); bool foundit = false; if (target.Name == "deleteme" && target.Value == "44") { foundit = true; } Assert.IsTrue(foundit); // previous tests did not use options. Use both depricated // misspelled options and then fixed options name to get // and increment the deleteme counter. CoutnerCmdOptions misspelledOpts = new CoutnerCmdOptions(CounterCmdFlags.Increment); target = rep.GetCounter("deleteme", misspelledOpts); foundit = false; if (target.Name == "deleteme" && target.Value == "45") { foundit = true; } Assert.IsTrue(foundit); CounterCmdOptions Opts = new CounterCmdOptions(CounterCmdFlags.Increment); target = rep.GetCounter("deleteme", Opts); foundit = false; if (target.Name == "deleteme" && target.Value == "46") { foundit = true; } Assert.IsTrue(foundit); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for DeleteCounter /// [TestMethod()] [DeploymentItem("p4api.net.dll")] public void DeleteCounterTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 4, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); rep.DeleteCounter("deleteme", null); IList target = rep.GetCounters(null); bool foundit = false; foreach (Counter counter in target) { if (counter.Name == "deleteme" && counter.Value == "44") { foundit = true; break; } } Assert.IsFalse(foundit); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetProtectionTable /// [TestMethod()] public void GetProtectionTableTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 4, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); IList target = rep.GetProtectionTable(null); Assert.IsNotNull(target); bool foundit = false; foreach (ProtectionEntry pte in target) { if (pte.Mode == ProtectionMode.Admin && pte.Type == EntryType.User && pte.Name == "Alex" && pte.Host == "*" && pte.Path == "//MyCode2/ReadMe.txt") { foundit = true; break; } } Assert.IsTrue(foundit); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetProtectionTablejob079134A /// [TestMethod()] public void GetProtectionTableTestjob079134A() { GetProtectionTableTestjob079134(false); } /// ///A test for GetProtectionTablejob079134U /// [TestMethod()] public void GetProtectionTableTestjob079134U() { GetProtectionTableTestjob079134(true); } /// ///A test for GetProtectionTablejob079134 /// public void GetProtectionTableTestjob079134(bool unicode) { string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; Process p4d = Utilities.DeployP4TestServer(TestDir, 4, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); IList target = rep.GetProtectionTable(); Assert.IsNotNull(target); bool foundit = false; foreach (ProtectionEntry pte in target) { if (pte.Mode == ProtectionMode.Admin && pte.Type == EntryType.User && pte.Name == "Alex" && pte.Host == "*" && pte.Path == "//MyCode2/ReadMe.txt") { foundit = true; break; } } Assert.IsTrue(foundit); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } } /// ///A test for GetTriggerTable /// [TestMethod()] public void GetTriggerTableTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 4, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); IList target = new List(); Options ops = new Options(); ops["-o"] = null; target = rep.GetTriggerTable(ops); Assert.IsNotNull(target); bool foundit = false; foreach (Trigger t in target) { if (t.Name == "change" && t.Type == TriggerType.ChangeSubmit && t.Path == "//depot/..." && t.Command == "\"cmd %changelist%\"" && t.Order == 0) { foundit = true; break; } } Assert.IsTrue(foundit); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetTypeMap /// [TestMethod()] public void GetTypeMapTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 4, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); IList target = new List(); Options ops = new Options(); target = rep.GetTypeMap(); Assert.IsNotNull(target); bool foundit = false; foreach (TypeMapEntry t in target) { if (t.FileType.BaseType.Equals(BaseFileType.Binary) && t.FileType.Modifiers.HasFlag(FileTypeModifier.ExclusiveOpen) && t.Path == "//depot/Modifiers/...") { foundit = true; break; } } Assert.IsTrue(foundit); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetFormSpec /// [TestMethod()] public void GetFormSpecTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 4, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); FormSpec target = new FormSpec(); Options ops = new Options(); ops["-o"] = null; target = rep.GetFormSpec(ops, "change"); Assert.IsNotNull(target); target = rep.GetFormSpec(ops, "branch"); Assert.IsNotNull(target); target = rep.GetFormSpec(ops, "client"); Assert.IsNotNull(target); target = rep.GetFormSpec(ops, "depot"); Assert.IsNotNull(target); target = rep.GetFormSpec(ops, "group"); Assert.IsNotNull(target); target = rep.GetFormSpec(ops, "job"); Assert.IsNotNull(target); target = rep.GetFormSpec(ops, "label"); Assert.IsNotNull(target); target = rep.GetFormSpec(ops, "spec"); Assert.IsNotNull(target); target = rep.GetFormSpec(ops, "stream"); Assert.IsNotNull(target); target = rep.GetFormSpec(ops, "triggers"); Assert.IsNotNull(target); target = rep.GetFormSpec(ops, "typemap"); Assert.IsNotNull(target); target = rep.GetFormSpec(ops, "user"); Assert.IsNotNull(target); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetSpecFieldDataType /// [TestMethod()] public void GetFieldDataTypeTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 4, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); FormSpec target = new FormSpec(); Options ops = new Options(); ops["-o"] = null; target = rep.GetFormSpec(ops, "job"); Assert.IsNotNull(target); SpecFieldDataType type = target.GetSpecFieldDataType(target, "Job"); Assert.AreEqual(type, SpecFieldDataType.Word); type = target.GetSpecFieldDataType(target, "Status"); Assert.AreEqual(type, SpecFieldDataType.Select); type = target.GetSpecFieldDataType(target, "NotHere"); Assert.AreEqual(type, SpecFieldDataType.None); type = target.GetSpecFieldDataType(target, "User"); Assert.AreEqual(type, SpecFieldDataType.Word); type = target.GetSpecFieldDataType(target, "Date"); Assert.AreEqual(type, SpecFieldDataType.Date); type = target.GetSpecFieldDataType(target, "Description"); Assert.AreEqual(type, SpecFieldDataType.Text); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetReviewers /// [TestMethod()] public void GetReviewersTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, unicode, TestContext.TestName); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); FileSpec fs = new FileSpec(new DepotPath("//depot/..."), null); List lfs = new List(); lfs.Add(fs); IList target = rep.GetReviewers(lfs, null); Assert.IsNotNull(target); bool foundit = false; foreach (User u in target) { if ((u.Id == "Alex" | u.Id == "Алексей") && (u.FullName == "Alexie Dumas" | u.FullName == "Алексей Дюма") && (u.EmailAddress == "Alex@p4test.com" | u.EmailAddress == "alex@p4test.com")) { foundit = true; break; } } Assert.IsTrue(foundit); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetProtectionEntries /// [TestMethod()] public void GetProtectionEntriesTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 4, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); IList target = new List(); Options ops = new Options(); ops["-u"] = "alex"; target = rep.GetProtectionEntries(null, ops); Assert.IsNotNull(target); bool foundit = false; foreach (ProtectionEntry pte in target) { if (pte.Mode == ProtectionMode.Write && pte.Type == EntryType.User && pte.Name == "*" && pte.Host == "*" && pte.Path == "//...") { foundit = true; break; } } Assert.IsTrue(foundit); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetMaxProtectionAccessA /// [TestMethod()] public void GetMaxProtectionAccessTestA() { GetMaxProtectionAccessTest(false); } /// ///A test for GetMaxProtectionAccessU /// [TestMethod()] public void GetMaxProtectionAccessTestU() { GetMaxProtectionAccessTest(true); } /// ///A test for GetMaxProtectionAccess /// public void GetMaxProtectionAccessTest(bool unicode) { string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; Process p4d = Utilities.DeployP4TestServer(TestDir, 4, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Options opts = new GetMaxProtectionAccessCmdOptions( GetMaxProtectionAccessCmdFlags.AccessSummary, null, "Alex", null); ProtectionMode target = rep.GetMaxProtectionAccess(null, opts); Assert.AreEqual(target, ProtectionMode.Admin); opts = new GetMaxProtectionAccessCmdOptions( GetMaxProtectionAccessCmdFlags.AccessSummary, null, "nobody", null); target = rep.GetMaxProtectionAccess(new List() { new FileSpec(new DepotPath("//..."), null, null, null) }, opts); Assert.AreEqual(target, ProtectionMode.Write); opts = new GetMaxProtectionAccessCmdOptions( GetMaxProtectionAccessCmdFlags.AccessSummary, "everyone", null, null); target = rep.GetMaxProtectionAccess(new List() { new FileSpec(new DepotPath("c:\\MyTestDir\\admin_space\\Modifiers\\ReadMe.txt"), null, null, null) }, opts); Assert.AreEqual(target, ProtectionMode.None); opts = new GetMaxProtectionAccessCmdOptions( GetMaxProtectionAccessCmdFlags.AccessSummary, null, "admin", null); target = rep.GetMaxProtectionAccess(new List() { new FileSpec(new DepotPath("//..."), null, null, null) }, opts); Assert.AreEqual(target, ProtectionMode.Super); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } } /// ///A test for GetEqualsProtectionModesA /// [TestMethod()] public void GetEqualsProtectionModesA() { GetEqualsProtectionModesTest(false); } /// ///A test for GetEqualsProtectionModesU /// [TestMethod()] public void GetEqualsProtectionModesTestU() { GetEqualsProtectionModesTest(true); } /// ///A test for GetEqualsProtectionModes /// public void GetEqualsProtectionModesTest(bool unicode) { int checkpoint = unicode ? 17 : 18; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; Process p4d = Utilities.DeployP4TestServer(TestDir, checkpoint, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Options opts = new GetProtectionEntriesCmdOptions( GetProtectionEntriesCmdFlags.AllUsers, null, null, null); IList target = rep.GetProtectionEntries(null, opts); Assert.AreEqual(target[4].Mode, ProtectionMode.ReadRights); Assert.AreEqual(target[5].Mode, ProtectionMode.OpenRights); Assert.AreEqual(target[6].Mode, ProtectionMode.BranchRights); Assert.AreEqual(target[7].Mode, ProtectionMode.WriteRights); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } } /// ///A test for GetExcludedProtectionsA /// [TestMethod()] public void GetExcludedProtectionsTestA() { GetExcludedProtectionsTest(false); } /// ///A test for GetEqualsProtectionModesU /// [TestMethod()] public void GetExcludedProtectionsTestU() { GetExcludedProtectionsTest(true); } /// ///A test for GetEqualsProtectionModes /// public void GetExcludedProtectionsTest(bool unicode) { int checkpoint = unicode ? 18 : 19; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; Process p4d = Utilities.DeployP4TestServer(TestDir, checkpoint, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Options opts = new GetProtectionEntriesCmdOptions( GetProtectionEntriesCmdFlags.AllUsers, null, null, null); IList target = rep.GetProtectionEntries(null, opts); Assert.AreEqual(target[4].Unmap, false); Assert.AreEqual(target[5].Unmap, false); Assert.AreEqual(target[6].Unmap, false); Assert.AreEqual(target[7].Unmap, false); Assert.AreEqual(target[8].Unmap, true); IList GetProtectionTable = rep.GetProtectionTable(null); Assert.AreEqual(GetProtectionTable[7].Unmap, false); Assert.AreEqual(GetProtectionTable[8].Unmap, true); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } } /// ///A test for TagFiles /// [TestMethod()] public void TagFilesTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 5, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); FileSpec fs = new FileSpec(new DepotPath("//depot/Modifiers/ReadMe.txt"), null); IList lfs = new List(); lfs.Add(fs); Options ops = new Options(); IList target = rep.TagFiles(lfs, "admin_label", ops); Assert.IsNotNull(target); bool foundit = false; VersionSpec ver = new Revision(2); foreach (FileSpec f in target) { if (f.DepotPath.Path == "//depot/Modifiers/ReadMe.txt" && f.Version.ToString() == "#2") { foundit = true; break; } } Assert.IsTrue(foundit); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetFiles /// [TestMethod()] public void GetFilesTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 6, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); FileSpec filespec = new FileSpec(new DepotPath("//depot/MyCode2/..."), null); FileSpec filespec1 = new FileSpec(new DepotPath("//depot/Modifiers/..."), null); FileSpec filespec2 = new FileSpec(new DepotPath("//depot/TestData/..."), null); IList filespecs = new List(); filespecs.Add(filespec); filespecs.Add(filespec1); filespecs.Add(filespec2); Options ops = new Options(); IList target = rep.GetFiles(filespecs, ops); bool foundit = false; foreach (File f in target) { if (f.DepotPath.Path == "//depot/TestData/Numbers.txt") { foundit = true; break; } } Assert.IsTrue(foundit); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetSubmittedIntegrations /// [TestMethod()] public void GetSubmittedIntegrationsTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 6, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); FileSpec filespec = new FileSpec(new DepotPath("//depot/MyCode2/..."), null); IList filespecs = new List(); filespecs.Add(filespec); Options ops = new Options(); IList target = rep.GetSubmittedIntegrations(filespecs, ops); bool foundit = false; foreach (FileIntegrationRecord f in target) { if (f.How == IntegrateAction.BranchFrom) { foundit = true; break; } } Assert.IsTrue(foundit); filespec = null; ops = new Options(); ops["-b"] = "MyCode->MyCode2"; target = rep.GetSubmittedIntegrations(filespecs, ops); foundit = false; foreach (FileIntegrationRecord f in target) { if (f.FromFile.DepotPath.Path == "//depot/MyCode/ReadMe.txt") { foundit = true; break; } } Assert.IsTrue(foundit); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetFileLineMatches /// [TestMethod()] public void GetFileLineMatchesTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 6, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); FileSpec filespec = new FileSpec(new DepotPath("//depot/TestData/Letters.txt"), null); IList filespecs = new List(); filespecs.Add(filespec); string pattern = "kjfrj"; Options ops = new Options((GetFileLineMatchesCmdFlags.IncludeLineNumbers), 0, 0, 0); IList target = rep.GetFileLineMatches(filespecs, pattern, ops); bool foundit = false; foreach (FileLineMatch f in target) { if (f.LineNumber == 27) { foundit = true; break; } } Assert.IsTrue(foundit); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetFileAnnotations /// [TestMethod()] public void GetFileAnnotationsTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 13, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); FileSpec filespec = new FileSpec(new DepotPath("//flow/D1/b/the_other.txt"), null); IList filespecs = new List(); filespecs.Add(filespec); Options ops = new Options(); ops["-ac"] = null; IList target = rep.GetFileAnnotations(filespecs, ops); bool foundit = false; foreach (FileAnnotation f in target) { if (f.Line == "the other\r\n" && f.File.Version.ToString().Contains("28") && f.File.Version.ToString().Contains("49")) { foundit = true; break; } if (f.Line == "the other\r\n" && f.File.Version.ToString().Contains("110") && f.File.Version.ToString().Contains("131")) { foundit = true; break; } } Assert.IsTrue(foundit); ops = new Options(); ops["-acIi"] = null; try { target = rep.GetFileAnnotations(filespecs, ops); } catch (P4Exception e) { Assert.IsNotNull(e); Assert.AreEqual(e.ErrorCode, P4ClientError.MsgServer_UseAnnotate); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetFileAnnotations with branches /// [TestMethod()] public void GetFileAnnotationsBranchesTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 13, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); FileSpec filespec = new FileSpec(new DepotPath("//flow/D1/b/the_other.txt"), null); IList filespecs = new List(); filespecs.Add(filespec); Options ops = new Options(); ops["-aci"] = null; IList target = rep.GetFileAnnotations(filespecs, ops); #if DEBUG if (target == null) { P4CommandResult results = rep.Connection.LastResults; foreach (P4ClientError err in results.ErrorList) { Trace.WriteLine(err.ErrorMessage); } } #endif Assert.IsNotNull(target); bool foundit = false; foreach (FileAnnotation f in target) { if (f.Line == "the other\r\n" && f.File.Version.ToString().Contains("17") && f.File.Version.ToString().Contains("49")) { foundit = true; break; } if (f.Line == "the other\r\n" && f.File.Version.ToString().Contains("99") && f.File.Version.ToString().Contains("131")) { foundit = true; break; } } Assert.IsTrue(foundit); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetFileAnnotations with integrations /// [TestMethod()] public void GetFileAnnotationsIntegrationsTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 13, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); FileSpec filespec = new FileSpec(new DepotPath("//flow/D1/b/the_other.txt"), null); IList filespecs = new List(); filespecs.Add(filespec); Options ops = new Options(); ops["-acI"] = null; IList target = rep.GetFileAnnotations(filespecs, ops); bool foundit = false; foreach (FileAnnotation f in target) { if (f.Line == "the other\r\n" && f.File.Version.ToString().Contains("17") && f.File.Version.ToString().Contains("49")) { foundit = true; break; } if (f.Line == "the other\r\n" && f.File.Version.ToString().Contains("99") && f.File.Version.ToString().Contains("131")) { foundit = true; break; } } Assert.IsTrue(foundit); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetFileContents /// [TestMethod()] public void GetFileContentsTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 6, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); FileSpec filespec = new FileSpec(new DepotPath("//depot/MyCode/README.txt"), null); IList filespecs = new List(); filespecs.Add(filespec); Options ops = new Options(); IList target = rep.GetFileContents(filespecs, ops); bool foundit = false; foreach (string s in target) { if (s.Contains("Secret")) { foundit = true; break; } } Assert.IsTrue(foundit); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetFileContentsEx /// [TestMethod()] public void GetFileContentsExTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 6, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); FileSpec filespec = new FileSpec(new DepotPath("//depot/MyCode/README.txt"), null); IList filespecs = new List(); filespecs.Add(filespec); Options ops = new Options(); IList target = rep.GetFileContentsEx(filespecs, ops); Assert.IsTrue(target[0] is FileSpec); Assert.IsTrue(target[1] is string); string s = target[1] as string; Assert.IsTrue(s.Contains("Secret")); filespec = new FileSpec(new DepotPath("//depot/MyCode/Silly.bmp"), null); filespecs = new List(); filespecs.Add(filespec); ops = new Options(); target = rep.GetFileContentsEx(filespecs, ops); Assert.IsTrue(target[0] is FileSpec); Assert.IsTrue(target[1] is byte[]); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetFileDiffs /// [TestMethod()] public void GetFileDiffsTest() { string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; Process p4d = Utilities.DeployP4TestServer(TestDir, 2, false); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); IList fsl = new List(); FileSpec fs = new FileSpec(new DepotPath("//depot/TestData/Letters.txt")); fsl.Add(fs); // to set up the diff, we need to revert the checkedout file, // sync it, check it out, and write some text to it. con.Client.RevertFiles(fsl, null); con.Client.SyncFiles(fsl, new SyncFilesCmdOptions(SyncFilesCmdFlags.Force)); con.Client.EditFiles(fsl, null); fsl = con.Client.GetClientFileMappings(fsl); System.IO.File.WriteAllText(fsl[0].LocalPath.Path, "just added this"); GetFileDiffsCmdOptions opts = new GetFileDiffsCmdOptions(GetFileDiffsCmdFlags.None, 0, 0, 0); IList target = rep.GetFileDiffs(fsl, opts); FileDiff fd = target[0]; Assert.IsNotNull(fd); Assert.AreEqual(fd.LeftFile.DepotPath.Path, "//depot/TestData/Letters.txt"); Assert.IsTrue(fd.Diff.Contains("> just added this")); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } } /// ///A test for GetDepotFileDiffs /// [TestMethod()] public void GetDepotFileDiffsTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 8, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); IList target = rep.GetDepotFileDiffs("//depot/MyCode2/...", "//depot/TestData/...", null); bool foundit = false; foreach (DepotFileDiff d in target) { if (d.LeftFile.DepotPath.Path.Equals("//depot/MyCode2/ReadMe.txt")) { foundit = true; break; } } Assert.IsTrue(foundit); target = rep.GetDepotFileDiffs("//depot/MyCode2/ReadMe.txt", "//depot/TestData/Numbers.txt", null); foundit = false; foreach (DepotFileDiff d in target) { if (d.Diff.Contains("Secret!")) { foundit = true; break; } } Assert.IsTrue(foundit); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetDepotFileDiffsRCS /// [TestMethod()] public void GetDepotFileDiffsRCSTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 8, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Options options = new Options(GetDepotFileDiffsCmdFlags.RCS, 0, 100, null, null, null); IList target = rep.GetDepotFileDiffs("//flow/D1/a/that.txt#1", "//flow/D1/a/that.txt#3", options); if (!(unicode)) { Assert.AreEqual(target[0].Diff, "a7 4\nA change... on Fri Jun 24 16:22:05 PDT 2011\n\nA change... on Fri Jun 24 16:22:07 PDT 2011\n\n"); } else { Assert.AreEqual(target[0].Diff, "a7 4\nA change... on Mon Jun 27 15:02:42 PDT 2011\n\nA change... on Mon Jun 27 15:02:42 PDT 2011\n\n"); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetDepotFileDiffsContext /// [TestMethod()] public void GetDepotFileDiffsContextTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 8, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Options options = new Options(GetDepotFileDiffsCmdFlags.Context, 100, 0, null, null, null); IList target = rep.GetDepotFileDiffs("//flow/D1/a/that.txt#1", "//flow/D1/a/that.txt#3", options); if (!(unicode)) { Assert.AreEqual(target[0].Diff, "***************\n*** 1,7 ****\n--- 1,11 ----\n that\n that\n thatA Change on Mon May 16 16:01:35 PDT 2011\n \n A Change on Tue May 24 14:04:57 PDT 2011-changes to a-\n A Change on Tue May 24 14:06:00 PDT 2011-changes to a, again-\n A Change on Tue May 24 14:28:53 PDT 2011-changes to a alone (again)-\n+ A change... on Fri Jun 24 16:22:05 PDT 2011\n+ \n+ A change... on Fri Jun 24 16:22:07 PDT 2011\n+ \n"); } else { Assert.AreEqual(target[0].Diff, "***************\n*** 1,7 ****\n--- 1,11 ----\n that\n that\n thatA Change on Mon May 16 16:01:35 PDT 2011\n \n A Change on Tue May 24 14:04:57 PDT 2011-changes to a-\n A Change on Tue May 24 14:06:00 PDT 2011-changes to a, again-\n A Change on Tue May 24 14:28:53 PDT 2011-changes to a alone (again)-\n+ A change... on Mon Jun 27 15:02:42 PDT 2011\n+ \n+ A change... on Mon Jun 27 15:02:42 PDT 2011\n+ \n"); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetDepotFileDiffsSummary /// [TestMethod()] public void GetDepotFileDiffsSummaryTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 8, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Options options = new Options(GetDepotFileDiffsCmdFlags.Summary, 0, 100, null, null, null); IList target = rep.GetDepotFileDiffs("//flow/D1/a/that.txt#1", "//flow/D1/a/that.txt#3", options); Assert.AreEqual(target[0].Diff, "add 1 chunks 4 lines\ndeleted 0 chunks 0 lines\nchanged 0 chunks 0 / 0 lines\n"); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetDepotFileDiffsUnified /// [TestMethod()] public void GetDepotFileDiffsUnifiedTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 8, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Options options = new Options(GetDepotFileDiffsCmdFlags.Unified, 0, 100, null, null, null); IList target = rep.GetDepotFileDiffs("//flow/D1/a/that.txt#1", "//flow/D1/a/that.txt#3", options); if (!(unicode)) { Assert.AreEqual(target[0].Diff, "@@ -1,7 +1,11 @@\n that\n that\n thatA Change on Mon May 16 16:01:35 PDT 2011\n \n A Change on Tue May 24 14:04:57 PDT 2011-changes to a-\n A Change on Tue May 24 14:06:00 PDT 2011-changes to a, again-\n A Change on Tue May 24 14:28:53 PDT 2011-changes to a alone (again)-\n+A change... on Fri Jun 24 16:22:05 PDT 2011\n+\n+A change... on Fri Jun 24 16:22:07 PDT 2011\n+\n"); } else { Assert.AreEqual(target[0].Diff, "@@ -1,7 +1,11 @@\n that\n that\n thatA Change on Mon May 16 16:01:35 PDT 2011\n \n A Change on Tue May 24 14:04:57 PDT 2011-changes to a-\n A Change on Tue May 24 14:06:00 PDT 2011-changes to a, again-\n A Change on Tue May 24 14:28:53 PDT 2011-changes to a alone (again)-\n+A change... on Mon Jun 27 15:02:42 PDT 2011\n+\n+A change... on Mon Jun 27 15:02:42 PDT 2011\n+\n"); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetDepotFileDiffsIgnoreWSChanges /// [TestMethod()] public void GetDepotFileDiffsIgnoreWSChangesTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 8, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Options options = new Options(GetDepotFileDiffsCmdFlags.IgnoreWhitespaceChanges, 0, 100, null, null, null); IList target = rep.GetDepotFileDiffs("//flow/D1/a/that.txt#1", "//flow/D1/a/that.txt#3", options); if (!(unicode)) { Assert.AreEqual(target[0].Diff, "7a8,11\n> A change... on Fri Jun 24 16:22:05 PDT 2011\n> \n> A change... on Fri Jun 24 16:22:07 PDT 2011\n> \n"); } else { Assert.AreEqual(target[0].Diff, "7a8,11\n> A change... on Mon Jun 27 15:02:42 PDT 2011\n> \n> A change... on Mon Jun 27 15:02:42 PDT 2011\n> \n"); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetDepotFileDiffsIgnoreWS /// [TestMethod()] public void GetDepotFileDiffsIgnoreWSTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 8, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Options options = new Options(GetDepotFileDiffsCmdFlags.IgnoreWhitespace, 0, 100, null, null, null); IList target = rep.GetDepotFileDiffs("//flow/D1/a/that.txt#1", "//flow/D1/a/that.txt#3", options); if (!(unicode)) { Assert.AreEqual(target[0].Diff, "7a8,11\n> A change... on Fri Jun 24 16:22:05 PDT 2011\n> \n> A change... on Fri Jun 24 16:22:07 PDT 2011\n> \n"); } else { Assert.AreEqual(target[0].Diff, "7a8,11\n> A change... on Mon Jun 27 15:02:42 PDT 2011\n> \n> A change... on Mon Jun 27 15:02:42 PDT 2011\n> \n"); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetDepotFileDiffsIgnoreLE /// [TestMethod()] public void GetDepotFileDiffsIgnoreLETest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 8, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Options options = new Options(GetDepotFileDiffsCmdFlags.IgnoreLineEndings, 0, 100, null, null, null); IList target = rep.GetDepotFileDiffs("//flow/D1/a/that.txt#1", "//flow/D1/a/that.txt#3", options); if (!(unicode)) { Assert.AreEqual(target[0].Diff, "7a8,11\n> A change... on Fri Jun 24 16:22:05 PDT 2011\n> \n> A change... on Fri Jun 24 16:22:07 PDT 2011\n> \n"); } else { Assert.AreEqual(target[0].Diff, "7a8,11\n> A change... on Mon Jun 27 15:02:42 PDT 2011\n> \n> A change... on Mon Jun 27 15:02:42 PDT 2011\n> \n"); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetDepotFileDiffsLimited /// [TestMethod()] public void GetDepotFileDiffsLimitedTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 13, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Options options = new Options(GetDepotFileDiffsCmdFlags.Limit, 0, 0, null, null, null); IList target = rep.GetDepotFileDiffs("//flow/D1/a/that.txt#1", "//flow/D1/a/that.txt#3", options); // these files are different so the result of the // command should have one diff Assert.AreEqual(target.Count, 1); target = rep.GetDepotFileDiffs("//flow/D1/a/that.txt#1", "//flow/D1/a/that.txt#1", options); // these files are identical so the result of the // command should be null Assert.IsNull(target); // confirm the error message Assert.IsTrue(con.LastResults.ErrorList[0].ErrorMessage.Contains("no differing files.")); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetDepotFileDiffsNoFlags /// [TestMethod()] public void GetDepotFileDiffsNoFlags() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 8, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); IList target = rep.GetDepotFileDiffs("//flow/D1/a/that.txt#1", "//flow/D1/a/that.txt#3", null); if (!(unicode)) { Assert.AreEqual(target[0].Diff, "7a8,11\n> A change... on Fri Jun 24 16:22:05 PDT 2011\n> \n> A change... on Fri Jun 24 16:22:07 PDT 2011\n> \n"); } else { Assert.AreEqual(target[0].Diff, "7a8,11\n> A change... on Mon Jun 27 15:02:42 PDT 2011\n> \n> A change... on Mon Jun 27 15:02:42 PDT 2011\n> \n"); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for P4APINET-158 /// [TestMethod()] public void P4APINET_158_Test() { string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; bool unicode = false; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 8, unicode); try { Perforce.P4.Server srv = new Perforce.P4.Server(new ServerAddress(uri)); Perforce.P4.Repository p4 = new Perforce.P4.Repository(srv); p4.Connection.UserName = user; p4.Connection.Connect(new Perforce.P4.Options()); p4.Connection.Login(pass); p4.Connection.Disconnect(); } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } } }