Skip to content

Commit

Permalink
VENOM-302: Fix unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
naxuroqa committed Apr 9, 2018
1 parent 8b1b48a commit 52b47db
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 48 deletions.
16 changes: 10 additions & 6 deletions src/testing/TestDhtNodeDb.vala
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ public class TestDhtNodeDb : UnitTest {
node_factory = new MockDhtNodeFactory();

mock().when(statement, "builder").then_return_object(builder);
mock().when(statement_factory, "createStatement").then_return_object(statement);
mock().when(statement_factory, "createStatement", args().string("", any_string()).create())
.then_return_object(statement);
}

private void test_init() throws GLib.Error {
Expand All @@ -68,12 +69,15 @@ public class TestDhtNodeDb : UnitTest {
private void test_insert() throws GLib.Error {
var node_database = new SqliteDhtNodeDatabase(statement_factory, logger);
Assert.assert_not_null(node_database);
node_database.insertDhtNode("", "", 0, false, "", "");
node_database.insertDhtNode("a", "b", 0, false, "c", "d");

mock().verify_count(statement, "bind_text", 4);
mock().verify(statement, "bind_int");
mock().verify(statement, "bind_bool");
mock().verify(statement, "step");
mock().verify(statement, "bind_text", args().string("$KEY").string("a").create());
mock().verify(statement, "bind_text", args().string("$ADDRESS").string("b").create());
mock().verify(statement, "bind_text", args().string("$OWNER").string("c").create());
mock().verify(statement, "bind_text", args().string("$LOCATION").string("d").create());
mock().verify(statement, "bind_int", args().string("$PORT").int(0).create());
mock().verify(statement, "bind_bool", args().string("$ISBLOCKED").bool(false).create());
mock().verify_count(statement, "step", 2);
}

private void test_select() throws GLib.Error {
Expand Down
13 changes: 8 additions & 5 deletions src/testing/TestMessageDb.vala
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public class TestMessageDb : UnitTest {
.then_return_object(builder);

statementFactory = new MockStatementFactory();
when(statementFactory, "createStatement")
when(statementFactory, "createStatement", args().string("", any_string()).create())
.then_return_object(statement);

message = new MockLoggedMessage();
Expand All @@ -63,11 +63,14 @@ public class TestMessageDb : UnitTest {
private void test_insert() throws Error {
var messageDatabase = new SqliteMessageDatabase(statementFactory, logger);
Assert.assert_not_null(messageDatabase);
messageDatabase.insertMessage("", "", "", new DateTime.now_local(), true);
var time = new DateTime.now_local();
messageDatabase.insertMessage("a", "b", "c", time, true);

mock().verify_count(statement, "bind_text", 3);
mock().verify(statement, "bind_int64");
mock().verify(statement, "bind_bool");
mock().verify(statement, "bind_text", args().string("$USER").string("a").create());
mock().verify(statement, "bind_text", args().string("$CONTACT").string("b").create());
mock().verify(statement, "bind_text", args().string("$MESSAGE").string("c").create());
mock().verify(statement, "bind_int64", args().string("$TIME").int64(time.to_unix()).create());
mock().verify(statement, "bind_bool", args().string("$SENDER").bool(true).create());
}

private void test_retrieve() throws Error {
Expand Down
3 changes: 2 additions & 1 deletion src/testing/TestToxAdapterFiletransferListener.vala
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ public class TestToxAdapterFiletransferListener : UnitTest {
}

private void test_remove_transfer() throws Error {
when(transfer, "get_state").then_return_int(FileTransferState.CANCEL);
transfers.append(transfer);
listener.attach_to_session(session);
listener.remove_transfer(transfer);
Expand All @@ -93,7 +94,7 @@ public class TestToxAdapterFiletransferListener : UnitTest {
try {
listener.remove_transfer(transfer);
} catch (Error e) {
Assert.assert_true(transfers.length() == 1);
Assert.assert_true(transfers.length() == 0);
return;
}
Assert.fail();
Expand Down
109 changes: 73 additions & 36 deletions src/testing/util/MockFramework.vala
Original file line number Diff line number Diff line change
Expand Up @@ -41,32 +41,27 @@ namespace Mock {
mock().verify_count(object, function_name, count, args);
}

public static Arguments.Builder args() {
public static Arguments.ArgBuilder args() {
return Arguments.builder();
}

public static Matcher any_string() {
return new AnyStringMatcher();
}

private static string get_object_info(GLib.Object o) {
if (o == null) {
return "unknown";
}
return "%s".printf(o.get_type().name());
}

public class Arguments : GLib.Object {
private GLib.List<GLib.Value?> arg_list;
construct {
arg_list = new GLib.List<GLib.Value?>();
}

public void add(GLib.Value v) {
arg_list.append(v);
}

public uint length() {
return arg_list.length();
}
public interface Matcher : GLib.Object {
public abstract bool equals(GLib.Value v1, GLib.Value v2);
}

private bool value_equals(GLib.Value v1, GLib.Value v2) {
public class ValueMatcher : Matcher, GLib.Object {
public bool equals(GLib.Value v1, GLib.Value v2) {
var t1 = v1.type();
var t2 = v2.type();
if (t1 != t2) {
Expand All @@ -89,13 +84,54 @@ namespace Mock {
}
return false;
}
}

public class AnyStringMatcher : Matcher, GLib.Object {
public bool equals(GLib.Value v1, GLib.Value v2) {
var t1 = v1.type();
var t2 = v2.type();
return (t1 == t2 && t1 == typeof (string));
}
}

public class Argument : GLib.Object {
private GLib.Value value;
private Matcher matcher;

public Argument(GLib.Value value, Matcher matcher = new ValueMatcher()) {
this.value = value;
this.matcher = matcher;
}

public bool equals(Argument arg) {
return matcher.equals(value, arg.value);
}

public GLib.Value get_value() {
return value;
}
}

public class Arguments : GLib.Object {
private Gee.List<Argument> arg_list;
construct {
arg_list = new Gee.ArrayList<Argument>();
}

public void add(Argument arg) {
arg_list.add(arg);
}

public uint length() {
return arg_list.size;
}

public bool equals(Arguments args){
if (arg_list.length() != args.arg_list.length()) {
if (length() != args.length()) {
return false;
}
for (var i = 0; i < arg_list.length(); i++) {
if (!value_equals(arg_list.nth_data(i), args.arg_list.nth_data(i))) {
for (var i = 0; i < length(); i++) {
if (!arg_list.@get(i).equals(args.arg_list.@get(i))) {
return false;
}
}
Expand All @@ -107,7 +143,8 @@ namespace Mock {

public string to_string() {
var ret = "";
foreach (var v in arg_list) {
foreach (var arg in arg_list) {
var v = arg.get_value();
var t = v.type();
if (t == typeof(uint)) {
ret += " + (uint) %u\n".printf(v.get_uint());
Expand All @@ -128,55 +165,55 @@ namespace Mock {
return ret;
}

public static Builder builder() {
return new Builder();
public static ArgBuilder builder() {
return new ArgBuilder();
}

public class Builder : GLib.Object {
public class ArgBuilder : GLib.Object {
private Arguments args;
construct {
args = new Arguments();
}
public Builder bool(bool b) {
public ArgBuilder bool(bool b, Matcher m = new ValueMatcher()) {
var v = GLib.Value(typeof(bool));
v.set_boolean(b);
args.add(v);
args.add(new Argument(v, m));
return this;
}
public Builder int(int i) {
public ArgBuilder int(int i, Matcher m = new ValueMatcher()) {
var v = GLib.Value(typeof(int));
v.set_int(i);
args.add(v);
args.add(new Argument(v, m));
return this;
}
public Builder uint(uint i) {
public ArgBuilder uint(uint i, Matcher m = new ValueMatcher()) {
var v = GLib.Value(typeof(uint));
v.set_uint(i);
args.add(v);
args.add(new Argument(v, m));
return this;
}
public Builder int64(int64 i) {
public ArgBuilder int64(int64 i, Matcher m = new ValueMatcher()) {
var v = GLib.Value(typeof(int64));
v.set_int64(i);
args.add(v);
args.add(new Argument(v, m));
return this;
}
public Builder uint64(uint64 i) {
public ArgBuilder uint64(uint64 i, Matcher m = new ValueMatcher()) {
var v = GLib.Value(typeof(uint64));
v.set_uint64(i);
args.add(v);
args.add(new Argument(v, m));
return this;
}
public Builder string(string s) {
public ArgBuilder string(string s, Matcher m = new ValueMatcher()) {
var v = GLib.Value(typeof(string));
v.set_string(s);
args.add(s);
args.add(new Argument(v, m));
return this;
}
public Builder object(GLib.Object o) {
public ArgBuilder object(GLib.Object o, Matcher m = new ValueMatcher()) {
var v = GLib.Value(typeof(GLib.Object));
v.set_object(o);
args.add(v);
args.add(new Argument(v, m));
return this;
}
public Arguments create() {
Expand Down

0 comments on commit 52b47db

Please sign in to comment.