// Path: MyApplication/app/src/main/java/com/example/mikhail_sianko/myapplication/db/DbHelper.java
// public class DbHelper extends SQLiteOpenHelper implements IDbOperations {
// 
//     private static final String SQL_TABLE_CREATE_TEMPLATE = "CREATE TABLE IF NOT EXISTS %s (%s);";
//     private static final String SQL_TABLE_CREATE_FIELD_TEMPLATE = "%s %s";
// 
//     public DbHelper(final Context context, final String name, final int version) {
//         super(context, name, null, version);
//     }
// 
//     @Nullable
//     public static String getTableName(final AnnotatedElement clazz) {
//         final Table table = clazz.getAnnotation(Table.class);
// 
//         if (table != null) {
//             return table.name();
//         } else {
//             return null;
//         }
//     }
// 
//     @Nullable
//     public static String getTableCreateQuery(final Class<?> clazz) {
//         final Table table = clazz.getAnnotation(Table.class);
// 
//         if (table != null) {
//             try {
//                 final String name = table.name();
// 
//                 final StringBuilder builder = new StringBuilder();
//                 final Field[] fields = clazz.getFields();
// 
//                 for (int i = 0; i < fields.length; i++) {
//                     final Field field = fields[i];
// 
//                     final Annotation[] annotations = field.getAnnotations();
// 
//                     String type = null;
// 
//                     for (final Annotation annotation : annotations) {
//                         if (annotation instanceof dbInteger) {
//                             type = ((dbInteger) annotation).value();
//                         } else if (annotation instanceof dbLong) {
//                             type = ((dbLong) annotation).value();
//                         } else if (annotation instanceof dbString) {
//                             type = ((dbString) annotation).value();
//                         }
//                     }
// 
//                     if (type == null) {
//                         return null;
//                     }
// 
//                     final String value = (String) field.get(null);
// 
//                     builder.append(String.format(Locale.US, SQL_TABLE_CREATE_FIELD_TEMPLATE, value, type));
// 
//                     if (i < fields.length - 1) {
//                         builder.append(",");
//                     }
//                 }
// 
//                 return String.format(Locale.US, SQL_TABLE_CREATE_TEMPLATE, name, builder);
//             } catch (final Exception e) {
//                 return null;
//             }
//         } else {
//             return null;
//         }
//     }
// 
//     @Override
//     public void onCreate(final SQLiteDatabase db) {
//         for (final Class<?> clazz : Contract.MODELS) {
//             final String sql = getTableCreateQuery(clazz);
// 
//             if (sql != null) {
//                 db.execSQL(sql);
//             }
//         }
//     }
// 
//     @Override
//     public void onUpgrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) {
// 
//     }
// 
//     @Override
//     public Cursor query(final String sql, final String... args) {
//         final SQLiteDatabase database = getReadableDatabase();
// 
//         return database.rawQuery(sql, args);
//     }
// 
//     @Override
//     public long insert(final Class<?> table, final ContentValues values) {
//         final String name = getTableName(table);
// 
//         if (name != null) {
//             final SQLiteDatabase database = getWritableDatabase();
//             long id;
// 
//             try {
//                 database.beginTransaction();
// 
//                 id = database.insert(name, null, values);
// 
//                 database.setTransactionSuccessful();
//             } finally {
//                 database.endTransaction();
//             }
// 
//             return id;
//         } else {
//             throw new RuntimeException();
//         }
//     }
// 
//     @Override
//     public int bulkInsert(final Class<?> table, final List<ContentValues> values) {
//         final String name = getTableName(table);
// 
//         if (name != null) {
//             final SQLiteDatabase database = getWritableDatabase();
//             int count = 0;
// 
//             try {
//                 database.beginTransaction();
// 
//                 for (final ContentValues value : values) {
//                     database.insert(name, null, value);
// 
//                     count++;
//                 }
// 
//                 database.setTransactionSuccessful();
//             } finally {
//                 database.endTransaction();
//             }
// 
//             return count;
//         } else {
//             throw new RuntimeException();
//         }
//     }
// 
//     @Override
//     public int delete(final Class<?> table, final String sql, final String... args) {
//         final String name = getTableName(table);
// 
//         if (name != null) {
//             final SQLiteDatabase database = getWritableDatabase();
//             int count = 0;
// 
//             try {
//                 database.beginTransaction();
// 
//                 count = database.delete(name, sql, args);
// 
//                 database.setTransactionSuccessful();
//             } finally {
//                 database.endTransaction();
//             }
// 
//             return count;
//         } else {
//             throw new RuntimeException();
//         }
//     }
// }
// 
// Path: MyApplication/app/src/main/java/com/example/mikhail_sianko/myapplication/model/contract/User.java
// @Table(name = "USER")
// public final class User {
// 
//     @dbInteger
//     public static final String ID = "id";
// 
//     @dbString
//     public static final String TITLE = "title";
// 
//     @dbLong
//     public static final String DATE = "date";
// 
// }


import com.example.mikhail_sianko.myapplication.db.DbHelper;
import com.example.mikhail_sianko.myapplication.model.contract.User;
import org.junit.Assert;
import org.junit.Test;
package com.example.mikhail_sianko.myapplication;



public class DbTest {

    @Test
    public void testCreateTableStatement() {
// Path: MyApplication/app/src/main/java/com/example/mikhail_sianko/myapplication/db/DbHelper.java
// public class DbHelper extends SQLiteOpenHelper implements IDbOperations {
// 
//     private static final String SQL_TABLE_CREATE_TEMPLATE = "CREATE TABLE IF NOT EXISTS %s (%s);";
//     private static final String SQL_TABLE_CREATE_FIELD_TEMPLATE = "%s %s";
// 
//     public DbHelper(final Context context, final String name, final int version) {
//         super(context, name, null, version);
//     }
// 
//     @Nullable
//     public static String getTableName(final AnnotatedElement clazz) {
//         final Table table = clazz.getAnnotation(Table.class);
// 
//         if (table != null) {
//             return table.name();
//         } else {
//             return null;
//         }
//     }
// 
//     @Nullable
//     public static String getTableCreateQuery(final Class<?> clazz) {
//         final Table table = clazz.getAnnotation(Table.class);
// 
//         if (table != null) {
//             try {
//                 final String name = table.name();
// 
//                 final StringBuilder builder = new StringBuilder();
//                 final Field[] fields = clazz.getFields();
// 
//                 for (int i = 0; i < fields.length; i++) {
//                     final Field field = fields[i];
// 
//                     final Annotation[] annotations = field.getAnnotations();
// 
//                     String type = null;
// 
//                     for (final Annotation annotation : annotations) {
//                         if (annotation instanceof dbInteger) {
//                             type = ((dbInteger) annotation).value();
//                         } else if (annotation instanceof dbLong) {
//                             type = ((dbLong) annotation).value();
//                         } else if (annotation instanceof dbString) {
//                             type = ((dbString) annotation).value();
//                         }
//                     }
// 
//                     if (type == null) {
//                         return null;
//                     }
// 
//                     final String value = (String) field.get(null);
// 
//                     builder.append(String.format(Locale.US, SQL_TABLE_CREATE_FIELD_TEMPLATE, value, type));
// 
//                     if (i < fields.length - 1) {
//                         builder.append(",");
//                     }
//                 }
// 
//                 return String.format(Locale.US, SQL_TABLE_CREATE_TEMPLATE, name, builder);
//             } catch (final Exception e) {
//                 return null;
//             }
//         } else {
//             return null;
//         }
//     }
// 
//     @Override
//     public void onCreate(final SQLiteDatabase db) {
//         for (final Class<?> clazz : Contract.MODELS) {
//             final String sql = getTableCreateQuery(clazz);
// 
//             if (sql != null) {
//                 db.execSQL(sql);
//             }
//         }
//     }
// 
//     @Override
//     public void onUpgrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) {
// 
//     }
// 
//     @Override
//     public Cursor query(final String sql, final String... args) {
//         final SQLiteDatabase database = getReadableDatabase();
// 
//         return database.rawQuery(sql, args);
//     }
// 
//     @Override
//     public long insert(final Class<?> table, final ContentValues values) {
//         final String name = getTableName(table);
// 
//         if (name != null) {
//             final SQLiteDatabase database = getWritableDatabase();
//             long id;
// 
//             try {
//                 database.beginTransaction();
// 
//                 id = database.insert(name, null, values);
// 
//                 database.setTransactionSuccessful();
//             } finally {
//                 database.endTransaction();
//             }
// 
//             return id;
//         } else {
//             throw new RuntimeException();
//         }
//     }
// 
//     @Override
//     public int bulkInsert(final Class<?> table, final List<ContentValues> values) {
//         final String name = getTableName(table);
// 
//         if (name != null) {
//             final SQLiteDatabase database = getWritableDatabase();
//             int count = 0;
// 
//             try {
//                 database.beginTransaction();
// 
//                 for (final ContentValues value : values) {
//                     database.insert(name, null, value);
// 
//                     count++;
//                 }
// 
//                 database.setTransactionSuccessful();
//             } finally {
//                 database.endTransaction();
//             }
// 
//             return count;
//         } else {
//             throw new RuntimeException();
//         }
//     }
// 
//     @Override
//     public int delete(final Class<?> table, final String sql, final String... args) {
//         final String name = getTableName(table);
// 
//         if (name != null) {
//             final SQLiteDatabase database = getWritableDatabase();
//             int count = 0;
// 
//             try {
//                 database.beginTransaction();
// 
//                 count = database.delete(name, sql, args);
// 
//                 database.setTransactionSuccessful();
//             } finally {
//                 database.endTransaction();
//             }
// 
//             return count;
//         } else {
//             throw new RuntimeException();
//         }
//     }
// }
// 
// Path: MyApplication/app/src/main/java/com/example/mikhail_sianko/myapplication/model/contract/User.java
// @Table(name = "USER")
// public final class User {
// 
//     @dbInteger
//     public static final String ID = "id";
// 
//     @dbString
//     public static final String TITLE = "title";
// 
//     @dbLong
//     public static final String DATE = "date";
// 
// }


// Path: MyApplication/app/src/test/java/com/example/mikhail_sianko/myapplication/DbTest.java
import com.example.mikhail_sianko.myapplication.db.DbHelper;
import com.example.mikhail_sianko.myapplication.model.contract.User;
import org.junit.Assert;
import org.junit.Test;

package com.example.mikhail_sianko.myapplication;



public class DbTest {

    @Test
    public void testCreateTableStatement() {
        final String sql = DbHelper.getTableCreateQuery(User.class);