using Perforce.P4; using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Diagnostics; namespace p4api.net.unit.test { /// ///This is a test class for RepositoryTest and is intended ///to contain RepositoryTest Unit Tests /// public partial class RepositoryTest { /// ///A test for CreateChangelist /// [TestMethod()] public void CreateChangelistTest() { 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, 7, 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); Changelist c = new Changelist(); c.Description = "New changelist for unit test"; Options uFlags = new Options(ChangeCmdFlags.IncludeJobs); Changelist newGuy = rep.CreateChangelist(c, null); Assert.IsNotNull(newGuy); Assert.AreNotEqual(-1, newGuy.Id); Assert.AreEqual("admin", newGuy.OwnerName); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for UpdateChangelist /// [TestMethod()] public void UpdateChangelistTest() { 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, 7, 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); Changelist c = rep.GetChangelist(5); c.Description = "new desc\r\nline 2\nline 3"; rep.UpdateChangelist(c); Changelist d = rep.GetChangelist(5); Assert.AreEqual(d.Description, "new desc\r\nline 2\r\nline 3"); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for UpdateChangelist with another user's pending changelist /// [TestMethod()] public void UpdateChangelistOtherUserTest() { 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); int changeID = 120; if(unicode) { changeID = 87; } Changelist c = new Changelist(); try { c = rep.GetChangelist(changeID); c.Description = "new desc\r\nline 2\nline 3"; rep.UpdateChangelist(c); } catch (P4Exception ex) { Assert.AreEqual(838932948, ex.ErrorCode, ("can only be updated by user harold")); } Options opts = new Options(); opts["-f"] = null; c = rep.GetChangelist(changeID); c.Description = "new desc\r\nline 2\nline 3"; rep.UpdateChangelist(c,opts); Changelist d = rep.GetChangelist(changeID); Assert.AreEqual(d.Description, "new desc\r\nline 2\r\nline 3"); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for UpdateChangelistWithMultilineDescription /// [TestMethod()] public void UpdateChangelistWithMultilineDescTest() { 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, 7, 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); Changelist c = rep.GetChangelist(5); c.Description = "new desc"; rep.UpdateChangelist(c); Changelist d = rep.GetChangelist(5); Assert.AreEqual(d.Description, "new desc"); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for SubmitShelvedFromChangelist /// [TestMethod()] public void SubmitShelvedFromChangelist() { 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); Changelist change = new Changelist(5, true); change.initialize(con); // shelve the files in changelist 5 con.Client.ShelveFiles(new ShelveFilesCmdOptions(ShelveFilesCmdFlags.None, null,change.Id)); // revert the checked out file that was shelved FileSpec file = new FileSpec(new DepotPath("//..."), null, null, null); con.Client.RevertFiles(new RevertCmdOptions(RevertFilesCmdFlags.None, change.Id), file); // submit the shelved file SubmitCmdOptions submitOptions = new SubmitCmdOptions(Perforce.P4.SubmitFilesCmdFlags.SubmitShelved, 5, null, null, null); change.Submit(submitOptions); P4CommandResult last = rep.Connection.LastResults; Assert.IsTrue(last.Success); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for UpdateSubmittedChangelist /// [TestMethod()] public void UpdateSubmittedChangelistTest() { 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, 7, 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); Changelist c = rep.GetChangelist(12); c.Description += "\n\tModified!"; rep.UpdateSubmittedChangelist(c,null); Changelist d = rep.GetChangelist(12); Assert.IsTrue(d.Description.Contains("Modified!")); // on the non-unicode server edit the description // of Alex's changelist 8 as an admin if (!unicode) { c = rep.GetChangelist(8); c.Description += "\n\tModified!"; Options opts = new Options(); opts["-f"] = null; rep.UpdateSubmittedChangelist(c, opts); d = rep.GetChangelist(8); Assert.IsTrue(d.Description.Contains("Modified!")); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for DeleteChangelist /// [TestMethod()] public void DeleteChangelistTest() { 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, 7, 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); Changelist c = new Changelist(); c.Description = "New changelist for unit test"; Changelist newGuy = rep.CreateChangelist(c, null); rep.DeleteChangelist(newGuy, null); Changelist deadGuy = null; try { deadGuy = rep.GetChangelist(newGuy.Id); } catch { } Assert.IsNull(deadGuy); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetChangelist /// [TestMethod()] public void GetChangelistTest() { 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); Changelist c = rep.GetChangelist(5, null); Assert.IsNotNull(c); Assert.AreEqual("admin", c.OwnerName); Assert.AreEqual(c.Files.Count, 1); Assert.AreEqual(c.Jobs.Count, 1); Assert.IsTrue(c.Files[0].DepotPath.Path.Contains("//depot/MyCode/NewFile.txt")); if (unicode == false) { c = rep.GetChangelist(4, null); Assert.AreEqual("admin", c.OwnerName); Assert.AreEqual(c.Files.Count, 2); Assert.AreEqual(c.Jobs.Count, 1); Assert.IsTrue(c.Files[0].DepotPath.Path.Contains("//depot/TheirCode/ReadMe.txt")); Assert.AreEqual(c.Files[0].Digest, "C7DECE3DB80A73F3F53AF4BCF6AC0576"); Assert.AreEqual(c.Files[0].FileSize, 30); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetChangelistWithUTCConversion /// [TestMethod()] public void GetChangelistWithUTCConversionTest() { 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); P4Command cmd = new P4Command(rep, "change", true, "5"); Options opts = new Options(); opts["-o"] = null; Changelist fromChangeCommand = new Changelist(); P4CommandResult results = cmd.Run(opts); if (results.Success) { fromChangeCommand.initialize(rep.Connection); fromChangeCommand.FromChangeCmdTaggedOutput((results.TaggedOutput[0]), server.Metadata.DateTimeOffset, FormBase.DSTMismatch(server.Metadata)); } SubmitResults sr = fromChangeCommand.Submit(null); int submitted = 17; if (unicode) { submitted = 13; } cmd = new P4Command(rep, "change", true, submitted.ToString()); opts = new Options(); opts["-o"] = null; fromChangeCommand = new Changelist(); results = cmd.Run(opts); if (results.Success) { fromChangeCommand.initialize(rep.Connection); fromChangeCommand.FromChangeCmdTaggedOutput((results.TaggedOutput[0]), server.Metadata.DateTimeOffset, FormBase.DSTMismatch(server.Metadata)); } Changelist fromDescribeCommand = rep.GetChangelist(submitted, null); Assert.AreEqual(fromDescribeCommand.ModifiedDate, fromChangeCommand.ModifiedDate); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetChangelistWithUTCConversionNoTZDetails /// [TestMethod()] public void GetChangelistWithUTCConversionNoTZDetailsTest() { 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); P4Command cmd = new P4Command(rep, "describe", true, "5"); Changelist fromDescribeCommand = new Changelist(); P4CommandResult results = cmd.Run(null); if (results.Success) { fromDescribeCommand.FromChangeCmdTaggedOutput((results.TaggedOutput[0]), string.Empty, FormBase.DSTMismatch(server.Metadata)); } DateTime unconverted = fromDescribeCommand.ModifiedDate; fromDescribeCommand = new Changelist(); results = cmd.Run(null); if (results.Success) { fromDescribeCommand.FromChangeCmdTaggedOutput((results.TaggedOutput[0]), "-200", FormBase.DSTMismatch(server.Metadata)); } Assert.AreEqual(unconverted.AddHours(-2), fromDescribeCommand.ModifiedDate); fromDescribeCommand = new Changelist(); results = cmd.Run(null); if (results.Success) { fromDescribeCommand.FromChangeCmdTaggedOutput((results.TaggedOutput[0]), "+200", FormBase.DSTMismatch(server.Metadata)); } Assert.AreEqual(unconverted.AddHours(2), fromDescribeCommand.ModifiedDate); fromDescribeCommand = new Changelist(); results = cmd.Run(null); if (results.Success) { fromDescribeCommand.FromChangeCmdTaggedOutput((results.TaggedOutput[0]), "200", FormBase.DSTMismatch(server.Metadata)); } Assert.AreEqual(unconverted.AddHours(2), fromDescribeCommand.ModifiedDate); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetChangelists /// [TestMethod()] public void GetChangelistsTest() { 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); IList u = rep.GetChangelists( new Options(ChangesCmdFlags.LongDescription, "admin_space", 10, ChangeListStatus.Pending, null)); Assert.IsNotNull(u); Assert.AreEqual(3, u.Count); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } } }