From b147ecd9fad8d9d470ffd0af320961dc2af86b26 Mon Sep 17 00:00:00 2001 From: Glavin Wiechert Date: Sun, 28 Dec 2014 02:29:03 -0400 Subject: [PATCH] See #18. Implement foundation for Specs. What's New: - Directory structure for specs examples to be tested - Dynamically generated specs for all tests/sample source code TODO: - Fix expected test output file contents to be correct --- .../{ => c/expected}/test.c | 0 .../nested-jsbeautifyrc/c/original/test.c | 1234 +++++++++++++++++ .../{ => cpp/expected}/test.cpp | 0 .../{ => cpp/expected}/test.h | 0 .../nested-jsbeautifyrc/cpp/original/test.cpp | 27 + .../nested-jsbeautifyrc/cpp/original/test.h | 10 + .../{ => csharp/expected}/test.cs | 0 .../csharp/original/test.cs | 113 ++ .../{ => css/expected}/test.css | 0 .../nested-jsbeautifyrc/css/original/test.css | 3 + .../{ => html/expected}/test.html | 0 .../html/original}/test.html | 0 .../{ => java/expected}/test.java | 0 .../java/original/test.java | 35 + .../{ => javascript/expected}/test.js | 0 .../javascript/original}/test.js | 0 .../{ => markdown/expected}/test.md | 0 .../markdown/original/test.md | 4 + .../{ => objectivec/expected}/test.m | 0 .../objectivec/original/test.m | 30 + .../{ => python/expected}/test.py | 0 .../python/original/test.py | 21 + .../{ => sql/expected}/test.sql | 0 .../sql/original}/test.sql | 0 .../{ => coffeescript/expected}/test.coffee | 0 .../coffeescript/original/test.coffee | 10 + .../{ => css/expected}/test.css | 0 .../simple-jsbeautifyrc/css/original/test.css | 3 + .../{ => handlebars/expected}/test.hbs | 0 .../handlebars/original/test.hbs | 10 + .../{ => html-erb/expected}/test.erb | 0 .../html-erb/original/test.erb | 18 + .../html/expected/test.html | 15 + .../html/original/test.html | 15 + .../javascript/expected/test.js | 3 + .../{ => javascript/expected}/test.json | 0 .../{ => javascript/expected}/test2.js | 0 .../javascript/original/test.js | 3 + .../javascript/original/test.json | 9 + .../javascript/original/test2.js | 4 + .../{ => less/expected}/test.less | 0 .../{ => less/expected}/test2.less | 0 .../{ => less/expected}/test3.less | 0 .../{ => less/expected}/test4.less | 0 .../{ => less/expected}/test5.less | 0 .../less/original/test.less | 33 + .../less/original/test2.less | 169 +++ .../less/original/test3.less | 9 + .../less/original/test4.less | 20 + .../less/original/test5.less | 9 + .../{ => markdown/expected}/test.md | 0 .../markdown/original/test.md | 7 + .../{ => mustache/expected}/test.mustache | 0 .../mustache/original/test.mustache | 16 + .../{ => perl/expected}/test.pl | 0 .../simple-jsbeautifyrc/perl/original/test.pl | 12 + .../{ => php/expected}/test.php | 0 .../{ => php/expected}/test2.php | 0 .../{ => php/expected}/test3.php | 0 .../simple-jsbeautifyrc/php/original/test.php | 32 + .../php/original/test2.php | 4 + .../php/original/test3.php | 19 + .../{ => ruby/expected}/test.rb | 0 .../simple-jsbeautifyrc/ruby/original/test.rb | 25 + .../{ => sass/expected}/alphasort1.scss | 0 .../{ => sass/expected}/test.sass | 0 .../{ => sass/expected}/test.scss | 0 .../sass/original/alphasort1.scss | 4 + .../sass/original/test.sass | 6 + .../sass/original/test.scss | 12 + .../simple-jsbeautifyrc/sql/expected/test.sql | 1 + .../{ => sql/expected}/test2.sql | 0 .../simple-jsbeautifyrc/sql/original/test.sql | 1 + .../sql/original/test2.sql | 5 + .../{ => typescript/expected}/test.ts | 0 .../typescript/original/test.ts | 8 + spec/atom-beautify-spec.coffee | 2 +- spec/beautify-languages-spec.coffee | 135 ++ 78 files changed, 2095 insertions(+), 1 deletion(-) rename examples/nested-jsbeautifyrc/{ => c/expected}/test.c (100%) create mode 100644 examples/nested-jsbeautifyrc/c/original/test.c rename examples/nested-jsbeautifyrc/{ => cpp/expected}/test.cpp (100%) rename examples/nested-jsbeautifyrc/{ => cpp/expected}/test.h (100%) create mode 100644 examples/nested-jsbeautifyrc/cpp/original/test.cpp create mode 100644 examples/nested-jsbeautifyrc/cpp/original/test.h rename examples/nested-jsbeautifyrc/{ => csharp/expected}/test.cs (100%) create mode 100644 examples/nested-jsbeautifyrc/csharp/original/test.cs rename examples/nested-jsbeautifyrc/{ => css/expected}/test.css (100%) create mode 100644 examples/nested-jsbeautifyrc/css/original/test.css rename examples/nested-jsbeautifyrc/{ => html/expected}/test.html (100%) rename examples/{simple-jsbeautifyrc => nested-jsbeautifyrc/html/original}/test.html (100%) rename examples/nested-jsbeautifyrc/{ => java/expected}/test.java (100%) create mode 100644 examples/nested-jsbeautifyrc/java/original/test.java rename examples/nested-jsbeautifyrc/{ => javascript/expected}/test.js (100%) rename examples/{simple-jsbeautifyrc => nested-jsbeautifyrc/javascript/original}/test.js (100%) rename examples/nested-jsbeautifyrc/{ => markdown/expected}/test.md (100%) create mode 100644 examples/nested-jsbeautifyrc/markdown/original/test.md rename examples/nested-jsbeautifyrc/{ => objectivec/expected}/test.m (100%) create mode 100644 examples/nested-jsbeautifyrc/objectivec/original/test.m rename examples/nested-jsbeautifyrc/{ => python/expected}/test.py (100%) create mode 100644 examples/nested-jsbeautifyrc/python/original/test.py rename examples/nested-jsbeautifyrc/{ => sql/expected}/test.sql (100%) rename examples/{simple-jsbeautifyrc => nested-jsbeautifyrc/sql/original}/test.sql (100%) rename examples/simple-jsbeautifyrc/{ => coffeescript/expected}/test.coffee (100%) create mode 100644 examples/simple-jsbeautifyrc/coffeescript/original/test.coffee rename examples/simple-jsbeautifyrc/{ => css/expected}/test.css (100%) create mode 100644 examples/simple-jsbeautifyrc/css/original/test.css rename examples/simple-jsbeautifyrc/{ => handlebars/expected}/test.hbs (100%) create mode 100644 examples/simple-jsbeautifyrc/handlebars/original/test.hbs rename examples/simple-jsbeautifyrc/{ => html-erb/expected}/test.erb (100%) create mode 100644 examples/simple-jsbeautifyrc/html-erb/original/test.erb create mode 100644 examples/simple-jsbeautifyrc/html/expected/test.html create mode 100644 examples/simple-jsbeautifyrc/html/original/test.html create mode 100644 examples/simple-jsbeautifyrc/javascript/expected/test.js rename examples/simple-jsbeautifyrc/{ => javascript/expected}/test.json (100%) rename examples/simple-jsbeautifyrc/{ => javascript/expected}/test2.js (100%) create mode 100644 examples/simple-jsbeautifyrc/javascript/original/test.js create mode 100644 examples/simple-jsbeautifyrc/javascript/original/test.json create mode 100644 examples/simple-jsbeautifyrc/javascript/original/test2.js rename examples/simple-jsbeautifyrc/{ => less/expected}/test.less (100%) rename examples/simple-jsbeautifyrc/{ => less/expected}/test2.less (100%) rename examples/simple-jsbeautifyrc/{ => less/expected}/test3.less (100%) rename examples/simple-jsbeautifyrc/{ => less/expected}/test4.less (100%) rename examples/simple-jsbeautifyrc/{ => less/expected}/test5.less (100%) create mode 100644 examples/simple-jsbeautifyrc/less/original/test.less create mode 100644 examples/simple-jsbeautifyrc/less/original/test2.less create mode 100644 examples/simple-jsbeautifyrc/less/original/test3.less create mode 100644 examples/simple-jsbeautifyrc/less/original/test4.less create mode 100644 examples/simple-jsbeautifyrc/less/original/test5.less rename examples/simple-jsbeautifyrc/{ => markdown/expected}/test.md (100%) create mode 100644 examples/simple-jsbeautifyrc/markdown/original/test.md rename examples/simple-jsbeautifyrc/{ => mustache/expected}/test.mustache (100%) create mode 100644 examples/simple-jsbeautifyrc/mustache/original/test.mustache rename examples/simple-jsbeautifyrc/{ => perl/expected}/test.pl (100%) create mode 100644 examples/simple-jsbeautifyrc/perl/original/test.pl rename examples/simple-jsbeautifyrc/{ => php/expected}/test.php (100%) rename examples/simple-jsbeautifyrc/{ => php/expected}/test2.php (100%) rename examples/simple-jsbeautifyrc/{ => php/expected}/test3.php (100%) create mode 100644 examples/simple-jsbeautifyrc/php/original/test.php create mode 100644 examples/simple-jsbeautifyrc/php/original/test2.php create mode 100644 examples/simple-jsbeautifyrc/php/original/test3.php rename examples/simple-jsbeautifyrc/{ => ruby/expected}/test.rb (100%) create mode 100644 examples/simple-jsbeautifyrc/ruby/original/test.rb rename examples/simple-jsbeautifyrc/{ => sass/expected}/alphasort1.scss (100%) rename examples/simple-jsbeautifyrc/{ => sass/expected}/test.sass (100%) rename examples/simple-jsbeautifyrc/{ => sass/expected}/test.scss (100%) create mode 100644 examples/simple-jsbeautifyrc/sass/original/alphasort1.scss create mode 100644 examples/simple-jsbeautifyrc/sass/original/test.sass create mode 100644 examples/simple-jsbeautifyrc/sass/original/test.scss create mode 100644 examples/simple-jsbeautifyrc/sql/expected/test.sql rename examples/simple-jsbeautifyrc/{ => sql/expected}/test2.sql (100%) create mode 100644 examples/simple-jsbeautifyrc/sql/original/test.sql create mode 100644 examples/simple-jsbeautifyrc/sql/original/test2.sql rename examples/simple-jsbeautifyrc/{ => typescript/expected}/test.ts (100%) create mode 100644 examples/simple-jsbeautifyrc/typescript/original/test.ts create mode 100644 spec/beautify-languages-spec.coffee diff --git a/examples/nested-jsbeautifyrc/test.c b/examples/nested-jsbeautifyrc/c/expected/test.c similarity index 100% rename from examples/nested-jsbeautifyrc/test.c rename to examples/nested-jsbeautifyrc/c/expected/test.c diff --git a/examples/nested-jsbeautifyrc/c/original/test.c b/examples/nested-jsbeautifyrc/c/original/test.c new file mode 100644 index 0000000..3605205 --- /dev/null +++ b/examples/nested-jsbeautifyrc/c/original/test.c @@ -0,0 +1,1234 @@ +/* i2c-core.c - a device driver for the iic-bus interface */ +/* ------------------------------------------------------------------------- */ +/* Copyright (C) 1995-99 Simon G. Vogl + + This program 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 2 of the License, or + (at your option) any later version. + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +/* ------------------------------------------------------------------------- */ + +/* With some changes from Kyösti Mälkki . + All SMBus-related things are written by Frodo Looijaard + SMBus 2.0 support by Mark Studebaker */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +static LIST_HEAD(adapters); +static LIST_HEAD(drivers); +static DECLARE_MUTEX(core_lists); +static DEFINE_IDR(i2c_adapter_idr); + +static int i2c_device_match(struct device *dev, struct device_driver *drv) +{ + return 1; +} + +static int i2c_bus_suspend(struct device * dev, pm_message_t state) +{ + int rc = 0; + + if (dev->driver && dev->driver->suspend) + rc = dev->driver->suspend(dev,state,0); + return rc; +} + +static int i2c_bus_resume(struct device * dev) +{ + int rc = 0; + + if (dev->driver && dev->driver->resume) + rc = dev->driver->resume(dev,0); + return rc; +} + +struct bus_type i2c_bus_type = { + .name = "i2c", + .match = i2c_device_match, + .suspend = i2c_bus_suspend, + .resume = i2c_bus_resume, +}; + +static int i2c_device_probe(struct device *dev) +{ + return -ENODEV; +} + +static int i2c_device_remove(struct device *dev) +{ + return 0; +} + +void i2c_adapter_dev_release(struct device *dev) +{ + struct i2c_adapter *adap = dev_to_i2c_adapter(dev); + complete(&adap->dev_released); +} + +struct device_driver i2c_adapter_driver = { + .name = "i2c_adapter", + .bus = &i2c_bus_type, + .probe = i2c_device_probe, + .remove = i2c_device_remove, +}; + +static void i2c_adapter_class_dev_release(struct class_device *dev) +{ + struct i2c_adapter *adap = class_dev_to_i2c_adapter(dev); + complete(&adap->class_dev_released); +} + +struct class i2c_adapter_class = { + .name = "i2c-adapter", + .release =&i2c_adapter_class_dev_release, +}; + +static ssize_t show_adapter_name(struct device *dev, struct device_attribute *attr, char *buf) +{ + struct i2c_adapter *adap = dev_to_i2c_adapter(dev); + return sprintf(buf, "%s\n", adap->name); +} +static DEVICE_ATTR(name, S_IRUGO, show_adapter_name, NULL); + + +static void i2c_client_release(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + complete(&client->released); +} + +static ssize_t show_client_name(struct device *dev, struct device_attribute *attr, char *buf) +{ + struct i2c_client *client = to_i2c_client(dev); + return sprintf(buf, "%s\n", client->name); +} + +/* + * We can't use the DEVICE_ATTR() macro here as we want the same filename for a + * different type of a device. So beware if the DEVICE_ATTR() macro ever + * changes, this definition will also have to change. + */ +static struct device_attribute dev_attr_client_name = { + .attr = {.name = "name", .mode = S_IRUGO, .owner = THIS_MODULE }, + .show = &show_client_name, +}; + + +/* --------------------------------------------------- + * registering functions + * --------------------------------------------------- + */ + +/* ----- + * i2c_add_adapter is called from within the algorithm layer, + * when a new hw adapter registers. A new device is register to be + * available for clients. + */ +int i2c_add_adapter(struct i2c_adapter *adap) +{ + int id, res = 0; + struct list_head *item; + struct i2c_driver *driver; + + down(&core_lists); + + if (idr_pre_get(&i2c_adapter_idr, GFP_KERNEL) == 0) { + res = -ENOMEM; + goto out_unlock; + } + + res = idr_get_new(&i2c_adapter_idr, adap, &id); + if (res < 0) { + if (res == -EAGAIN) + res = -ENOMEM; + goto out_unlock; + } + + adap->nr = id & MAX_ID_MASK; + init_MUTEX(&adap->bus_lock); + init_MUTEX(&adap->clist_lock); + list_add_tail(&adap->list,&adapters); + INIT_LIST_HEAD(&adap->clients); + + /* Add the adapter to the driver core. + * If the parent pointer is not set up, + * we add this adapter to the host bus. + */ + if (adap->dev.parent == NULL) + adap->dev.parent = &platform_bus; + sprintf(adap->dev.bus_id, "i2c-%d", adap->nr); + adap->dev.driver = &i2c_adapter_driver; + adap->dev.release = &i2c_adapter_dev_release; + device_register(&adap->dev); + device_create_file(&adap->dev, &dev_attr_name); + + /* Add this adapter to the i2c_adapter class */ + memset(&adap->class_dev, 0x00, sizeof(struct class_device)); + adap->class_dev.dev = &adap->dev; + adap->class_dev.class = &i2c_adapter_class; + strlcpy(adap->class_dev.class_id, adap->dev.bus_id, BUS_ID_SIZE); + class_device_register(&adap->class_dev); + + dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name); + + /* inform drivers of new adapters */ + list_for_each(item,&drivers) { + driver = list_entry(item, struct i2c_driver, list); + if (driver->flags & I2C_DF_NOTIFY) + /* We ignore the return code; if it fails, too bad */ + driver->attach_adapter(adap); + } + +out_unlock: + up(&core_lists); + return res; +} + + +int i2c_del_adapter(struct i2c_adapter *adap) +{ + struct list_head *item, *_n; + struct i2c_adapter *adap_from_list; + struct i2c_driver *driver; + struct i2c_client *client; + int res = 0; + + down(&core_lists); + + /* First make sure that this adapter was ever added */ + list_for_each_entry(adap_from_list, &adapters, list) { + if (adap_from_list == adap) + break; + } + if (adap_from_list != adap) { + pr_debug("i2c-core: attempting to delete unregistered " + "adapter [%s]\n", adap->name); + res = -EINVAL; + goto out_unlock; + } + + list_for_each(item,&drivers) { + driver = list_entry(item, struct i2c_driver, list); + if (driver->detach_adapter) + if ((res = driver->detach_adapter(adap))) { + dev_err(&adap->dev, "detach_adapter failed " + "for driver [%s]\n", driver->name); + goto out_unlock; + } + } + + /* detach any active clients. This must be done first, because + * it can fail; in which case we give up. */ + list_for_each_safe(item, _n, &adap->clients) { + client = list_entry(item, struct i2c_client, list); + + /* detaching devices is unconditional of the set notify + * flag, as _all_ clients that reside on the adapter + * must be deleted, as this would cause invalid states. + */ + if ((res=client->driver->detach_client(client))) { + dev_err(&adap->dev, "detach_client failed for client " + "[%s] at address 0x%02x\n", client->name, + client->addr); + goto out_unlock; + } + } + + /* clean up the sysfs representation */ + init_completion(&adap->dev_released); + init_completion(&adap->class_dev_released); + class_device_unregister(&adap->class_dev); + device_remove_file(&adap->dev, &dev_attr_name); + device_unregister(&adap->dev); + list_del(&adap->list); + + /* wait for sysfs to drop all references */ + wait_for_completion(&adap->dev_released); + wait_for_completion(&adap->class_dev_released); + + /* free dynamically allocated bus id */ + idr_remove(&i2c_adapter_idr, adap->nr); + + dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name); + + out_unlock: + up(&core_lists); + return res; +} + + +/* ----- + * What follows is the "upwards" interface: commands for talking to clients, + * which implement the functions to access the physical information of the + * chips. + */ + +int i2c_add_driver(struct i2c_driver *driver) +{ + struct list_head *item; + struct i2c_adapter *adapter; + int res = 0; + + down(&core_lists); + + /* add the driver to the list of i2c drivers in the driver core */ + driver->driver.name = driver->name; + driver->driver.bus = &i2c_bus_type; + driver->driver.probe = i2c_device_probe; + driver->driver.remove = i2c_device_remove; + + res = driver_register(&driver->driver); + if (res) + goto out_unlock; + + list_add_tail(&driver->list,&drivers); + pr_debug("i2c-core: driver [%s] registered\n", driver->name); + + /* now look for instances of driver on our adapters */ + if (driver->flags & I2C_DF_NOTIFY) { + list_for_each(item,&adapters) { + adapter = list_entry(item, struct i2c_adapter, list); + driver->attach_adapter(adapter); + } + } + + out_unlock: + up(&core_lists); + return res; +} + +int i2c_del_driver(struct i2c_driver *driver) +{ + struct list_head *item1, *item2, *_n; + struct i2c_client *client; + struct i2c_adapter *adap; + + int res = 0; + + down(&core_lists); + + /* Have a look at each adapter, if clients of this driver are still + * attached. If so, detach them to be able to kill the driver + * afterwards. + * + * Removing clients does not depend on the notify flag, else + * invalid operation might (will!) result, when using stale client + * pointers. + */ + list_for_each(item1,&adapters) { + adap = list_entry(item1, struct i2c_adapter, list); + if (driver->detach_adapter) { + if ((res = driver->detach_adapter(adap))) { + dev_err(&adap->dev, "detach_adapter failed " + "for driver [%s]\n", driver->name); + goto out_unlock; + } + } else { + list_for_each_safe(item2, _n, &adap->clients) { + client = list_entry(item2, struct i2c_client, list); + if (client->driver != driver) + continue; + dev_dbg(&adap->dev, "detaching client [%s] " + "at 0x%02x\n", client->name, + client->addr); + if ((res = driver->detach_client(client))) { + dev_err(&adap->dev, "detach_client " + "failed for client [%s] at " + "0x%02x\n", client->name, + client->addr); + goto out_unlock; + } + } + } + } + + driver_unregister(&driver->driver); + list_del(&driver->list); + pr_debug("i2c-core: driver [%s] unregistered\n", driver->name); + + out_unlock: + up(&core_lists); + return 0; +} + +static int __i2c_check_addr(struct i2c_adapter *adapter, unsigned int addr) +{ + struct list_head *item; + struct i2c_client *client; + + list_for_each(item,&adapter->clients) { + client = list_entry(item, struct i2c_client, list); + if (client->addr == addr) + return -EBUSY; + } + return 0; +} + +int i2c_check_addr(struct i2c_adapter *adapter, int addr) +{ + int rval; + + down(&adapter->clist_lock); + rval = __i2c_check_addr(adapter, addr); + up(&adapter->clist_lock); + + return rval; +} + +int i2c_attach_client(struct i2c_client *client) +{ + struct i2c_adapter *adapter = client->adapter; + + down(&adapter->clist_lock); + if (__i2c_check_addr(client->adapter, client->addr)) { + up(&adapter->clist_lock); + return -EBUSY; + } + list_add_tail(&client->list,&adapter->clients); + up(&adapter->clist_lock); + + if (adapter->client_register) { + if (adapter->client_register(client)) { + dev_dbg(&adapter->dev, "client_register " + "failed for client [%s] at 0x%02x\n", + client->name, client->addr); + } + } + + if (client->flags & I2C_CLIENT_ALLOW_USE) + client->usage_count = 0; + + client->dev.parent = &client->adapter->dev; + client->dev.driver = &client->driver->driver; + client->dev.bus = &i2c_bus_type; + client->dev.release = &i2c_client_release; + + snprintf(&client->dev.bus_id[0], sizeof(client->dev.bus_id), + "%d-%04x", i2c_adapter_id(adapter), client->addr); + dev_dbg(&adapter->dev, "client [%s] registered with bus id %s\n", + client->name, client->dev.bus_id); + device_register(&client->dev); + device_create_file(&client->dev, &dev_attr_client_name); + + return 0; +} + + +int i2c_detach_client(struct i2c_client *client) +{ + struct i2c_adapter *adapter = client->adapter; + int res = 0; + + if ((client->flags & I2C_CLIENT_ALLOW_USE) + && (client->usage_count > 0)) { + dev_warn(&client->dev, "Client [%s] still busy, " + "can't detach\n", client->name); + return -EBUSY; + } + + if (adapter->client_unregister) { + res = adapter->client_unregister(client); + if (res) { + dev_err(&client->dev, + "client_unregister [%s] failed, " + "client not detached\n", client->name); + goto out; + } + } + + down(&adapter->clist_lock); + list_del(&client->list); + init_completion(&client->released); + device_remove_file(&client->dev, &dev_attr_client_name); + device_unregister(&client->dev); + up(&adapter->clist_lock); + wait_for_completion(&client->released); + + out: + return res; +} + +static int i2c_inc_use_client(struct i2c_client *client) +{ + + if (!try_module_get(client->driver->owner)) + return -ENODEV; + if (!try_module_get(client->adapter->owner)) { + module_put(client->driver->owner); + return -ENODEV; + } + + return 0; +} + +static void i2c_dec_use_client(struct i2c_client *client) +{ + module_put(client->driver->owner); + module_put(client->adapter->owner); +} + +int i2c_use_client(struct i2c_client *client) +{ + int ret; + + ret = i2c_inc_use_client(client); + if (ret) + return ret; + + if (client->flags & I2C_CLIENT_ALLOW_USE) { + if (client->flags & I2C_CLIENT_ALLOW_MULTIPLE_USE) + client->usage_count++; + else if (client->usage_count > 0) + goto busy; + else + client->usage_count++; + } + + return 0; + busy: + i2c_dec_use_client(client); + return -EBUSY; +} + +int i2c_release_client(struct i2c_client *client) +{ + if(client->flags & I2C_CLIENT_ALLOW_USE) { + if(client->usage_count>0) + client->usage_count--; + else { + pr_debug("i2c-core: %s used one too many times\n", + __FUNCTION__); + return -EPERM; + } + } + + i2c_dec_use_client(client); + + return 0; +} + +void i2c_clients_command(struct i2c_adapter *adap, unsigned int cmd, void *arg) +{ + struct list_head *item; + struct i2c_client *client; + + down(&adap->clist_lock); + list_for_each(item,&adap->clients) { + client = list_entry(item, struct i2c_client, list); + if (!try_module_get(client->driver->owner)) + continue; + if (NULL != client->driver->command) { + up(&adap->clist_lock); + client->driver->command(client,cmd,arg); + down(&adap->clist_lock); + } + module_put(client->driver->owner); + } + up(&adap->clist_lock); +} + +static int __init i2c_init(void) +{ + int retval; + + retval = bus_register(&i2c_bus_type); + if (retval) + return retval; + retval = driver_register(&i2c_adapter_driver); + if (retval) + return retval; + return class_register(&i2c_adapter_class); +} + +static void __exit i2c_exit(void) +{ + class_unregister(&i2c_adapter_class); + driver_unregister(&i2c_adapter_driver); + bus_unregister(&i2c_bus_type); +} + +subsys_initcall(i2c_init); +module_exit(i2c_exit); + +/* ---------------------------------------------------- + * the functional interface to the i2c busses. + * ---------------------------------------------------- + */ + +int i2c_transfer(struct i2c_adapter * adap, struct i2c_msg *msgs, int num) +{ + int ret; + + if (adap->algo->master_xfer) { +#ifdef DEBUG + for (ret = 0; ret < num; ret++) { + dev_dbg(&adap->dev, "master_xfer[%d] %c, addr=0x%02x, " + "len=%d\n", ret, msgs[ret].flags & I2C_M_RD ? + 'R' : 'W', msgs[ret].addr, msgs[ret].len); + } +#endif + + down(&adap->bus_lock); + ret = adap->algo->master_xfer(adap,msgs,num); + up(&adap->bus_lock); + + return ret; + } else { + dev_dbg(&adap->dev, "I2C level transfers not supported\n"); + return -ENOSYS; + } +} + +int i2c_master_send(struct i2c_client *client,const char *buf ,int count) +{ + int ret; + struct i2c_adapter *adap=client->adapter; + struct i2c_msg msg; + + msg.addr = client->addr; + msg.flags = client->flags & I2C_M_TEN; + msg.len = count; + msg.buf = (char *)buf; + + ret = i2c_transfer(adap, &msg, 1); + + /* If everything went ok (i.e. 1 msg transmitted), return #bytes + transmitted, else error code. */ + return (ret == 1) ? count : ret; +} + +int i2c_master_recv(struct i2c_client *client, char *buf ,int count) +{ + struct i2c_adapter *adap=client->adapter; + struct i2c_msg msg; + int ret; + + msg.addr = client->addr; + msg.flags = client->flags & I2C_M_TEN; + msg.flags |= I2C_M_RD; + msg.len = count; + msg.buf = buf; + + ret = i2c_transfer(adap, &msg, 1); + + /* If everything went ok (i.e. 1 msg transmitted), return #bytes + transmitted, else error code. */ + return (ret == 1) ? count : ret; +} + + +int i2c_control(struct i2c_client *client, + unsigned int cmd, unsigned long arg) +{ + int ret = 0; + struct i2c_adapter *adap = client->adapter; + + dev_dbg(&client->adapter->dev, "i2c ioctl, cmd: 0x%x, arg: %#lx\n", cmd, arg); + switch (cmd) { + case I2C_RETRIES: + adap->retries = arg; + break; + case I2C_TIMEOUT: + adap->timeout = arg; + break; + default: + if (adap->algo->algo_control!=NULL) + ret = adap->algo->algo_control(adap,cmd,arg); + } + return ret; +} + +/* ---------------------------------------------------- + * the i2c address scanning function + * Will not work for 10-bit addresses! + * ---------------------------------------------------- + */ +static int i2c_probe_address(struct i2c_adapter *adapter, int addr, int kind, + int (*found_proc) (struct i2c_adapter *, int, int)) +{ + int err; + + /* Make sure the address is valid */ + if (addr < 0x03 || addr > 0x77) { + dev_warn(&adapter->dev, "Invalid probe address 0x%02x\n", + addr); + return -EINVAL; + } + + /* Skip if already in use */ + if (i2c_check_addr(adapter, addr)) + return 0; + + /* Make sure there is something at this address, unless forced */ + if (kind < 0) { + if (i2c_smbus_xfer(adapter, addr, 0, 0, 0, + I2C_SMBUS_QUICK, NULL) < 0) + return 0; + + /* prevent 24RF08 corruption */ + if ((addr & ~0x0f) == 0x50) + i2c_smbus_xfer(adapter, addr, 0, 0, 0, + I2C_SMBUS_QUICK, NULL); + } + + /* Finally call the custom detection function */ + err = found_proc(adapter, addr, kind); + + /* -ENODEV can be returned if there is a chip at the given address + but it isn't supported by this chip driver. We catch it here as + this isn't an error. */ + return (err == -ENODEV) ? 0 : err; +} + +int i2c_probe(struct i2c_adapter *adapter, + struct i2c_client_address_data *address_data, + int (*found_proc) (struct i2c_adapter *, int, int)) +{ + int i, err; + int adap_id = i2c_adapter_id(adapter); + + /* Forget it if we can't probe using SMBUS_QUICK */ + if (! i2c_check_functionality(adapter,I2C_FUNC_SMBUS_QUICK)) + return -1; + + /* Force entries are done first, and are not affected by ignore + entries */ + if (address_data->forces) { + unsigned short **forces = address_data->forces; + int kind; + + for (kind = 0; forces[kind]; kind++) { + for (i = 0; forces[kind][i] != I2C_CLIENT_END; + i += 2) { + if (forces[kind][i] == adap_id + || forces[kind][i] == ANY_I2C_BUS) { + dev_dbg(&adapter->dev, "found force " + "parameter for adapter %d, " + "addr 0x%02x, kind %d\n", + adap_id, forces[kind][i + 1], + kind); + err = i2c_probe_address(adapter, + forces[kind][i + 1], + kind, found_proc); + if (err) + return err; + } + } + } + } + + /* Probe entries are done second, and are not affected by ignore + entries either */ + for (i = 0; address_data->probe[i] != I2C_CLIENT_END; i += 2) { + if (address_data->probe[i] == adap_id + || address_data->probe[i] == ANY_I2C_BUS) { + dev_dbg(&adapter->dev, "found probe parameter for " + "adapter %d, addr 0x%02x\n", adap_id, + address_data->probe[i + 1]); + err = i2c_probe_address(adapter, + address_data->probe[i + 1], + -1, found_proc); + if (err) + return err; + } + } + + /* Normal entries are done last, unless shadowed by an ignore entry */ + for (i = 0; address_data->normal_i2c[i] != I2C_CLIENT_END; i += 1) { + int j, ignore; + + ignore = 0; + for (j = 0; address_data->ignore[j] != I2C_CLIENT_END; + j += 2) { + if ((address_data->ignore[j] == adap_id || + address_data->ignore[j] == ANY_I2C_BUS) + && address_data->ignore[j + 1] + == address_data->normal_i2c[i]) { + dev_dbg(&adapter->dev, "found ignore " + "parameter for adapter %d, " + "addr 0x%02x\n", adap_id, + address_data->ignore[j + 1]); + } + ignore = 1; + break; + } + if (ignore) + continue; + + dev_dbg(&adapter->dev, "found normal entry for adapter %d, " + "addr 0x%02x\n", adap_id, + address_data->normal_i2c[i]); + err = i2c_probe_address(adapter, address_data->normal_i2c[i], + -1, found_proc); + if (err) + return err; + } + + return 0; +} + +struct i2c_adapter* i2c_get_adapter(int id) +{ + struct i2c_adapter *adapter; + + down(&core_lists); + adapter = (struct i2c_adapter *)idr_find(&i2c_adapter_idr, id); + if (adapter && !try_module_get(adapter->owner)) + adapter = NULL; + + up(&core_lists); + return adapter; +} + +void i2c_put_adapter(struct i2c_adapter *adap) +{ + module_put(adap->owner); +} + +/* The SMBus parts */ + +#define POLY (0x1070U << 3) +static u8 +crc8(u16 data) +{ + int i; + + for(i = 0; i < 8; i++) { + if (data & 0x8000) + data = data ^ POLY; + data = data << 1; + } + return (u8)(data >> 8); +} + +/* CRC over count bytes in the first array plus the bytes in the rest + array if it is non-null. rest[0] is the (length of rest) - 1 + and is included. */ +static u8 i2c_smbus_partial_pec(u8 crc, int count, u8 *first, u8 *rest) +{ + int i; + + for(i = 0; i < count; i++) + crc = crc8((crc ^ first[i]) << 8); + if(rest != NULL) + for(i = 0; i <= rest[0]; i++) + crc = crc8((crc ^ rest[i]) << 8); + return crc; +} + +static u8 i2c_smbus_pec(int count, u8 *first, u8 *rest) +{ + return i2c_smbus_partial_pec(0, count, first, rest); +} + +/* Returns new "size" (transaction type) + Note that we convert byte to byte_data and byte_data to word_data + rather than invent new xxx_PEC transactions. */ +static int i2c_smbus_add_pec(u16 addr, u8 command, int size, + union i2c_smbus_data *data) +{ + u8 buf[3]; + + buf[0] = addr << 1; + buf[1] = command; + switch(size) { + case I2C_SMBUS_BYTE: + data->byte = i2c_smbus_pec(2, buf, NULL); + size = I2C_SMBUS_BYTE_DATA; + break; + case I2C_SMBUS_BYTE_DATA: + buf[2] = data->byte; + data->word = buf[2] || + (i2c_smbus_pec(3, buf, NULL) << 8); + size = I2C_SMBUS_WORD_DATA; + break; + case I2C_SMBUS_WORD_DATA: + /* unsupported */ + break; + case I2C_SMBUS_BLOCK_DATA: + data->block[data->block[0] + 1] = + i2c_smbus_pec(2, buf, data->block); + size = I2C_SMBUS_BLOCK_DATA_PEC; + break; + } + return size; +} + +static int i2c_smbus_check_pec(u16 addr, u8 command, int size, u8 partial, + union i2c_smbus_data *data) +{ + u8 buf[3], rpec, cpec; + + buf[1] = command; + switch(size) { + case I2C_SMBUS_BYTE_DATA: + buf[0] = (addr << 1) | 1; + cpec = i2c_smbus_pec(2, buf, NULL); + rpec = data->byte; + break; + case I2C_SMBUS_WORD_DATA: + buf[0] = (addr << 1) | 1; + buf[2] = data->word & 0xff; + cpec = i2c_smbus_pec(3, buf, NULL); + rpec = data->word >> 8; + break; + case I2C_SMBUS_WORD_DATA_PEC: + /* unsupported */ + cpec = rpec = 0; + break; + case I2C_SMBUS_PROC_CALL_PEC: + /* unsupported */ + cpec = rpec = 0; + break; + case I2C_SMBUS_BLOCK_DATA_PEC: + buf[0] = (addr << 1); + buf[2] = (addr << 1) | 1; + cpec = i2c_smbus_pec(3, buf, data->block); + rpec = data->block[data->block[0] + 1]; + break; + case I2C_SMBUS_BLOCK_PROC_CALL_PEC: + buf[0] = (addr << 1) | 1; + rpec = i2c_smbus_partial_pec(partial, 1, + buf, data->block); + cpec = data->block[data->block[0] + 1]; + break; + default: + cpec = rpec = 0; + break; + } + if (rpec != cpec) { + pr_debug("i2c-core: Bad PEC 0x%02x vs. 0x%02x\n", + rpec, cpec); + return -1; + } + return 0; +} + +s32 i2c_smbus_write_quick(struct i2c_client *client, u8 value) +{ + return i2c_smbus_xfer(client->adapter,client->addr,client->flags, + value,0,I2C_SMBUS_QUICK,NULL); +} + +s32 i2c_smbus_read_byte(struct i2c_client *client) +{ + union i2c_smbus_data data; + if (i2c_smbus_xfer(client->adapter,client->addr,client->flags, + I2C_SMBUS_READ,0,I2C_SMBUS_BYTE, &data)) + return -1; + else + return 0x0FF & data.byte; +} + +s32 i2c_smbus_write_byte(struct i2c_client *client, u8 value) +{ + union i2c_smbus_data data; /* only for PEC */ + return i2c_smbus_xfer(client->adapter,client->addr,client->flags, + I2C_SMBUS_WRITE,value, I2C_SMBUS_BYTE,&data); +} + +s32 i2c_smbus_read_byte_data(struct i2c_client *client, u8 command) +{ + union i2c_smbus_data data; + if (i2c_smbus_xfer(client->adapter,client->addr,client->flags, + I2C_SMBUS_READ,command, I2C_SMBUS_BYTE_DATA,&data)) + return -1; + else + return 0x0FF & data.byte; +} + +s32 i2c_smbus_write_byte_data(struct i2c_client *client, u8 command, u8 value) +{ + union i2c_smbus_data data; + data.byte = value; + return i2c_smbus_xfer(client->adapter,client->addr,client->flags, + I2C_SMBUS_WRITE,command, + I2C_SMBUS_BYTE_DATA,&data); +} + +s32 i2c_smbus_read_word_data(struct i2c_client *client, u8 command) +{ + union i2c_smbus_data data; + if (i2c_smbus_xfer(client->adapter,client->addr,client->flags, + I2C_SMBUS_READ,command, I2C_SMBUS_WORD_DATA, &data)) + return -1; + else + return 0x0FFFF & data.word; +} + +s32 i2c_smbus_write_word_data(struct i2c_client *client, u8 command, u16 value) +{ + union i2c_smbus_data data; + data.word = value; + return i2c_smbus_xfer(client->adapter,client->addr,client->flags, + I2C_SMBUS_WRITE,command, + I2C_SMBUS_WORD_DATA,&data); +} + +s32 i2c_smbus_write_block_data(struct i2c_client *client, u8 command, + u8 length, u8 *values) +{ + union i2c_smbus_data data; + int i; + if (length > I2C_SMBUS_BLOCK_MAX) + length = I2C_SMBUS_BLOCK_MAX; + for (i = 1; i <= length; i++) + data.block[i] = values[i-1]; + data.block[0] = length; + return i2c_smbus_xfer(client->adapter,client->addr,client->flags, + I2C_SMBUS_WRITE,command, + I2C_SMBUS_BLOCK_DATA,&data); +} + +/* Returns the number of read bytes */ +s32 i2c_smbus_read_i2c_block_data(struct i2c_client *client, u8 command, u8 *values) +{ + union i2c_smbus_data data; + int i; + if (i2c_smbus_xfer(client->adapter,client->addr,client->flags, + I2C_SMBUS_READ,command, + I2C_SMBUS_I2C_BLOCK_DATA,&data)) + return -1; + else { + for (i = 1; i <= data.block[0]; i++) + values[i-1] = data.block[i]; + return data.block[0]; + } +} + +/* Simulate a SMBus command using the i2c protocol + No checking of parameters is done! */ +static s32 i2c_smbus_xfer_emulated(struct i2c_adapter * adapter, u16 addr, + unsigned short flags, + char read_write, u8 command, int size, + union i2c_smbus_data * data) +{ + /* So we need to generate a series of msgs. In the case of writing, we + need to use only one message; when reading, we need two. We initialize + most things with sane defaults, to keep the code below somewhat + simpler. */ + unsigned char msgbuf0[34]; + unsigned char msgbuf1[34]; + int num = read_write == I2C_SMBUS_READ?2:1; + struct i2c_msg msg[2] = { { addr, flags, 1, msgbuf0 }, + { addr, flags | I2C_M_RD, 0, msgbuf1 } + }; + int i; + + msgbuf0[0] = command; + switch(size) { + case I2C_SMBUS_QUICK: + msg[0].len = 0; + /* Special case: The read/write field is used as data */ + msg[0].flags = flags | (read_write==I2C_SMBUS_READ)?I2C_M_RD:0; + num = 1; + break; + case I2C_SMBUS_BYTE: + if (read_write == I2C_SMBUS_READ) { + /* Special case: only a read! */ + msg[0].flags = I2C_M_RD | flags; + num = 1; + } + break; + case I2C_SMBUS_BYTE_DATA: + if (read_write == I2C_SMBUS_READ) + msg[1].len = 1; + else { + msg[0].len = 2; + msgbuf0[1] = data->byte; + } + break; + case I2C_SMBUS_WORD_DATA: + if (read_write == I2C_SMBUS_READ) + msg[1].len = 2; + else { + msg[0].len=3; + msgbuf0[1] = data->word & 0xff; + msgbuf0[2] = (data->word >> 8) & 0xff; + } + break; + case I2C_SMBUS_PROC_CALL: + num = 2; /* Special case */ + read_write = I2C_SMBUS_READ; + msg[0].len = 3; + msg[1].len = 2; + msgbuf0[1] = data->word & 0xff; + msgbuf0[2] = (data->word >> 8) & 0xff; + break; + case I2C_SMBUS_BLOCK_DATA: + case I2C_SMBUS_BLOCK_DATA_PEC: + if (read_write == I2C_SMBUS_READ) { + dev_err(&adapter->dev, "Block read not supported " + "under I2C emulation!\n"); + return -1; + } else { + msg[0].len = data->block[0] + 2; + if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 2) { + dev_err(&adapter->dev, "smbus_access called with " + "invalid block write size (%d)\n", + data->block[0]); + return -1; + } + if(size == I2C_SMBUS_BLOCK_DATA_PEC) + (msg[0].len)++; + for (i = 1; i <= msg[0].len; i++) + msgbuf0[i] = data->block[i-1]; + } + break; + case I2C_SMBUS_BLOCK_PROC_CALL: + case I2C_SMBUS_BLOCK_PROC_CALL_PEC: + dev_dbg(&adapter->dev, "Block process call not supported " + "under I2C emulation!\n"); + return -1; + case I2C_SMBUS_I2C_BLOCK_DATA: + if (read_write == I2C_SMBUS_READ) { + msg[1].len = I2C_SMBUS_I2C_BLOCK_MAX; + } else { + msg[0].len = data->block[0] + 1; + if (msg[0].len > I2C_SMBUS_I2C_BLOCK_MAX + 1) { + dev_err(&adapter->dev, "i2c_smbus_xfer_emulated called with " + "invalid block write size (%d)\n", + data->block[0]); + return -1; + } + for (i = 1; i <= data->block[0]; i++) + msgbuf0[i] = data->block[i]; + } + break; + default: + dev_err(&adapter->dev, "smbus_access called with invalid size (%d)\n", + size); + return -1; + } + + if (i2c_transfer(adapter, msg, num) < 0) + return -1; + + if (read_write == I2C_SMBUS_READ) + switch(size) { + case I2C_SMBUS_BYTE: + data->byte = msgbuf0[0]; + break; + case I2C_SMBUS_BYTE_DATA: + data->byte = msgbuf1[0]; + break; + case I2C_SMBUS_WORD_DATA: + case I2C_SMBUS_PROC_CALL: + data->word = msgbuf1[0] | (msgbuf1[1] << 8); + break; + case I2C_SMBUS_I2C_BLOCK_DATA: + /* fixed at 32 for now */ + data->block[0] = I2C_SMBUS_I2C_BLOCK_MAX; + for (i = 0; i < I2C_SMBUS_I2C_BLOCK_MAX; i++) + data->block[i+1] = msgbuf1[i]; + break; + } + return 0; +} + + +s32 i2c_smbus_xfer(struct i2c_adapter * adapter, u16 addr, unsigned short flags, + char read_write, u8 command, int size, + union i2c_smbus_data * data) +{ + s32 res; + int swpec = 0; + u8 partial = 0; + + flags &= I2C_M_TEN | I2C_CLIENT_PEC; + if((flags & I2C_CLIENT_PEC) && + !(i2c_check_functionality(adapter, I2C_FUNC_SMBUS_HWPEC_CALC))) { + swpec = 1; + if(read_write == I2C_SMBUS_READ && + size == I2C_SMBUS_BLOCK_DATA) + size = I2C_SMBUS_BLOCK_DATA_PEC; + else if(size == I2C_SMBUS_PROC_CALL) + size = I2C_SMBUS_PROC_CALL_PEC; + else if(size == I2C_SMBUS_BLOCK_PROC_CALL) { + i2c_smbus_add_pec(addr, command, + I2C_SMBUS_BLOCK_DATA, data); + partial = data->block[data->block[0] + 1]; + size = I2C_SMBUS_BLOCK_PROC_CALL_PEC; + } else if(read_write == I2C_SMBUS_WRITE && + size != I2C_SMBUS_QUICK && + size != I2C_SMBUS_I2C_BLOCK_DATA) + size = i2c_smbus_add_pec(addr, command, size, data); + } + + if (adapter->algo->smbus_xfer) { + down(&adapter->bus_lock); + res = adapter->algo->smbus_xfer(adapter,addr,flags,read_write, + command,size,data); + up(&adapter->bus_lock); + } else + res = i2c_smbus_xfer_emulated(adapter,addr,flags,read_write, + command,size,data); + + if(res >= 0 && swpec && + size != I2C_SMBUS_QUICK && size != I2C_SMBUS_I2C_BLOCK_DATA && + (read_write == I2C_SMBUS_READ || size == I2C_SMBUS_PROC_CALL_PEC || + size == I2C_SMBUS_BLOCK_PROC_CALL_PEC)) { + if(i2c_smbus_check_pec(addr, command, size, partial, data)) + return -1; + } + return res; +} + + +/* Next four are needed by i2c-isa */ +EXPORT_SYMBOL_GPL(i2c_adapter_dev_release); +EXPORT_SYMBOL_GPL(i2c_adapter_driver); +EXPORT_SYMBOL_GPL(i2c_adapter_class); +EXPORT_SYMBOL_GPL(i2c_bus_type); + +EXPORT_SYMBOL(i2c_add_adapter); +EXPORT_SYMBOL(i2c_del_adapter); +EXPORT_SYMBOL(i2c_add_driver); +EXPORT_SYMBOL(i2c_del_driver); +EXPORT_SYMBOL(i2c_attach_client); +EXPORT_SYMBOL(i2c_detach_client); +EXPORT_SYMBOL(i2c_use_client); +EXPORT_SYMBOL(i2c_release_client); +EXPORT_SYMBOL(i2c_clients_command); +EXPORT_SYMBOL(i2c_check_addr); + +EXPORT_SYMBOL(i2c_master_send); +EXPORT_SYMBOL(i2c_master_recv); +EXPORT_SYMBOL(i2c_control); +EXPORT_SYMBOL(i2c_transfer); +EXPORT_SYMBOL(i2c_get_adapter); +EXPORT_SYMBOL(i2c_put_adapter); +EXPORT_SYMBOL(i2c_probe); + +EXPORT_SYMBOL(i2c_smbus_xfer); +EXPORT_SYMBOL(i2c_smbus_write_quick); +EXPORT_SYMBOL(i2c_smbus_read_byte); +EXPORT_SYMBOL(i2c_smbus_write_byte); +EXPORT_SYMBOL(i2c_smbus_read_byte_data); +EXPORT_SYMBOL(i2c_smbus_write_byte_data); +EXPORT_SYMBOL(i2c_smbus_read_word_data); +EXPORT_SYMBOL(i2c_smbus_write_word_data); +EXPORT_SYMBOL(i2c_smbus_write_block_data); +EXPORT_SYMBOL(i2c_smbus_read_i2c_block_data); + +MODULE_AUTHOR("Simon G. Vogl "); +MODULE_DESCRIPTION("I2C-Bus main module"); +MODULE_LICENSE("GPL"); diff --git a/examples/nested-jsbeautifyrc/test.cpp b/examples/nested-jsbeautifyrc/cpp/expected/test.cpp similarity index 100% rename from examples/nested-jsbeautifyrc/test.cpp rename to examples/nested-jsbeautifyrc/cpp/expected/test.cpp diff --git a/examples/nested-jsbeautifyrc/test.h b/examples/nested-jsbeautifyrc/cpp/expected/test.h similarity index 100% rename from examples/nested-jsbeautifyrc/test.h rename to examples/nested-jsbeautifyrc/cpp/expected/test.h diff --git a/examples/nested-jsbeautifyrc/cpp/original/test.cpp b/examples/nested-jsbeautifyrc/cpp/original/test.cpp new file mode 100644 index 0000000..ce99f65 --- /dev/null +++ b/examples/nested-jsbeautifyrc/cpp/original/test.cpp @@ -0,0 +1,27 @@ +/* ctest4 */ +fm_status fm2000EventHandlingInitialize(fm_int sw); +fm_status fm2000MacTableOverflowStart(fm_int sw); +fm_bool fm2000ProcessMATableEntry( fm_mac_table_work_list *pWork, + fm_int sw, + fm_int index, + fm_thread * event_handler, + fm_uint32 * numUpdates, + fm_event **event); +void foo() +{ + Logger log = new Logger(); + Logger log= new Logger( ); + + log.foo.bar = 5; + log.narf.sweat = "cat"; +for (i = 0; i<5; i++) bar(i); +} +int this_works(int x); +int bug(int); // BUG: left-aligned +typedef int fooman; + enum FLAGS + { + FLAGS_decimal = 1, // decimal + FLAGS_unsigned = 2, // u or U suffix + FLAGS_long = 4, // l or L suffix + }; diff --git a/examples/nested-jsbeautifyrc/cpp/original/test.h b/examples/nested-jsbeautifyrc/cpp/original/test.h new file mode 100644 index 0000000..dd18df3 --- /dev/null +++ b/examples/nested-jsbeautifyrc/cpp/original/test.h @@ -0,0 +1,10 @@ +class Example +{ + + Example() + : member(0) + {} + + int member; + +}; diff --git a/examples/nested-jsbeautifyrc/test.cs b/examples/nested-jsbeautifyrc/csharp/expected/test.cs similarity index 100% rename from examples/nested-jsbeautifyrc/test.cs rename to examples/nested-jsbeautifyrc/csharp/expected/test.cs diff --git a/examples/nested-jsbeautifyrc/csharp/original/test.cs b/examples/nested-jsbeautifyrc/csharp/original/test.cs new file mode 100644 index 0000000..bb2884d --- /dev/null +++ b/examples/nested-jsbeautifyrc/csharp/original/test.cs @@ -0,0 +1,113 @@ +class X : Y { +bool Method (int argument_1, int argument_2) +{ + #region something + int foo = 0; + #endregion + +if (argument_1 == argument_2) +throw new Exception (Locale.GetText ("They are equal!")); + +if (argument_1 < argument_2) { +if (argument_1 * 3 > 4) +return true; +else +return false; +} + +// +// This sample helps keep your sanity while using 8-spaces for tabs +// +VeryLongIdentifierWhichTakesManyArguments ( +Argument1, +Argument2, Argument3, +NestedCallHere ( +MoreNested)); +} + +bool MyProperty { +get { return x; } + +set { x = value; } +} + +void AnotherMethod () +{ + Logger log = new Logger(); + log.foo.bar = 5; + log.narf.sweat = "cat"; + +if ((a + 5) != 4) { +} + +while (blah) { +if (a) +continue; +b++; +} +} +} + +object lockA; +object lockB; + +void Foo () { + lock (lockA) { + lock (lockB) { + } + } +} + +void Bar () { + lock (lockB) { + lock (lockA) { + } + } +} + + +// class library +class Blah { + Hashtable ht; + void Foo (int zzz, Entry blah) { + lock (ht) { + ht.Add (zzz, blah); + } + } + + void Bar () + { + lock (ht) { + foreach (Entry e in ht) + EachBar (e); + } + } + + virtual void EachBar (Entry e) + { + } +} + +// User +class MyBlah { + byte[] box = new byte[6]; + + box[2] = 56; + + void DoStuff () + { + lock (this) { + int i = GetNumber (); + Entry e = GetEntry (); + + Foo (i, e); + } + } + + override void EachBar (Entry e) + { + lock (this) { + DoSomething (e); + } + } +} diff --git a/examples/nested-jsbeautifyrc/test.css b/examples/nested-jsbeautifyrc/css/expected/test.css similarity index 100% rename from examples/nested-jsbeautifyrc/test.css rename to examples/nested-jsbeautifyrc/css/expected/test.css diff --git a/examples/nested-jsbeautifyrc/css/original/test.css b/examples/nested-jsbeautifyrc/css/original/test.css new file mode 100644 index 0000000..3d9a2b2 --- /dev/null +++ b/examples/nested-jsbeautifyrc/css/original/test.css @@ -0,0 +1,3 @@ +p { + color: red; +} diff --git a/examples/nested-jsbeautifyrc/test.html b/examples/nested-jsbeautifyrc/html/expected/test.html similarity index 100% rename from examples/nested-jsbeautifyrc/test.html rename to examples/nested-jsbeautifyrc/html/expected/test.html diff --git a/examples/simple-jsbeautifyrc/test.html b/examples/nested-jsbeautifyrc/html/original/test.html similarity index 100% rename from examples/simple-jsbeautifyrc/test.html rename to examples/nested-jsbeautifyrc/html/original/test.html diff --git a/examples/nested-jsbeautifyrc/test.java b/examples/nested-jsbeautifyrc/java/expected/test.java similarity index 100% rename from examples/nested-jsbeautifyrc/test.java rename to examples/nested-jsbeautifyrc/java/expected/test.java diff --git a/examples/nested-jsbeautifyrc/java/original/test.java b/examples/nested-jsbeautifyrc/java/original/test.java new file mode 100644 index 0000000..76c6131 --- /dev/null +++ b/examples/nested-jsbeautifyrc/java/original/test.java @@ -0,0 +1,35 @@ +class Aligns { +final int SZF = 4; +final int SZ2F = 4; +final int aBarF; +final int someIntsF[]; +final int someIntsSzdF[4]; +final int[] someMoreIntsF; +final int lotsOfIntsF[][][][][][]; +final int[][][][] lotsMoreIntsF; +final Tem edVarF; +final int aBarSetF=null; +final int someIntsSetF[]=null; +final int someIntsSzdSetF[4]=null; +final int[] someMoreIntsSetF=null; +final int lotsOfIntsSetF[][][][][][]=null; +final int[][][][] lotsMoreIntsSetF=null; +final Tem edVarF=null; +int SZ = 4; +int SZ2 = 4; +int aBar; +int someInts[]; +int someIntsSzd[4]; +int spacer; +int[] someMoreInts; +int lotsOfInts[][][][][][]; +int[][][][] lotsMoreInts; +Tem edVar; +int aBarSet=null; +int someIntsSet[]=null; +int someIntsSzdSet[4]=null; +int[] someMoreIntsSet=null; +int lotsOfIntsSet[][][][][][]=null; +int[][][][] lotsMoreIntsSet=null; +Tem edVar=null; +} diff --git a/examples/nested-jsbeautifyrc/test.js b/examples/nested-jsbeautifyrc/javascript/expected/test.js similarity index 100% rename from examples/nested-jsbeautifyrc/test.js rename to examples/nested-jsbeautifyrc/javascript/expected/test.js diff --git a/examples/simple-jsbeautifyrc/test.js b/examples/nested-jsbeautifyrc/javascript/original/test.js similarity index 100% rename from examples/simple-jsbeautifyrc/test.js rename to examples/nested-jsbeautifyrc/javascript/original/test.js diff --git a/examples/nested-jsbeautifyrc/test.md b/examples/nested-jsbeautifyrc/markdown/expected/test.md similarity index 100% rename from examples/nested-jsbeautifyrc/test.md rename to examples/nested-jsbeautifyrc/markdown/expected/test.md diff --git a/examples/nested-jsbeautifyrc/markdown/original/test.md b/examples/nested-jsbeautifyrc/markdown/original/test.md new file mode 100644 index 0000000..284ffde --- /dev/null +++ b/examples/nested-jsbeautifyrc/markdown/original/test.md @@ -0,0 +1,4 @@ +- item + 1. one + 2. two + 3. three diff --git a/examples/nested-jsbeautifyrc/test.m b/examples/nested-jsbeautifyrc/objectivec/expected/test.m similarity index 100% rename from examples/nested-jsbeautifyrc/test.m rename to examples/nested-jsbeautifyrc/objectivec/expected/test.m diff --git a/examples/nested-jsbeautifyrc/objectivec/original/test.m b/examples/nested-jsbeautifyrc/objectivec/original/test.m new file mode 100644 index 0000000..d903a38 --- /dev/null +++ b/examples/nested-jsbeautifyrc/objectivec/original/test.m @@ -0,0 +1,30 @@ +// Turn the document contents into a single savable lump of data +- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError { +#pragma unused(typeName) + + // Produce the data lump: + NSData * retval = [NSKeyedArchiver archivedDataWithRootObject:model]; + + // If the lump is nil something went wrong + // fill out the error object to explain what wrent wrong + if ( outError != NULL ) { + // The sender wanted an error reported. If there + // was a problem, fill in an NSError object + if (retval == nil) { + // The error object should include an (unhelpful) + // explanation of what happened + NSDictionary * userInfoDict = [NSDictionary dictionaryWithObjectsAndKeys: + @"Internal error formatting data", NSLocalizedDescriptionKey, + @"Archiving of data failed. Probably a bug.", NSLocalizedFailureReasonErrorKey, + @"There's nothing you can do.", NSLocalizedRecoverySuggestionErrorKey, nil]; + + *outError = [NSError errorWithDomain:LinearInternalErrorDomain + code:linErrCantFormatDocumentData + userInfo:userInfoDict]; + } else { + // No problem. Don't supply an error object. + *outError = nil; + } + } + return retval; +} diff --git a/examples/nested-jsbeautifyrc/test.py b/examples/nested-jsbeautifyrc/python/expected/test.py similarity index 100% rename from examples/nested-jsbeautifyrc/test.py rename to examples/nested-jsbeautifyrc/python/expected/test.py diff --git a/examples/nested-jsbeautifyrc/python/original/test.py b/examples/nested-jsbeautifyrc/python/original/test.py new file mode 100644 index 0000000..b04a9a1 --- /dev/null +++ b/examples/nested-jsbeautifyrc/python/original/test.py @@ -0,0 +1,21 @@ +import math, sys; + +def example1(): + ####This is a long comment. This should be wrapped to fit within 72 characters. + some_tuple=( 1,2, 3,'a' ); + some_variable={'long':'Long code lines should be wrapped within 79 characters.', + 'other':[math.pi, 100,200,300,9876543210,'This is a long string that goes on'], + 'more':{'inner':'This whole logical line should be wrapped.',some_tuple:[1, + 20,300,40000,500000000,60000000000000000]}} + return (some_tuple, some_variable) +def example2(): return {'has_key() is deprecated':True}.has_key({'f':2}.has_key('')); +class Example3( object ): + def __init__ ( self, bar ): + #Comments should have a space after the hash. + if bar : bar+=1; bar=bar* bar ; return bar + else: + some_string = """ + Indentation in multiline strings should not be touched. +Only actual code should be reindented. +""" + return (sys.path, some_string) diff --git a/examples/nested-jsbeautifyrc/test.sql b/examples/nested-jsbeautifyrc/sql/expected/test.sql similarity index 100% rename from examples/nested-jsbeautifyrc/test.sql rename to examples/nested-jsbeautifyrc/sql/expected/test.sql diff --git a/examples/simple-jsbeautifyrc/test.sql b/examples/nested-jsbeautifyrc/sql/original/test.sql similarity index 100% rename from examples/simple-jsbeautifyrc/test.sql rename to examples/nested-jsbeautifyrc/sql/original/test.sql diff --git a/examples/simple-jsbeautifyrc/test.coffee b/examples/simple-jsbeautifyrc/coffeescript/expected/test.coffee similarity index 100% rename from examples/simple-jsbeautifyrc/test.coffee rename to examples/simple-jsbeautifyrc/coffeescript/expected/test.coffee diff --git a/examples/simple-jsbeautifyrc/coffeescript/original/test.coffee b/examples/simple-jsbeautifyrc/coffeescript/original/test.coffee new file mode 100644 index 0000000..680f1b2 --- /dev/null +++ b/examples/simple-jsbeautifyrc/coffeescript/original/test.coffee @@ -0,0 +1,10 @@ +hello derek how is it going? +for c, i in "Hello World!" + k = 1+1- 2>=3<= 4>5 <6 + + for c, i in "Hello World" + k = (a,b)-> if b? return a + +f = b()[0] +for c, i in "Hello World" + f(b()) diff --git a/examples/simple-jsbeautifyrc/test.css b/examples/simple-jsbeautifyrc/css/expected/test.css similarity index 100% rename from examples/simple-jsbeautifyrc/test.css rename to examples/simple-jsbeautifyrc/css/expected/test.css diff --git a/examples/simple-jsbeautifyrc/css/original/test.css b/examples/simple-jsbeautifyrc/css/original/test.css new file mode 100644 index 0000000..1625875 --- /dev/null +++ b/examples/simple-jsbeautifyrc/css/original/test.css @@ -0,0 +1,3 @@ +p { +color: red; +} diff --git a/examples/simple-jsbeautifyrc/test.hbs b/examples/simple-jsbeautifyrc/handlebars/expected/test.hbs similarity index 100% rename from examples/simple-jsbeautifyrc/test.hbs rename to examples/simple-jsbeautifyrc/handlebars/expected/test.hbs diff --git a/examples/simple-jsbeautifyrc/handlebars/original/test.hbs b/examples/simple-jsbeautifyrc/handlebars/original/test.hbs new file mode 100644 index 0000000..1aa5cd7 --- /dev/null +++ b/examples/simple-jsbeautifyrc/handlebars/original/test.hbs @@ -0,0 +1,10 @@ +{{#if}} +{{#each}} +{{#if}} +content +{{/if}} +{{#if}} +content +{{/if}} +{{/each}} +{{/if}} diff --git a/examples/simple-jsbeautifyrc/test.erb b/examples/simple-jsbeautifyrc/html-erb/expected/test.erb similarity index 100% rename from examples/simple-jsbeautifyrc/test.erb rename to examples/simple-jsbeautifyrc/html-erb/expected/test.erb diff --git a/examples/simple-jsbeautifyrc/html-erb/original/test.erb b/examples/simple-jsbeautifyrc/html-erb/original/test.erb new file mode 100644 index 0000000..0078253 --- /dev/null +++ b/examples/simple-jsbeautifyrc/html-erb/original/test.erb @@ -0,0 +1,18 @@ + + + + + + Shopping List for <%= @date.strftime('%A, %d %B %Y') %> + + +

Shopping List for <%= @date.strftime('%A, %d %B %Y') %>

+

You need to buy:

+
    + <% for @item in @items %> +
  • <%= h(@item) %>
  • + <% end %> +
+ + diff --git a/examples/simple-jsbeautifyrc/html/expected/test.html b/examples/simple-jsbeautifyrc/html/expected/test.html new file mode 100644 index 0000000..c7b26c9 --- /dev/null +++ b/examples/simple-jsbeautifyrc/html/expected/test.html @@ -0,0 +1,15 @@ + + + + +Test Page + + + +

Hello

+

+World! +

+ + + diff --git a/examples/simple-jsbeautifyrc/html/original/test.html b/examples/simple-jsbeautifyrc/html/original/test.html new file mode 100644 index 0000000..c7b26c9 --- /dev/null +++ b/examples/simple-jsbeautifyrc/html/original/test.html @@ -0,0 +1,15 @@ + + + + +Test Page + + + +

Hello

+

+World! +

+ + + diff --git a/examples/simple-jsbeautifyrc/javascript/expected/test.js b/examples/simple-jsbeautifyrc/javascript/expected/test.js new file mode 100644 index 0000000..068dc1b --- /dev/null +++ b/examples/simple-jsbeautifyrc/javascript/expected/test.js @@ -0,0 +1,3 @@ +function hell() { +console.log('world'); +} diff --git a/examples/simple-jsbeautifyrc/test.json b/examples/simple-jsbeautifyrc/javascript/expected/test.json similarity index 100% rename from examples/simple-jsbeautifyrc/test.json rename to examples/simple-jsbeautifyrc/javascript/expected/test.json diff --git a/examples/simple-jsbeautifyrc/test2.js b/examples/simple-jsbeautifyrc/javascript/expected/test2.js similarity index 100% rename from examples/simple-jsbeautifyrc/test2.js rename to examples/simple-jsbeautifyrc/javascript/expected/test2.js diff --git a/examples/simple-jsbeautifyrc/javascript/original/test.js b/examples/simple-jsbeautifyrc/javascript/original/test.js new file mode 100644 index 0000000..068dc1b --- /dev/null +++ b/examples/simple-jsbeautifyrc/javascript/original/test.js @@ -0,0 +1,3 @@ +function hell() { +console.log('world'); +} diff --git a/examples/simple-jsbeautifyrc/javascript/original/test.json b/examples/simple-jsbeautifyrc/javascript/original/test.json new file mode 100644 index 0000000..75f283d --- /dev/null +++ b/examples/simple-jsbeautifyrc/javascript/original/test.json @@ -0,0 +1,9 @@ +{ + "indent_size": 2, +"indent_char": " ", // test + "indent_level": 0, +"indent_with_tabs": false, /* test */ + "preserve_newlines": true, +"max_preserve_newlines": 2, /* test * + "jslint_happy": true +} diff --git a/examples/simple-jsbeautifyrc/javascript/original/test2.js b/examples/simple-jsbeautifyrc/javascript/original/test2.js new file mode 100644 index 0000000..8b05531 --- /dev/null +++ b/examples/simple-jsbeautifyrc/javascript/original/test2.js @@ -0,0 +1,4 @@ +Q($.ajax(...)) + .catch(function (response) { + console.error(response); + }); diff --git a/examples/simple-jsbeautifyrc/test.less b/examples/simple-jsbeautifyrc/less/expected/test.less similarity index 100% rename from examples/simple-jsbeautifyrc/test.less rename to examples/simple-jsbeautifyrc/less/expected/test.less diff --git a/examples/simple-jsbeautifyrc/test2.less b/examples/simple-jsbeautifyrc/less/expected/test2.less similarity index 100% rename from examples/simple-jsbeautifyrc/test2.less rename to examples/simple-jsbeautifyrc/less/expected/test2.less diff --git a/examples/simple-jsbeautifyrc/test3.less b/examples/simple-jsbeautifyrc/less/expected/test3.less similarity index 100% rename from examples/simple-jsbeautifyrc/test3.less rename to examples/simple-jsbeautifyrc/less/expected/test3.less diff --git a/examples/simple-jsbeautifyrc/test4.less b/examples/simple-jsbeautifyrc/less/expected/test4.less similarity index 100% rename from examples/simple-jsbeautifyrc/test4.less rename to examples/simple-jsbeautifyrc/less/expected/test4.less diff --git a/examples/simple-jsbeautifyrc/test5.less b/examples/simple-jsbeautifyrc/less/expected/test5.less similarity index 100% rename from examples/simple-jsbeautifyrc/test5.less rename to examples/simple-jsbeautifyrc/less/expected/test5.less diff --git a/examples/simple-jsbeautifyrc/less/original/test.less b/examples/simple-jsbeautifyrc/less/original/test.less new file mode 100644 index 0000000..f717df4 --- /dev/null +++ b/examples/simple-jsbeautifyrc/less/original/test.less @@ -0,0 +1,33 @@ + a { + line-height: @headerHeight; + +display: block; + padding: 0px 15px; + font-size: 16px; + button { + font-size: 16px; + } + &:link { + color: @white; + +text-decoration: none; + } + &:visited { + color: @white; + + } + &:hover { + color: @orange; + + } + &.green { + color: @green; + +&:hover { + color: @white; + +background-color: @green; + + } + } +} diff --git a/examples/simple-jsbeautifyrc/less/original/test2.less b/examples/simple-jsbeautifyrc/less/original/test2.less new file mode 100644 index 0000000..b574201 --- /dev/null +++ b/examples/simple-jsbeautifyrc/less/original/test2.less @@ -0,0 +1,169 @@ +// main: style.less +@import (reference)"variables.less"; +@import (reference)"mixins.less"; + +.modal { + position: fixed; + height: 100%; + width: 100%; + background-color: fade(@black, 70%); + z-index: 10; + opacity: 0; + display: none; + + .innerModal { + margin: auto; + background-color: @white; + overflow: hidden; + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -ms-transform: translateY(-100%); + -o-transform: translateY(-100%); + transform: translateY(-100%); + + .fa { + float: right; + color: @white; + background-color: firebrick; + padding: 5px 7px; + border-radius: 20px; + + &:hover { + background-color: lighten(@black, 50%); + cursor: pointer; + } + + &:active { + background-color: lighten(@black, 25%); + } + } + } + + &.modal-2text { + .innerModal { + width: @container-width; + margin-top: 50px; + height: 75%; + padding: 10px 25px; + background-color: gainsboro; + border-radius: 4px; + + h2 { + margin: 0px 0px 7px 0px; + } + + div { + height: 70%; + overflow-y: scroll; + background-color: @white; + padding: 15px; + border-radius: 4px; + } + + .large-cta { + margin-top: 25px; + } + } + } +} + +#modal-video { + .innerModal { + left: 10%; + margin-top: 30px; + width: 1000px; + background-color: lighten(@black, 25%); + + iframe { + width: 600px; + height: 340px; + margin: 2% auto; + } + //container + > div { + text-align: center; + + a { + .styleLinks(@white, darken(@white, 10%)); + padding: 5px; + text-transform: uppercase; + + &:hover { + background-color: fade(@white, 15%); + } + + &:active { + background-color: fade(@white, 30%); + } + } + + h3 { + color: @white; + font-size: 3em; + margin: 20px auto; + } + + button { + margin-bottom: 50px; + } + } + } +} + +.slideIn { + .animation(SlideIn, 0.5s); +} + +@-webkit-keyframes SlideIn { + 0% { + .transform(translateY(-100%)); + } + + 100% { + .transform(translateY(0px)); + } +} + +.fadeIn { + display: block; + .animation(FadeIn, 0.5s); +} + +@-webkit-keyframes FadeIn { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +.slideOut { + .animation(SlideOut, 0.5s); +} + +@-webkit-keyframes SlideOut { + 0% { + .transform(translateY(0%)); + } + + 100% { + .transform(translateY(-100%)); + } +} + +.fadeOut { + .animation(FadeOut, 0.5s); +} + +@-webkit-keyframes FadeOut { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + display: none; + } +} diff --git a/examples/simple-jsbeautifyrc/less/original/test3.less b/examples/simple-jsbeautifyrc/less/original/test3.less new file mode 100644 index 0000000..1507524 --- /dev/null +++ b/examples/simple-jsbeautifyrc/less/original/test3.less @@ -0,0 +1,9 @@ +// Breaks (fixed now) +.mixin(@variable, @anotherVariable) { +} +// Works +.mixin(@variable; @anotherVariable) { +} +// Ok +.mixin(@variable) { +} diff --git a/examples/simple-jsbeautifyrc/less/original/test4.less b/examples/simple-jsbeautifyrc/less/original/test4.less new file mode 100644 index 0000000..c66acd8 --- /dev/null +++ b/examples/simple-jsbeautifyrc/less/original/test4.less @@ -0,0 +1,20 @@ +section#photo-details { + width: 1140px; + margin: 60px auto 70px auto; +} + + div.photo-view { + text-align: center; + figure { + box-shadow: 0 0 3px 1px rgba(0,0,0,0.75) +; + display : inline-block; + margin : 0 0 60px; + padding +: 0; + img { + display: block; + } + } + + } diff --git a/examples/simple-jsbeautifyrc/less/original/test5.less b/examples/simple-jsbeautifyrc/less/original/test5.less new file mode 100644 index 0000000..14bbf87 --- /dev/null +++ b/examples/simple-jsbeautifyrc/less/original/test5.less @@ -0,0 +1,9 @@ +.animal { + color: red; +} +.dog { + &:extend(.animal); + &:hover { + color: green; + } +} diff --git a/examples/simple-jsbeautifyrc/test.md b/examples/simple-jsbeautifyrc/markdown/expected/test.md similarity index 100% rename from examples/simple-jsbeautifyrc/test.md rename to examples/simple-jsbeautifyrc/markdown/expected/test.md diff --git a/examples/simple-jsbeautifyrc/markdown/original/test.md b/examples/simple-jsbeautifyrc/markdown/original/test.md new file mode 100644 index 0000000..11d1cdd --- /dev/null +++ b/examples/simple-jsbeautifyrc/markdown/original/test.md @@ -0,0 +1,7 @@ +- item +- item +- item + +1. one +2. two +2. three diff --git a/examples/simple-jsbeautifyrc/test.mustache b/examples/simple-jsbeautifyrc/mustache/expected/test.mustache similarity index 100% rename from examples/simple-jsbeautifyrc/test.mustache rename to examples/simple-jsbeautifyrc/mustache/expected/test.mustache diff --git a/examples/simple-jsbeautifyrc/mustache/original/test.mustache b/examples/simple-jsbeautifyrc/mustache/original/test.mustache new file mode 100644 index 0000000..196584c --- /dev/null +++ b/examples/simple-jsbeautifyrc/mustache/original/test.mustache @@ -0,0 +1,16 @@ +

{{header}}

+{{#bug}} +{{/bug}} + +{{#items}} +{{#first}} +
  • {{name}}
  • +{{/first}} +{{#link}} +
  • {{name}}
  • +{{/link}} +{{/items}} + +{{#empty}} +

    The list is empty.

    +{{/empty}} diff --git a/examples/simple-jsbeautifyrc/test.pl b/examples/simple-jsbeautifyrc/perl/expected/test.pl similarity index 100% rename from examples/simple-jsbeautifyrc/test.pl rename to examples/simple-jsbeautifyrc/perl/expected/test.pl diff --git a/examples/simple-jsbeautifyrc/perl/original/test.pl b/examples/simple-jsbeautifyrc/perl/original/test.pl new file mode 100644 index 0000000..7c0dc50 --- /dev/null +++ b/examples/simple-jsbeautifyrc/perl/original/test.pl @@ -0,0 +1,12 @@ +#!/usr/bin/env perl + +use strict; +use warnings; + +if(1){ +my $x = 'y'; +my $foo = 'bar'; +# comment + +print('Hello, '.'World!') +} diff --git a/examples/simple-jsbeautifyrc/test.php b/examples/simple-jsbeautifyrc/php/expected/test.php similarity index 100% rename from examples/simple-jsbeautifyrc/test.php rename to examples/simple-jsbeautifyrc/php/expected/test.php diff --git a/examples/simple-jsbeautifyrc/test2.php b/examples/simple-jsbeautifyrc/php/expected/test2.php similarity index 100% rename from examples/simple-jsbeautifyrc/test2.php rename to examples/simple-jsbeautifyrc/php/expected/test2.php diff --git a/examples/simple-jsbeautifyrc/test3.php b/examples/simple-jsbeautifyrc/php/expected/test3.php similarity index 100% rename from examples/simple-jsbeautifyrc/test3.php rename to examples/simple-jsbeautifyrc/php/expected/test3.php diff --git a/examples/simple-jsbeautifyrc/php/original/test.php b/examples/simple-jsbeautifyrc/php/original/test.php new file mode 100644 index 0000000..d396865 --- /dev/null +++ b/examples/simple-jsbeautifyrc/php/original/test.php @@ -0,0 +1,32 @@ +query(""); +$num = $q->num_rows; +echo ''; +if ($num>0) { echo ''; +}else { echo ''; } +echo ''; + + +// new messages +$q = $mysqli->query(""); +$num = $q->num_rows; +echo ''; +if ($num>0) { +echo ''; +}else { +echo ''; +} +echo ''; + + + + +?> diff --git a/examples/simple-jsbeautifyrc/php/original/test2.php b/examples/simple-jsbeautifyrc/php/original/test2.php new file mode 100644 index 0000000..55b9896 --- /dev/null +++ b/examples/simple-jsbeautifyrc/php/original/test2.php @@ -0,0 +1,4 @@ + [ + + {:login => login, :passcode => passcode, :host => host, :port => port}, +], + :reliable => false, # Override default +:connect_headers => conn_hdrs, + +} + + +hash = { :hosts => [ + + {:login => user, :passcode => password, :host => 'noonehome', :port => 2525}, + + {:login => user, :passcode => password, :host => host, :port => port}, + + ], + + :logger => mylog, # This enables callback logging! + + :max_reconnect_attempts => 5, + + } diff --git a/examples/simple-jsbeautifyrc/alphasort1.scss b/examples/simple-jsbeautifyrc/sass/expected/alphasort1.scss similarity index 100% rename from examples/simple-jsbeautifyrc/alphasort1.scss rename to examples/simple-jsbeautifyrc/sass/expected/alphasort1.scss diff --git a/examples/simple-jsbeautifyrc/test.sass b/examples/simple-jsbeautifyrc/sass/expected/test.sass similarity index 100% rename from examples/simple-jsbeautifyrc/test.sass rename to examples/simple-jsbeautifyrc/sass/expected/test.sass diff --git a/examples/simple-jsbeautifyrc/test.scss b/examples/simple-jsbeautifyrc/sass/expected/test.scss similarity index 100% rename from examples/simple-jsbeautifyrc/test.scss rename to examples/simple-jsbeautifyrc/sass/expected/test.scss diff --git a/examples/simple-jsbeautifyrc/sass/original/alphasort1.scss b/examples/simple-jsbeautifyrc/sass/original/alphasort1.scss new file mode 100644 index 0000000..9b5e86b --- /dev/null +++ b/examples/simple-jsbeautifyrc/sass/original/alphasort1.scss @@ -0,0 +1,4 @@ +.example(){ + .base-apple(); // Sets base apple color to red + .apple-color(@color-green); // Sets apple color to green +} diff --git a/examples/simple-jsbeautifyrc/sass/original/test.sass b/examples/simple-jsbeautifyrc/sass/original/test.sass new file mode 100644 index 0000000..44e52bb --- /dev/null +++ b/examples/simple-jsbeautifyrc/sass/original/test.sass @@ -0,0 +1,6 @@ +a { +line-height: 56px; +&:hover { + color: blue; +} +} diff --git a/examples/simple-jsbeautifyrc/sass/original/test.scss b/examples/simple-jsbeautifyrc/sass/original/test.scss new file mode 100644 index 0000000..f483b81 --- /dev/null +++ b/examples/simple-jsbeautifyrc/sass/original/test.scss @@ -0,0 +1,12 @@ +#cta { + .container { + .cta--primary { + &:visited { + //whatever + } + &::before { + //whatever + } + } + } +} diff --git a/examples/simple-jsbeautifyrc/sql/expected/test.sql b/examples/simple-jsbeautifyrc/sql/expected/test.sql new file mode 100644 index 0000000..617439f --- /dev/null +++ b/examples/simple-jsbeautifyrc/sql/expected/test.sql @@ -0,0 +1 @@ +SELECT ca.proj_id AS proj_id, ca.ca_name AS proj_name, ca.ca_date_start AS proj_start, ca.ca_date_end AS proj_end,(SELECT COUNT(*) FROM rotations r WHERE r.proj_id = proj_id AND r.r_status = 'R' GROUP BY r.proj_id) r_count, (SELECT count(*) FROM rotations r WHERE r.proj_id = proj_id AND r.channel_id = 24 ) r_rtb_count FROM projs ca, clients c, proj_auth caa WHERE ca.client_id = 12345 AND ca.client_id = c.client_id AND ca_type = 'zzz' AND c.agency_id = 0 AND ca.client_id = NVL( caa.client_id, ca.client_id ) AND proj_id = NVL( caa.proj_id, proj_id ) AND caa.contact_id = 7890 diff --git a/examples/simple-jsbeautifyrc/test2.sql b/examples/simple-jsbeautifyrc/sql/expected/test2.sql similarity index 100% rename from examples/simple-jsbeautifyrc/test2.sql rename to examples/simple-jsbeautifyrc/sql/expected/test2.sql diff --git a/examples/simple-jsbeautifyrc/sql/original/test.sql b/examples/simple-jsbeautifyrc/sql/original/test.sql new file mode 100644 index 0000000..617439f --- /dev/null +++ b/examples/simple-jsbeautifyrc/sql/original/test.sql @@ -0,0 +1 @@ +SELECT ca.proj_id AS proj_id, ca.ca_name AS proj_name, ca.ca_date_start AS proj_start, ca.ca_date_end AS proj_end,(SELECT COUNT(*) FROM rotations r WHERE r.proj_id = proj_id AND r.r_status = 'R' GROUP BY r.proj_id) r_count, (SELECT count(*) FROM rotations r WHERE r.proj_id = proj_id AND r.channel_id = 24 ) r_rtb_count FROM projs ca, clients c, proj_auth caa WHERE ca.client_id = 12345 AND ca.client_id = c.client_id AND ca_type = 'zzz' AND c.agency_id = 0 AND ca.client_id = NVL( caa.client_id, ca.client_id ) AND proj_id = NVL( caa.proj_id, proj_id ) AND caa.contact_id = 7890 diff --git a/examples/simple-jsbeautifyrc/sql/original/test2.sql b/examples/simple-jsbeautifyrc/sql/original/test2.sql new file mode 100644 index 0000000..40f1942 --- /dev/null +++ b/examples/simple-jsbeautifyrc/sql/original/test2.sql @@ -0,0 +1,5 @@ +INSERT INTO client (host, description, created_at) VALUES('hallpclnx', 'My linux machine', CURRENT_TIMESTAMP); +INSERT INTO thread (thread, description, created_at, client_id) VALUES(1, 'Living room camera', CURRENT_TIMESTAMP, 1); +INSERT INTO thread (thread, description, created_at, client_id) VALUES(2, 'Porch camera', CURRENT_TIMESTAMP, 1); +INSERT INTO thread (thread, description, created_at, client_id) VALUES(2, 'Garden camera', CURRENT_TIMESTAMP, 1); +INSERT INTO client (host, description, created_at) VALUES('shedpclnx', 'My shed linux machine', CURRENT_TIMESTAMP); diff --git a/examples/simple-jsbeautifyrc/test.ts b/examples/simple-jsbeautifyrc/typescript/expected/test.ts similarity index 100% rename from examples/simple-jsbeautifyrc/test.ts rename to examples/simple-jsbeautifyrc/typescript/expected/test.ts diff --git a/examples/simple-jsbeautifyrc/typescript/original/test.ts b/examples/simple-jsbeautifyrc/typescript/original/test.ts new file mode 100644 index 0000000..a8718e7 --- /dev/null +++ b/examples/simple-jsbeautifyrc/typescript/original/test.ts @@ -0,0 +1,8 @@ +module TestModule { +export class A { +constructor(private a: string) { +} +} +export class B extends A { +} +}; diff --git a/spec/atom-beautify-spec.coffee b/spec/atom-beautify-spec.coffee index a90db6e..56fb0d4 100644 --- a/spec/atom-beautify-spec.coffee +++ b/spec/atom-beautify-spec.coffee @@ -1,4 +1,4 @@ -AtomBeautify = require '../lib/atom-beautify' +Beautify = require '../lib/beautify' # Use the command `window:run-package-specs` (cmd-alt-ctrl-p) to run specs. # diff --git a/spec/beautify-languages-spec.coffee b/spec/beautify-languages-spec.coffee new file mode 100644 index 0000000..58e788a --- /dev/null +++ b/spec/beautify-languages-spec.coffee @@ -0,0 +1,135 @@ +Beautify = require '../lib/beautify' +beautifier = require "../lib/language-options" +languages = beautifier.languages +defaultLanguageOptions = beautifier.defaultLanguageOptions +fs = require "fs" +path = require "path" + +# Use the command `window:run-package-specs` (cmd-alt-ctrl-p) to run specs. +# +# To run a specific `it` or `describe` block add an `f` to the front (e.g. `fit` +# or `fdescribe`). Remove the `f` to unfocus the block. + +describe "BeautifyLanguages", -> + + optionsDir = path.resolve(__dirname, "../examples") + + # Activate all of the languages + allLanguages = [ + "c", "coffee-script", "css", "html", + "java", "javascript", "json", "less", + "mustache", "objective-c", "perl", "php", + "python", "ruby", "sass", "sql", + "typescript", "xml", "csharp", "gfm" + ] + + beforeEach -> + for lang in allLanguages + do (lang) -> + waitsForPromise -> + atom.packages.activatePackage("language-#{lang}") + + ### + Directory structure: + - examples + - config1 + - lang1 + - original + - 1-test.ext + - expected + - 1-test.ext + - lang2 + - config2 + ### + + # All Configurations + configs = fs.readdirSync(optionsDir) + for config in configs + do (config) -> + # Generate the path to where all of the languages are + langsDir = path.resolve(optionsDir, config) + optionStats = fs.lstatSync(langsDir) + # Confirm that this path is a directory + if optionStats.isDirectory() + # Create testing group for configuration + describe "when using configuration '#{config}'", -> + # All Languages for configuration + langNames = fs.readdirSync(langsDir) + for lang in langNames + do (lang) -> + # Generate the path to where al of the tests are + testsDir = path.resolve(langsDir, lang) + langStats = fs.lstatSync(testsDir) + # Confirm that this path is a directory + if langStats.isDirectory() + # Original + originalDir = path.resolve(testsDir, "original") + if not fs.existsSync(originalDir) + console.warn("Directory for test originals/inputs not found." + + " Making it at #{originalDir}.") + fs.mkdirSync(originalDir) + # Expected + expectedDir = path.resolve(testsDir, "expected") + if not fs.existsSync(expectedDir) + console.warn("Directory for test expected/results not found." + + "Making it at #{expectedDir}.") + fs.mkdirSync(expectedDir) + + # Language group tests + describe "when beautifying language '#{lang}'", -> + + # All tests for language + testNames = fs.readdirSync(originalDir) + for testFileName in testNames + do (testFileName) -> + ext = path.extname(testFileName) + testName = path.basename(testFileName, ext) + # Confirm this is a test + it "#{testName}", -> + + # Generate paths to test files + originalTestPath = path.resolve(originalDir, testFileName) + expectedTestPath = path.resolve(expectedDir, testFileName) + # Get contents of original test file + originalContents = fs.readFileSync(originalTestPath)?.toString() + # Check if there is a matching expected test resut + if not fs.existsSync(expectedTestPath) + throw new Error("No matching expected test result found for '#{testName}' " + + "at '#{expectedTestPath}'. Creating it from original.") + # err = fs.writeFileSync(expectedTestPath, originalContents) + # throw err if err + # Get contents of expected test file + expectedContents = fs.readFileSync(expectedTestPath)?.toString() + # expect(expectedContents).not.toEqual originalContents + # expect(atom.grammars.getGrammars()).toEqual [] + grammar = atom.grammars.selectGrammar(originalTestPath, originalContents) + # expect(grammar).toEqual("test") + grammarName = grammar.name + + editorOptions = + indent_size: 4 + indent_char: " " + indent_with_tabs: false + + allOptions = [editorOptions] + + beautifyCompleted = false + completionFun = (text) -> + if text instanceof Error + return beautifyCompleted = text # text == Error + expect(typeof text).toEqual "string" + expect(text).toEqual expectedContents + beautifyCompleted = true + + runs -> + try + beautifier.beautify originalContents, grammarName, allOptions, completionFun + catch e + beautifyCompleted = e + + waitsFor(-> + if beautifyCompleted instanceof Error + throw beautifyCompleted + else + return beautifyCompleted + , "Waiting for beautification to complete", 5000)