From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: =?utf-8?Q?Daniel_Mart=C3=ADn?= Newsgroups: gmane.emacs.devel Subject: [PATCH] Testing strategy for Tree-sitter modes Date: Sun, 08 Jan 2023 15:23:57 +0100 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="23725"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (darwin) Cc: casouri@gmail.com To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sun Jan 08 15:25:05 2023 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pEWbg-0005zc-Vt for ged-emacs-devel@m.gmane-mx.org; Sun, 08 Jan 2023 15:25:05 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pEWax-0002XR-AE; Sun, 08 Jan 2023 09:24:19 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pEWav-0002XG-IR for emacs-devel@gnu.org; Sun, 08 Jan 2023 09:24:17 -0500 Original-Received: from sonic309-24.consmr.mail.ir2.yahoo.com ([77.238.179.82]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pEWan-0004s0-7B for emacs-devel@gnu.org; Sun, 08 Jan 2023 09:24:15 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.es; s=s2048; t=1673187841; bh=qvLvMmw3/f+ilnzMvyBzwqVLo1TiFyCFPUejk/f6WN0=; h=From:To:Cc:Subject:Date:References:From:Subject:Reply-To; b=EVYucFKWPfBvEJ0xFavhi5BGfDh6j8JG/iK2vRTiGLobjS1OpLRCX1GfZMaOy+dnClsMBqmXS9kr6w85eZH6/eUvayZfCcugXMlFErMdCl3g1Hd7AR6xKuHTvsMVlNPunDlNnwXt+SEYCChquqGFmc0vyJMlhUliTS7TjIOUQ6S0tdAzUNsUW5Risjxy5654+/lJ8jkbDcaN94Z3N/cyAYzxx2qAdTNQ5wb7sskOpNs1QFavAndTumdsIaBwKYf+fg/iSM1Bc5GDp/BZ1/1MNF5dMziC92/2ONq1W3Z2nFn86FSa11DB/A/wt6JSsqieDY+Avk1/aZ+33WIxjueErA== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1673187841; bh=mvGhGENdyCskZ6xNSXc6UO5JqYkNCCUH0CrY60JBCIY=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=GLMJ1HsVphbA4l85tYkuC2z9jx03iY3wBnBZUlOq87jn4KtAsP2KNyQx4Jk0N9zBaivAn53f/SU7+uFcMsck124UAbkysc1tn2orY1loJMX3HaVDU8OozNwZomoa2r/+6OCJsf4AOwlscjhWpIS9fjUCUA+0nAPA92hGXNmyg2qZolY15AHmV8WuAH41QJsHdoPiF4TK4UbHEFvT+B9I4HuDXnTN3J1S7gnQbBefxnyuJJga6VFOc5KzDvbYm1G+5otizQcvKzOldYh/Z4qcuNFq05Xpi6aUyGjrjZfTUj512kPw5hd8SrsSAmIwJIKbRPen9ngHe0hjSydxAZq+6g== X-YMail-OSG: K0e1qt4VM1naFvULEfY1UkgYW72ljaSRxedF63k37Co8az2RMqPLHstuehYJ29M Kid.08NzB5D2RNCTuueZYX3A.B8KEp_xVn2p8hHaOEHTMTxFCV4x5J31R1Y76hT7kNLHGtwyOHvO SrMVcB2K05IauqQKOJGpEy.fXagrL1zDAcw9mDkHev7yttuNg6W_O6MP1GwVNjOLR_nI_SJWzpMw hvlob883B6fQG8V5xm6YqgCI6OzeMZr3NV6bdTz4V8W6MrOVzjQdMGSgZfUY.ZaS21sixEzjaEF2 Q4bPuKvthpgv7UIZ1kvFc61MhiNRtf6jf2UHB5WcOxsOqJdsd0XBUS.qEEcxdhCW13zTzR1j0D6e dce1AnNwhD5PofsSZSIUs2UagT_60psEOIBug6fARCurOBGddh9BBi.i6_iFt5dwRBvbD7Z_w2Xb oECIlseS5TrOFxmcpZxAqwk9Ai3O4nD8tFdPUMYJ2xh82cC93Dq2VStBST4srLfA9TTqlYCn9G6z IPKTuXK5mri1vY1QcOvZsvSu45xmVgi7gituUTjk1WJQdxh3aJgbeMnuGOeEmERbSA4VhN5sIFM0 RziazitnL4l.pwQwB7uoHzj5NHjCe5IRdaf949I22GmiVZ4QmebPkNC07G_I7tayzScR5sfd8GyF yN5Qh_MhBWNBD3LEaPy8CmgtkpsmB7iZQPunwge7ZZUHgbF52gn7jugr9XBC5Fj3K4v5KC9KBFSd hevOCBGbMEEPtRV_XCPE.TnT4iy06D7Zgbgbs8egVtinjsQL57354k9kUs9di0EKrNsmewcOF0Yf vYuapfJ8KlMWdxS2mzazvyhdKCrY4VpFt3Jb_whGDc X-Sonic-MF: Original-Received: from sonic.gate.mail.ne1.yahoo.com by sonic309.consmr.mail.ir2.yahoo.com with HTTP; Sun, 8 Jan 2023 14:24:01 +0000 Original-Received: by hermes--production-ir2-5795fc58c8-cg4fj (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID dc0e56ab93fd4d233733054bb5c5b81c; Sun, 08 Jan 2023 14:23:58 +0000 (UTC) X-Mailer: WebService/1.1.20982 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo Received-SPF: pass client-ip=77.238.179.82; envelope-from=mardani29@yahoo.es; helo=sonic309-24.consmr.mail.ir2.yahoo.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:302284 Archived-At: --=-=-= Content-Type: text/plain I think the development of Tree-sitter modes would benefit from having a regression test suite that ensures that bug fixes for specific cases don't regress in the future. As a start, I've attached to this mail some ERT-based tests for the indentation feature of c-ts-mode. I've used the convenient feature of "erts" files to create the tests, which I think make them readable and maintainable. The tests are skipped if the Emacs build does not have Tree-sitter enabled, or if the corresponding grammar is not installed. Perhaps it would be a good idea to install these Tree-sitter dependencies in the container images used for EMBA (https://emba.gnu.org/emacs), so that we're able to run Tree-sitter tests in continuous integration, and even play with different versions of Tree-sitter or the Tree-sitter grammars to detect incompatibilities. I'll leave this decision to the people in charge of EMBA. Thanks. --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-Add-c-ts-mode-tests.patch >From c557b9aa3d733d9b2d4ab2b13b5b0c644d7675f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Mart=C3=ADn?= Date: Sun, 8 Jan 2023 14:04:24 +0100 Subject: [PATCH] Add c-ts-mode tests * test/lisp/progmodes/c-ts-mode-resources/indent.erts: New .erts file to test indentation of typical C constructs and prevent regression of bug fixes. * test/lisp/progmodes/c-ts-mode-tests.el: New file with c-ts-mode tests. --- .../progmodes/c-ts-mode-resources/indent.erts | 44 +++++++++++++++++++ test/lisp/progmodes/c-ts-mode-tests.el | 31 +++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 test/lisp/progmodes/c-ts-mode-resources/indent.erts create mode 100644 test/lisp/progmodes/c-ts-mode-tests.el diff --git a/test/lisp/progmodes/c-ts-mode-resources/indent.erts b/test/lisp/progmodes/c-ts-mode-resources/indent.erts new file mode 100644 index 00000000000..5defcbd3c83 --- /dev/null +++ b/test/lisp/progmodes/c-ts-mode-resources/indent.erts @@ -0,0 +1,44 @@ +Code: + (lambda () + (c-ts-mode) + (indent-region (point-min) (point-max))) + +Name: Basic + +=-= +int +main (void) +{ + return 0; +} +=-=-= + +Name: Hanging Braces (GNU Style) + +=-= +int +main (void) +{ + if (true) + { + } +} +=-=-= + +Name: Multiline Parameter List (bug#60398) + +=-= +int f2(int x, + int y) { + return x + y; +}; +=-=-= + +Name: Multiline Block Comments (bug#60270) + +=-= +/** + * @some_func: + * @arg1: + */ +=-=-= diff --git a/test/lisp/progmodes/c-ts-mode-tests.el b/test/lisp/progmodes/c-ts-mode-tests.el new file mode 100644 index 00000000000..8606faf9913 --- /dev/null +++ b/test/lisp/progmodes/c-ts-mode-tests.el @@ -0,0 +1,31 @@ +;;; c-ts-mode-tests.el --- Tests for Tree-sitter-based C mode -*- lexical-binding: t; -*- + +;; Copyright (C) 2023 Free Software Foundation, Inc. + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Code: + +(require 'ert) +(require 'ert-x) +(require 'treesit) + +(ert-deftest c-ts-mode-test-indentation () + (skip-unless (treesit-ready-p 'c)) + (ert-test-erts-file (ert-resource-file "indent.erts"))) + +(provide 'c-ts-mode-tests) +;;; c-ts-mode-tests.el ends here -- 2.34.1 --=-=-=--