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
{
private static string testClientSpec =
@"# A Perforce Client Specification.
#
# Client: The client name.
# Update: The date this specification was last modified.
# Access: The date this client was last used in any way.
# Owner: The user who created this client.
# Host: If set, restricts access to the named host.
# Description: A short description of the client (optional).
# Root: The base directory of the client workspace.
# AltRoots: Up to two alternate client workspace roots.
# Options: Client options:
# [no]allwrite [no]clobber [no]compress
# [un]locked [no]modtime [no]rmdir
# SubmitOptions:
# submitunchanged/submitunchanged+reopen
# revertunchanged/revertunchanged+reopen
# leaveunchanged/leaveunchanged+reopen
# LineEnd: Text file line endings on client: local/unix/mac/win/share.
# View: Lines to map depot files into the client workspace.
#
# Use 'p4 help client' to see more about client views and options.
Client: XP1_usr
Update: 2010/11/29 15:30:32
Access: 2010/11/23 08:26:17
Owner: XP1
Host: XPPro001
Description:
Created by xp1.
Root: c:\XP1_dev
AltRoots:
c:\XP1_dev_A1
c:\XP1_dev_A2
Options: noallwrite noclobber nocompress unlocked nomodtime normdir
SubmitOptions: submitunchanged
LineEnd: local
View:
//depot/dev/xp1/... //XP1_usr/depot/dev/xp1/...
";
///
///A test for CreateClient
///
[TestMethod()]
public void CreateClientTest()
{
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, 10, 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);
Client c = new Client();
c.Parse(testClientSpec);
c.OwnerName = "Alice";
MapEntry me = new MapEntry(MapType.Include,
new DepotPath("//depot/dev/xp1/..."),
new ClientPath("//XP1_usr/depot/dev/xp1/..."));
c.ViewMap.Add(me);
c.Stream = "//Rocket/GUI";
c.StreamAtChange = "82";
Client newGuy = rep.CreateClient(c, null);
Assert.IsNotNull(newGuy);
Assert.AreEqual("Alice", newGuy.OwnerName);
//create another one without stream fields or server id
Client b = new Client();
b.Parse(testClientSpec);
b.Name = "XP2_usr";
b.OwnerName = "Alice";
b.AltRoots = null;
MapEntry me2 = new MapEntry(MapType.Include,
new DepotPath("//depot/dev/xp1/..."),
new ClientPath("//XP2_usr/depot/dev/xp1/..."));
b.ViewMap.Clear();
b.ViewMap.Add(me2);
Client anotherNewGuy = rep.CreateClient(b, null);
Assert.IsNotNull(anotherNewGuy);
Assert.AreEqual("Alice", anotherNewGuy.OwnerName);
// add lines with spaces in the view
MapEntry me3 = new MapEntry(MapType.Include,
new DepotPath("//depot/dev/xp1/file with spaces.txt"),
new ClientPath("//XP2_usr/dev/xp1/file with spaces.txt"));
b.ViewMap.Clear();
b.ViewMap.Add(me3);
anotherNewGuy = rep.UpdateClient(b);
Assert.IsNotNull(anotherNewGuy);
}
}
finally
{
Utilities.RemoveTestServer(p4d, TestDir);
}
unicode = !unicode;
}
}
///
///A test for DeleteClient
///
[TestMethod()]
public void DeleteClientTest()
{
bool unicode = false;
string uri = "localhost:6666";
string user = "admin";
string pass = string.Empty;
string ws_client = "admin_space";
string targetClient = "admin_space2";
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);
Client c = new Client();
c.Name = targetClient;
Options uFlags = new Options(ClientCmdFlags.Force);
rep.DeleteClient(c, uFlags);
IList u2 = rep.GetClients(
new Options(ClientsCmdFlags.None, null, "XP1_usr", 2, null));
Assert.IsNull(u2);
}
}
finally
{
Utilities.RemoveTestServer(p4d, TestDir);
}
unicode = !unicode;
}
}
///
///A test for GetClient
///
[TestMethod()]
public void GetClientTest()
{
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);
Client c = rep.GetClient("alex_space", null);
Assert.IsNotNull(c);
Assert.AreEqual("alex_space", c.Name);
}
}
finally
{
Utilities.RemoveTestServer(p4d, TestDir);
}
unicode = !unicode;
}
}
///
///A test for GetClient - get streams client
///
[TestMethod()]
public void GetClientTest2()
{
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, 10, 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);
Client c = rep.GetClient("bob-main", null);
Assert.IsNotNull(c);
Assert.AreEqual("bob-main", c.Name);
Assert.AreEqual("//Parents/MAIN", c.Stream);
}
}
finally
{
Utilities.RemoveTestServer(p4d, TestDir);
}
unicode = !unicode;
}
}
///
///A test for GetClients
///
[TestMethod()]
public void GetClientsTest()
{
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.GetClients(
new Options(ClientsCmdFlags.IncludeTime, null, null, 2, null));
Assert.IsNotNull(u);
Assert.AreEqual(2, u.Count);
}
}
finally
{
Utilities.RemoveTestServer(p4d, TestDir);
}
unicode = !unicode;
}
}
}
}