1 #include <glib.h>
2 #include <locale.h>
3 #include "lensfun.h"
4 
5 typedef struct {
6     lfDatabase* db;
7 } lfFixture;
8 
9 
db_setup(lfFixture * lfFix,gconstpointer data)10 void db_setup(lfFixture *lfFix, gconstpointer data)
11 {
12     lfFix->db = new lfDatabase ();
13     lfFix->db->Load("data/db");
14 }
15 
16 
db_teardown(lfFixture * lfFix,gconstpointer data)17 void db_teardown(lfFixture *lfFix, gconstpointer data)
18 {
19     delete lfFix->db;
20 }
21 
22 
23 // test different lens search strings
test_DB_lens_search(lfFixture * lfFix,gconstpointer data)24 void test_DB_lens_search(lfFixture* lfFix, gconstpointer data)
25 {
26     const lfLens **lenses = NULL;
27 
28     // search only by name
29     lenses = lfFix->db->FindLenses (NULL, NULL, "pEntax 50-200 ED");
30     g_assert_nonnull(lenses);
31     g_assert_cmpstr(lenses[0]->Model, ==, "smc Pentax-DA 50-200mm f/4-5.6 DA ED");
32     g_assert_true(lfLens(*lenses[0]).Check());
33     lf_free (lenses);
34 
35     lenses = lfFix->db->FindLenses (NULL, NULL, "smc Pentax-DA 50-200mm f/4-5.6 DA ED");
36     g_assert_nonnull(lenses);
37     g_assert_cmpstr(lenses[0]->Model, ==, "smc Pentax-DA 50-200mm f/4-5.6 DA ED");
38     g_assert_true(lfLens(*lenses[0]).Check());
39     lf_free (lenses);
40 
41     lenses = lfFix->db->FindLenses (NULL, NULL, "PENTAX fa 28mm 2.8");
42     g_assert_nonnull(lenses);
43     g_assert_cmpstr(lenses[0]->Model, ==, "smc Pentax-FA 28mm f/2.8 AL");
44     g_assert_true(lfLens(*lenses[0]).Check());
45     lf_free (lenses);
46 
47     // search lens for a certain camera considering mount compatibilities
48     const lfCamera **cameras = NULL;
49     cameras = lfFix->db->FindCamerasExt("Ricoh", "k-70");
50     g_assert_nonnull(cameras);
51 
52     lenses = lfFix->db->FindLenses (cameras[0], NULL, "Fotasy M3517 35mm");
53     g_assert_nonnull(lenses);
54     g_assert_cmpstr(lenses[0]->Model, ==, "Fotasy M3517 35mm f/1.7");
55     g_assert_true(lfLens(*lenses[0]).Check());
56     lf_free (lenses);
57 
58     lf_free(cameras);
59 }
60 
61 // test different camera search strings
test_DB_cam_search(lfFixture * lfFix,gconstpointer data)62 void test_DB_cam_search(lfFixture* lfFix, gconstpointer data)
63 {
64     const lfCamera **cameras = NULL;
65 
66     cameras = lfFix->db->FindCamerasExt("pentax", "K100D");
67     g_assert_nonnull(cameras);
68     g_assert_cmpstr(cameras[0]->Model, ==, "Pentax K100D");
69     g_assert_true(lfCamera(*cameras[0]).Check());
70     lf_free (cameras);
71 
72     cameras = lfFix->db->FindCamerasExt(NULL, "K 100 D");
73     g_assert_nonnull(cameras);
74     g_assert_cmpstr(cameras[0]->Model, ==, "Pentax K100D");
75     g_assert_true(lfCamera(*cameras[0]).Check());
76     lf_free (cameras);
77 
78     cameras = lfFix->db->FindCamerasExt(NULL, "PentAX K100 D");
79     g_assert_nonnull(cameras);
80     g_assert_cmpstr(cameras[0]->Model, ==, "Pentax K100D");
81     g_assert_true(lfCamera(*cameras[0]).Check());
82     lf_free (cameras);
83 
84 }
85 
86 // copy some entries into a new database file
test_DB_save(lfFixture * lfFix,gconstpointer data)87 void test_DB_save(lfFixture* lfFix, gconstpointer data)
88 {
89 
90     lfDatabase* db2 = new lfDatabase ();
91 
92     const lfCamera **cameras = NULL;
93     const lfLens **lenses = NULL;
94 
95     cameras = lfFix->db->FindCamerasExt("pentax", "K100D");
96     lenses = lfFix->db->FindLenses (NULL, NULL, "smc Pentax-DA 50-200mm f/4-5.6 DA ED");
97 
98     lfLens* lens = new lfLens(*lenses[0]);
99     lfCamera* camera = new lfCamera(*cameras[0]);
100 
101     db2->AddCamera(camera);
102     db2->AddLens(lens);
103     db2->Save("test_db.xml");
104 
105     delete db2;
106 
107     lf_free (lenses);
108     lf_free (cameras);
109 
110 }
111 
main(int argc,char ** argv)112 int main (int argc, char **argv)
113 {
114 
115     setlocale (LC_ALL, "");
116 
117     g_test_init(&argc, &argv, NULL);
118 
119     g_test_add("/database/camera search", lfFixture, NULL, db_setup, test_DB_cam_search, db_teardown);
120     g_test_add("/database/lens search", lfFixture, NULL, db_setup, test_DB_lens_search, db_teardown);
121     g_test_add("/database/save", lfFixture, NULL, db_setup, test_DB_save, db_teardown);
122 
123     return g_test_run();
124 }
125