منصوبے کے بارے میں

AutoFFF ایک پائتھون پر مبنی ٹول ہے جو C API ہیڈر فائلوں کے لیے FFF (Fake Functions Framework) جعلی فنکشن تعریفیں خودکار طور پر تیار کرنے کے لیے ڈیزائن کیا گیا ہے، جو ایمبیڈڈ C یونٹ ٹیسٹنگ میں ایک عام مسئلہ حل کرتا ہے۔ یہ جو بنیادی مسئلہ حل کرتا ہے وہ یہ ہے کہ ایمبیڈڈ C کوڈ کو ہوسٹ مشین پر ٹیسٹ کرنا اکثر ناممکن ہوتا ہے، کیونکہ ہوسٹ آرکیٹیکچر ٹارگٹ پلیٹ فارم سے مختلف ہوتا ہے، اور ایمبیڈڈ ماحول میں عام طور پر ڈائنامک لنکنگ کی حمایت نہیں ہوتی جبکہ C میں رن ٹائم پر ٹیسٹ کے تحت کوڈ میں ہیرا پھیری کے لیے بلٹ ان رن ٹائم ریفلیکشن صلاحیتیں نہیں ہوتیں۔ ٹارگٹ پلیٹ فارم APIs کو جعلی بنانا اور ٹیسٹ کے تحت کوڈ کو جعلی نفاذات سے جوڑنا اس مسئلے کو حل کرتا ہے، لیکن API فنکشنز کے لیے دستی طور پر جعلی تعریفیں لکھنا تھکا دینے والا، محنت طلب اور غلطیوں کا شکار ہوتا ہے، اور دستی طور پر برقرار رکھے گئے ٹیسٹ ہیڈرز اصل APIs کے ارتقاء کے ساتھ "کوڈ روٹ" کا شکار ہوتے ہیں۔ AutoFFF اس عمل کو خودکار بناتا ہے C API ہیڈر فائلوں کو پارس کرکے اور FFF-مطابق جعلی تعریفوں کے ساتھ استعمال کے لیے تیار ٹیسٹ ہیڈرز تیار کرتا ہے۔ یہ "ریپنگ" جعلی بنانے کے فلسفے کی پیروی کرتا ہے: تیار کردہ ٹیسٹ ہیڈرز اصل API ہیڈر کو شامل کرتے ہیں تاکہ اس کی تمام اقسام، متغیرات، اور فنکشن اعلانات وراثت میں ملیں، صرف ضروری جعلی تعریفیں شامل کرتے ہیں۔ یہ طریقہ متبادل "بیننگ" حکمت عملی کے مقابلے میں کہیں زیادہ قابل برقرار ہے، جس میں تمام API عناصر کو دستی طور پر دوبارہ اعلان کرنے کی ضرورت ہوتی ہے اور یہ اصل ہیڈرز سے ہم آہنگی کھونے کا زیادہ شکار ہوتا ہے۔ ٹول میں ہیڈر فائلوں کے اندر براہ راست تعریف شدہ فنکشنز کے لیے ایک بلٹ ان ورک ارو شامل ہے، جو عام طور پر جعلی بنانے پر دوبارہ تعریف کی غلطیاں پیدا کرتا ہے۔ یہ ورک ارو میکرو ری روٹنگ کا استعمال کرتا ہے تاکہ اصل ان-ہیڈر فنکشن کی کالز کو تیار کردہ جعلی کی طرف ری ڈائریکٹ کیا جا سکے، بشرطیکہ ٹیسٹ ہیڈر کو ٹیسٹ فائلوں میں ٹیسٹ کے تحت کوڈ سے پہلے شامل کیا جائے۔ AutoFFF ان لائبریریوں کے ساتھ کام کرنے کی حمایت کرتا ہے جن کی سخت شامل کرنے کی پالیسیاں ہیں (جیسے FreeRTOS یا CMSIS) کمانڈ لائن آپشنز کے ذریعے پارسنگ کے دوران مطلوبہ ہیڈرز داخل کرنے یا پری پروسیسر میکروز کی وضاحت کرنے کے لیے۔ یہ متعدد انضمام کے اختیارات پیش کرتا ہے: اسے اسٹینڈ اکیلے کمانڈ لائن ماڈیول کے طور پر چلایا جا سکتا ہے، کسٹم اسکرپٹس میں پائتھون پیکیج کے طور پر استعمال کیا جا سکتا ہے، یا فراہم کردہ مثال Makefiles کے ذریعے Make جیسے بلڈ سسٹمز میں ضم کیا جا سکتا ہے۔ یہ دو جنریٹر موڈ فراہم کرتا ہے: BareFakeGenerator صرف خام FFF میکرو تعریفیں ہیڈر بائلر پلیٹ کے بغیر آؤٹ پٹ کرتا ہے ان صارفین کے لیے جو کسٹم پروسیسنگ شامل کرنا چاہتے ہیں، جبکہ SimpleFakeGenerator کم سے کم قابل عمل، قابل ترتیب ٹیسٹ ہیڈرز تیار کرتا ہے جن میں انکلوڈ گارڈز اور مطلوبہ انکلوڈز شامل ہوتے ہیں۔ AutoFFF MIT لائسنس کے تحت تقسیم کیا جاتا ہے، PyPI کے ذریعے دستیاب ہے، اور C پارسنگ کے لیے pycparser پروجیکٹ کے fake_libc_include ہیڈر مجموعہ کی ضرورت ہوتی ہے، جو pip ریلیز کے ساتھ شامل نہیں ہوتا اور اسے pycparser ریپوزٹری سے الگ سے حاصل کرنا ضروری ہوتا ہے۔