Mike Gerwitz
79d0c4a62c
[ #25 ] Began moving test-class-implement over to new test case system
2011-11-02 22:32:45 -04:00
Mike Gerwitz
f15fa03a3b
[ #25 ] Began moving test-class-visibility over to new test case style
2011-11-02 22:04:53 -04:00
Mike Gerwitz
48dbfea990
[ #25 ] Began moving test-class_builder-visibility over to new test case format
2011-11-02 21:37:28 -04:00
Mike Gerwitz
de78a472f0
[ #25 ] MemberBuilder/MethodTest - removed unnecessary test
2011-11-02 19:12:15 -04:00
Mike Gerwitz
110d937838
[ #25 ] Began converting test-class_builder-const to test case
...
- Not yet renaming, as the conversion is not yet complete
2011-11-02 19:11:12 -04:00
Mike Gerwitz
a0ba2feb33
[ #25 ] Removed transfered tests from test-class_builder-const
2011-10-30 14:22:17 -04:00
Mike Gerwitz
b063a91e40
[ #25 ] Added visibility de-escalation and escalation tests to MemberBuilderValidator for getters/setters
2011-10-30 12:06:09 -04:00
Mike Gerwitz
08cb663833
[ #25 ] Refactored quickVisChangeTest to share code between each of the member test cases
2011-10-29 10:08:08 -04:00
Mike Gerwitz
3c676de55d
[ #25 ] Combined buildGetter() and buildSetter()
...
This helped to get rid of some unnecessary duplicate code and should also help
to improve performance slightly for getter/setter definitions.
2011-10-29 08:25:51 -04:00
Mike Gerwitz
02cd52cfb7
[ #25 ] Began refactoring getter/setter building into a single method (util.propParse)
...
I'm unsure as to why I originally placed them in separate methods. propParse() will
always find a getter at the same time it finds a setter, and vice versa, should they
both have been defined on the object.
2011-10-29 08:08:02 -04:00
Mike Gerwitz
8433511f56
[ #25 ] Added visibility [de-]escalation tests for properties
2011-10-28 20:22:53 -04:00
Mike Gerwitz
31a7980e37
[ #25 ] Moved bulk of visibility escalation test into common file to be shared with other member tests
2011-10-28 20:22:14 -04:00
Mike Gerwitz
93021f3dbc
[ #25 ] Moved getter/setter validation tests into new test case
...
Much more elegant a test case now.
2011-10-28 00:22:50 -04:00
Mike Gerwitz
ad0343fb9b
[ #25 ] Moved getter/setter validation logic into MemberBuilderValidator
...
- Tests have not yet been moved
2011-10-28 00:08:22 -04:00
Mike Gerwitz
05df0b485c
[ #25 ] Moved single access modifier getter/setter test to VisibilityTest
2011-10-27 20:46:30 -04:00
Mike Gerwitz
f19a62e733
[ #25 ] Moved public default getter/setter test to new location
2011-10-27 20:43:56 -04:00
Mike Gerwitz
a959e99b06
[ #25 ] Removed replaced vis tests from test-emmber_builder-gettersetter
2011-10-27 19:53:43 -04:00
Mike Gerwitz
5959956a27
[ #25 ] this => _self replacements in MemberBuilder/VisibilityTest
2011-10-27 19:52:43 -04:00
Mike Gerwitz
11020a9d2a
[ #25 ] Minor typo fix in MemberBuilder/VisibilityTest
2011-10-27 19:51:28 -04:00
Mike Gerwitz
1ba160e51c
[ #25 ] Added getter/setter vis test to MemberBuilder/VisibilityTest
2011-10-27 19:50:13 -04:00
Mike Gerwitz
ce7853965e
[ #25 ] Combined separate property and method vis test
2011-10-27 19:28:36 -04:00
Mike Gerwitz
6d1cc06c27
[ #25 ] Finished refactoring MemberBuilder/MethodTest and removed inc-member_builder-common (no longer needed)
...
Finally feels like things are starting to come together.
It's rather interesting looking back. Each time I begin writing a piece of
software, I think to myself, "This is the best way to do it." Well, generally.
Perhaps the implementation could have been better, but I may not have had the
time. However, the general concept remains.
Each time I look back months later and find that I disagree with certain
decisions. I find certain implementations to be messy or poorly constructed. Or
perhaps I was just being lazy to begin with. Whatever the case, it is
comforting. It shows that one is continuing to learn and evolve.
Now, in the case of ease.js, we're working with a number of different factors in
regards to my perception of prior code quality. Primarily, I'm looking at a
basic implementation (in this case, I'm referring to test cases) that served as
a foundation that could be later evolved. I didn't have the time to devote to a
stronger solution. However, since the project has evolved so far past my
original expectations, a more sophisticated solution is needed in order to
simplify the overall design. That is what happened here.
Of course, we're also looking at a year's worth of additional, intimate
experience with a language.
Regardless of the reason, I love to see software evolve. Especially my own. It's
as if I'm watching my child grow. From that, I can get a great deal of
satisfaction.
One shouldn't expect perfection. But one should certainly aim for it.
2011-10-26 23:39:03 -04:00
Mike Gerwitz
88cff48599
[ #25 ] Moved remaining tests in test-member_builder into MemberBuilder/VisibilityTest
2011-10-26 22:12:28 -04:00
Mike Gerwitz
2d494d577e
[ #25 ] Removed test-member_builder-prop; all tests have been moved
2011-10-26 00:03:26 -04:00
Mike Gerwitz
e90699c805
[ #25 ] Added test to MemberBuilder/Visibility test to ensure members will be declared public by default (if no access modifier is given)
2011-10-25 23:47:06 -04:00
Mike Gerwitz
f4b8eb3589
[ #25 ] Added test in MemberBuilder/VisibilityTest to ensure multiple access modifiers are not used
2011-10-25 23:30:57 -04:00
Mike Gerwitz
3482eb4cd7
[ #25 ] Removed method hiding test (can restore when reimplementing)
2011-10-25 22:29:03 -04:00
Mike Gerwitz
625f62bbf1
[ #25 ] Moved MemberBuilderValidator property tests into new test case
2011-10-23 01:14:13 -04:00
Mike Gerwitz
6fc3d05166
[ #25 ] Moved quick keyword validation into shared MemberBuilderValidator test module
2011-10-23 01:11:09 -04:00
Mike Gerwitz
a91cb01998
[ #25 ] Moved MethodBuilder property validation into MemberBuilderValidator
...
- Tests have not yet been moved
2011-10-23 00:43:08 -04:00
Mike Gerwitz
5e46298e39
[ #25 ] Moved MemberBuilderValidator's quickFailureTest into its own file to share with upcoming property tests
2011-10-23 00:27:25 -04:00
Mike Gerwitz
9b629b8b61
[ #25 ] Removed tests from MemberBuilder/MethodTest that have been refactored into MemberBuilderValidator/MethodTest
2011-10-23 00:06:22 -04:00
Mike Gerwitz
9fe26e7582
[ #25 ] Moved MemberBuilderValidator/MethodTest's helper functions into caseSetUp()
2011-10-22 16:49:51 -04:00
Mike Gerwitz
2da2247c86
[ #25 ] Added successful test to MemberBuilderValidator's method tests to ensure successful functionality is also tested
2011-10-22 16:47:09 -04:00
Mike Gerwitz
8ebcc3f1b3
[ #25 ] Removed duplicate code from MemberBuilderValidator method test
2011-10-22 16:37:58 -04:00
Mike Gerwitz
a5e2a507f2
[ #25 ] Throwing error instead of method hiding; will implement in future
2011-10-22 13:57:17 -04:00
Mike Gerwitz
6e7e031ff9
[ #25 ] [ #25 ] Re-added accidently removed portion of test
2011-10-22 11:06:03 -04:00
Mike Gerwitz
f9b951ddb2
[ #25 ] [ #25 ] Began moving MemberBuilder validation rules into MemberBuilderValidator (moved method rules)
2011-10-22 01:00:45 -04:00
Mike Gerwitz
e6830b741f
[ #25 ] Now using keywords to compare visibility levels in validations to eliminiate fallback inconsistencies
...
Ironic, considering the current refactoring (not yet committed) of MemberBuilder to split validation logic into MemberBuilderValidator was partially to be able to easily override the fallback logic. It's a useful refactoring nonetheless, but it could have waited.
2011-10-22 00:32:59 -04:00
Mike Gerwitz
4d2d95a99f
[ #25 ] Added test case error output for browser
2011-10-21 16:04:27 -04:00
Mike Gerwitz
aeff796332
[ #25 ] [ #25 ] Added member builder tests for private and protected members
2011-10-21 16:04:24 -04:00
Mike Gerwitz
ea972bdffc
[ #25 ] Added ability to manually increment assertion count for custom assertions
2011-10-21 12:10:53 -04:00
Mike Gerwitz
9ea60a18b0
[ #25 ] Added assertion count to testcase output
2011-10-21 12:10:53 -04:00
Mike Gerwitz
f7700f93e5
[ #25 ] Refactored MemberBuilder/VisibilityTest basic tests into reusable functions for upcoming tests in other access levels
2011-10-21 12:10:49 -04:00
Mike Gerwitz
bb9eb16fd3
[ #25 ] Began adding MemberBuilder/VisibilityTest to test MemberBuilder directly
...
As mentioned in a prior commit blog-like entry, many of the tests evolved into more of an integration or system-level type of test. Let's get away from that.
2011-10-21 12:09:00 -04:00
Mike Gerwitz
474d8f307d
[ #25 ] Added caseSetUp() for test cases
2011-10-21 10:57:34 -04:00
Mike Gerwitz
c1207eb3d5
Moved MemberBuilder-MethodTest into MemberBuilder subdir
...
- Altered combine script to support subdirs (note that the dir names aren't included in the combined file)
2011-10-20 23:40:30 -04:00
Mike Gerwitz
8c0058698a
Removed accidental commit of console.log() in test-combine.js
2011-10-14 22:36:10 -04:00
Mike Gerwitz
024f3b778c
Began adding FallbackMemberBuilder test case
...
This is the first test case to use the new basic xUnit-style system. This
system is likely to evolve over time. Right now it's purely for
setUp, organizational and output purposes.
2011-10-14 22:05:22 -04:00
Mike Gerwitz
c10fc5818a
Added very basic formatted output and failure tolerance for test case
...
The one year anniversary of the beginning of the ease.js project is quickly
approaching. I find myself to be not quite where I had expected many months ago,
but find that the project has evolved so much further than I had event
originally anticipated. My main motivation behind the project continues to be
making my life at work easier, while providing an excellent library that others
can hopefully benefit from. If anything, it's a fascinating experiment and
clever hack around JavaScript.
Now I find myself with a newborn child (nearly four weeks old), who demands my
constant attention (and indeed, it is difficult to find the desire to put my
attention elsewhere). Still - I am a hacker. Software is my passion. So the
project must move forward.
I also find myself unwilling to create a blog for ease.js. I feel it's
inappropriate for a project that's in its (relative) infancy and does not have
much popularity (it has never been announced to anyone). As such, I feel that
commit messages will serve my purpose as useful journal entries regarding the
status of the project. They will also be interesting easter eggs for those who
would wish to seek them out for additional perspective on the project. (Granted,
one could easy script the discovery of such entries by examining the absurd
length of the commit message...perhaps the git log manpages would be useful).
So. Let's get back to the project.
ease.js is currently going through a strong refactoring in order to address
design issues that have begun to creep up as the project grew. The initial
design was a very simple one - a "series of modules", as it was originally
described in a CommonJS sense, that would provide features of a classical
Object-Oriented system. It would seem ironic that, having a focus on
classical Object-Oriented development, one would avoid developing the project in
such a paradigm. Instead, I wished to keep the design simple (because the
project seemed simple), more natural to JS developers (prototypal) and
performant (object literals do not have the overhead of instantiation). Well,
unfortunately, the project scope has increased drastically due to the success of
the implementation (and my playfulness), the chosen paradigm has become awkward
in itself and the performance benefit is indeed a micro-optimization when
compared with the performance of both the rest of the system and the system that
will implement ease.js as a framework.
You can only put off refactoring for so long before the system begins to trip
over itself and stop being a pleasure to work with. In fact, it's a slap in the
face. You develop this intricate and beautiful system (speaking collectively and
generally, of course) and it begins to feel tainted. In order to prevent it from
developing into a ball of mud - a truly unmaintainable mess - the act of
refactoring is inevitable, especially if we want to ensure that the project
survives and is actively developed for any length of time.
In this case, the glaring problem is that each of the modules are terribly,
tightly coupled. This reduces the flexibility of the system and forces us to
resort to a system riddled with conditionals. This becomes increasingly apparent
when we need to provide slightly different implementations between environments
(e.g. ES5/pre-ES5, production/development, etc and every combination).
Therefore, we need to decouple the modules in order to take advantage of
composition in order to provide more flexible feature sets depending on
environment.
What does this mean?
We need to move from object literals for the modules to prototypes (class-like,
but remember that ease.js exists because JS does not have "classes"). A number
of other prototypes can be extracted from the existing modules and abstracted to
the point where they can be appropriately injected where necessary. Rather than
using conditions for features such as fallbacks, we can encapsulate the entire
system in a facade that contains the features relevant to that particular
environment. This will also have the consequence that we can once again test
individual units rather than systems.
At the point of this commit (this entry was written before any work was done),
the major hurdle is refactoring the test cases so that they do not depend on
fallback logic and instead simply test specific units and skip the test if the
unit (the prototype) is not supported by the environment (e.g. proxies in a
pre-ES5 environment). This will allow us to finish refactoring the fallback and
environment-specific logic. It will also allow us to cleanly specify a fallback
implementation (through composition) in an ES5 environment while keeping ES5
detection mechanisms separate.
The remaining refactorings will likely be progressive. This all stemmed out of
the desire to add the method hiding feature, whose implementation varies
depending on environment. I want to get back to developing that feature so I can
get the first release (v0.1.0) out. Refactoring can continue after that point.
This project needs a version number so it can be used reliably.
2011-10-12 18:53:52 -04:00
Mike Gerwitz
f21f35019e
Renamed test case to MemberBuilder-MethodTest.js ( #25 )
2011-09-02 23:31:57 -04:00
Mike Gerwitz
b0cec62c98
test-member_builder-method freed from unnecessary dependencies for testing ( #25 )
2011-09-02 23:25:13 -04:00
Mike Gerwitz
1af7617a83
Moved instance binding test to MethodWrappersTest ( #25 )
...
- Ah; see how much nicer this is?
2011-09-02 23:07:42 -04:00
Mike Gerwitz
5937f7b0be
Transferred method __super() invocation test to MethodWrappersTest ( #25 )
2011-09-02 22:55:10 -04:00
Mike Gerwitz
40d555ee3f
Begin moving method wrapper tests into MethodWrappersTest ( #25 )
2011-09-02 22:47:35 -04:00
Mike Gerwitz
bc636637cc
Refactored new and override method wrappers into separate prototypes
...
- Note that, since we're mid-refactor, this is a bit of a mess
2011-08-31 00:24:19 -04:00
Mike Gerwitz
ce1370e025
Now passing getInst() directly into MethodwrapperFactory factory function, like good 'ol times
...
- I seem to have forgotten that this is necessary due to the static implementation
2011-08-31 00:05:07 -04:00
Mike Gerwitz
ba251d5a21
Ensuring combined tests run last
2011-08-29 23:17:44 -04:00
Mike Gerwitz
3c5362db0a
Added MethodWrapperFactory prototype
...
- Not yet used
2011-08-28 17:36:27 -04:00
Mike Gerwitz
758162ad0f
Began refactoring member_builder module into MemberBuilder prototype ( #25 )
2011-08-14 18:47:48 -04:00
Mike Gerwitz
fd95f38c87
Integrated VisibilityObjectFactory and removed old propobj ( #25 )
...
- Note that the excessive gluing is temporary
2011-08-13 23:58:08 -04:00
Mike Gerwitz
f3352e6d74
Added VisibilityObjectFactoryFactory ( #25 )
...
- This may be temporary, depending on the ultimate implementation. This is intended to ease into the refactoring.
2011-08-13 23:00:03 -04:00
Mike Gerwitz
567c9f59a0
Implemented FallbackVisibilityObjectFactory ( #25 )
2011-08-13 22:42:33 -04:00
Mike Gerwitz
cd1f8921de
Prototype tests now have 'Test' suffix, rather than 'test-' prefix ( #25 )
2011-08-11 23:25:20 -04:00
Mike Gerwitz
79652a1120
Moved non-fallback visibility object into VisibilityObjectFactory (system does not yet use it) ( #25 )
2011-08-11 23:11:37 -04:00
Mike Gerwitz
7a579ab2aa
Initial refactoring of class_builder module into ClassBuilder ctor ( #25 )
2011-08-09 17:27:26 -04:00
Mike Gerwitz
a401c31996
Can no longer override non-virtual methods ( #19 )
2011-08-04 00:44:20 -04:00
Mike Gerwitz
2569dacf15
Override keyword is now required to override a virtual method ( #19 )
2011-08-04 00:32:10 -04:00
Mike Gerwitz
bd4e18acc6
Implicit method hiding warning now applies to virtual methods as well as non-virtual ( #19 )
2011-08-03 22:40:55 -04:00
Mike Gerwitz
5f95fecda6
More appropriately named method hiding test ( #19 )
2011-08-03 22:10:46 -04:00
Mike Gerwitz
db18a61d30
[ #19 ] Began implementing method hiding (added warning for implicit hiding)
2011-07-06 19:35:00 -04:00
Mike Gerwitz
b74e03704b
Corrected member builder method test testCannotOverridePropertyWithMethod
2011-07-06 18:49:01 -04:00
Mike Gerwitz
65d988b1c6
Set stack trace limit to 20 frames for tests
2011-07-06 18:06:22 -04:00
Mike Gerwitz
1b1a4b60d5
Altered warning display and stack trace
2011-07-06 17:55:40 -04:00
Mike Gerwitz
81fa2ae424
Merge branch 'master' into 'virtual/master'
...
- Resolved conflicts
2011-06-30 23:00:13 -04:00
Mike Gerwitz
adb7e088b7
[ #19 ] Cannot declare virtual static methods
2011-06-09 22:22:14 -04:00
Mike Gerwitz
8b33471e42
Corrected non-virtual override test
2011-06-09 22:22:11 -04:00
Mike Gerwitz
08dc2559b4
[ #19 ] Cannot declare virtual properties
2011-06-09 19:46:13 -04:00
Mike Gerwitz
7f24d094ba
[ #19 ] Re-added FinalClass tests (we still want those ;))
2011-06-08 01:28:45 -04:00
Mike Gerwitz
4fea62a8ed
[ #19 ] Removed 'final' keyword and all associated logic
...
- Kept FinalClass'
2011-06-08 01:26:04 -04:00
Mike Gerwitz
8b83e85c43
[ #19 ] Implemented 'virtual' keyword
...
- Baby steps. 'override' keyword is not yet necessary.
- Final not yet removed
2011-06-08 01:11:53 -04:00
Mike Gerwitz
557dcf6904
Fixed static bug and removed late static binding
...
- Late static binding will be revisited in the future
2011-05-31 22:29:07 -04:00
Mike Gerwitz
9db4e8d99f
Supplying alternative to getMethodInstance() for static methods
2011-05-30 23:03:08 -04:00
Mike Gerwitz
48cb9797c4
Added tests to ensure constants support different levels of visibility
2011-05-30 10:55:40 -04:00
Mike Gerwitz
44ea2552ba
Added minified files to tests
2011-05-23 18:38:13 -04:00
Mike Gerwitz
fdee02adc9
Combined file now exports {Final,Abstract}Class
2011-05-23 07:12:46 -04:00
Mike Gerwitz
fe02c78f1d
Fixed tests containing unknwon keywords
...
- Broken from previous commit
2011-05-22 22:21:32 -04:00
Mike Gerwitz
76bc7361d3
Implemented GH#2 - Keyword restrictions; throw exception when unknown keywords are used
2011-05-22 22:11:57 -04:00
Mike Gerwitz
cf344186fc
Implement GH#1 Provide useful error when attempting to extend from non-constructor
2011-05-22 21:54:41 -04:00
Mike Gerwitz
8c62ee021c
Added support for final subtypes
2011-05-22 21:35:29 -04:00
Mike Gerwitz
a67d704837
Added support for named abstract subclasses
2011-05-22 21:05:46 -04:00
Mike Gerwitz
e0de030cee
Implemented AbstractClass
...
- Some of this functionality requires further refactoring
2011-05-22 16:08:48 -04:00
Mike Gerwitz
623c3df429
Reorganized abstract tests
2011-05-22 11:33:11 -04:00
Mike Gerwitz
9690663d1c
Added support for final classes
...
- This commit was originally many. Unfortunately, certain Git objects became
corrupt shortly after my 500th commit due to HDD issues. Due to the scope, I
was unable to recover the set of commits I needed (after an hour of trying
every method).
- Fortunately, vim's swap files came to the rescue. Had I been able to
properly shut down my PC, I would have been rather frustrated.
2011-05-22 11:19:51 -04:00
Mike Gerwitz
6e1d796092
Implemented constant properties
2011-05-19 19:48:51 -04:00
Mike Gerwitz
2d91a221aa
Const keyword now results in static property
2011-05-19 19:07:31 -04:00
Mike Gerwitz
030bdef821
Static keyword cannot be used with const for properties
2011-05-19 18:30:55 -04:00
Mike Gerwitz
f3c1d0f9af
Methods cannot be declared as constant
2011-05-19 07:54:51 -04:00
Mike Gerwitz
c29cf0e66d
Util unnecessary in final test case
2011-05-19 07:52:29 -04:00
Mike Gerwitz
0c5293991c
Disallowed use of final keyword with properties
2011-05-18 20:51:02 -04:00
Mike Gerwitz
54e9c14051
Added late static binding tests
...
- This simply tests a very important consequence of the existing implementation
- Regression test
2011-05-18 20:42:25 -04:00
Mike Gerwitz
f4b31f2639
Corrected member_builder-prop tests
...
- Doesn't properly add method; added as property
2011-05-18 20:42:18 -04:00
Mike Gerwitz
4c74f2a1f2
Added final keyword for methods
2011-05-15 19:11:23 -04:00
Mike Gerwitz
61c29c61dd
Added tests to ensure private static getters/setters are properly implemented
2011-05-14 11:22:27 -04:00
Mike Gerwitz
69c5f8b7a5
Corrected public static getter/setter sub-subtype inheritance test
2011-05-14 11:07:59 -04:00
Mike Gerwitz
3185cb13d5
Added tests to ensure protected static getters/setters operate as intended
2011-05-14 11:07:51 -04:00
Mike Gerwitz
d59bac0978
Added test to ensure users can't be tricky and try to break static property encapsulation
2011-05-13 21:27:53 -04:00
Mike Gerwitz
775438c1b6
Implemented private static properties
2011-05-13 00:55:09 -04:00
Mike Gerwitz
9b20cdff48
Initial concept for protected static property access
2011-05-12 00:25:34 -04:00
Mike Gerwitz
9067bbf0cf
Static property accessor method is no longer enumerable
2011-05-11 20:53:43 -04:00
Mike Gerwitz
fa8d1bebe1
Implemented private static methods
2011-05-11 20:10:10 -04:00
Mike Gerwitz
a303adddea
Added tests to ensure that static method overrides are supported
2011-05-11 18:36:49 -04:00
Mike Gerwitz
9822894eae
Protected static methods are now inherited by subtypes
2011-05-11 17:56:48 -04:00
Mike Gerwitz
91a47e4dcd
[Bug Fix] Concrete class constructor is no longer invoked on extend
...
- The ctor must be instantiated for use in the prototype chain
- This was working in the past, but apparently no test existed for it and
refactoring broke it
2011-05-10 23:32:13 -04:00
Mike Gerwitz
3c774a7b16
Implemented protected static members within static methods
...
- Still not inheritence
2011-05-10 19:54:23 -04:00
Mike Gerwitz
a246dd67e0
Began adding protected static members (supported for instance methods)
...
- No inheritance support yet
2011-05-09 23:09:32 -04:00
Mike Gerwitz
26cf32abe5
Enhanced static property setter to support setting to both undefined and null values
2011-04-13 23:53:03 -04:00
Mike Gerwitz
462671cfba
Can no longer set values of undeclared static properties
2011-04-13 23:45:26 -04:00
Mike Gerwitz
7e53df0e84
Static property setter now returns calling class
2011-04-13 23:35:54 -04:00
Mike Gerwitz
e3c526b89d
Writes to public static properties now work properly
2011-04-13 23:06:24 -04:00
Mike Gerwitz
44cd8db82d
Began implementing static property method (getter)
2011-04-13 22:38:05 -04:00
Mike Gerwitz
63a4f95f65
Fix for overriding protected with protected
...
- A better solution may be explored
2011-04-13 14:48:20 -04:00
Mike Gerwitz
4a90b7b809
Public static properties references are now shared with subtypes
2011-04-10 22:32:46 -04:00
Mike Gerwitz
aead20290c
Inherited static members are no longer copied by reference
...
- Sharing values with supertype = bad
2011-04-05 23:47:44 -04:00
Mike Gerwitz
604e03fa55
util.clone() no longer falsely attempts to clone functions
2011-04-05 23:47:08 -04:00
Mike Gerwitz
4a0537223b
Added deep copy to util.copyTo()
2011-04-05 23:38:13 -04:00
Mike Gerwitz
fad503422e
Subtypes now inherit public static members from their supertype
2011-04-05 23:11:25 -04:00
Mike Gerwitz
7560d57619
Implemented __self for static access
2011-04-05 22:07:13 -04:00
Mike Gerwitz
ea0d18d8eb
Added regression test to ensure 'this' is bound to the class definition rather than instance within static methods
2011-04-05 19:52:49 -04:00
Mike Gerwitz
af53fe81b4
Added support for public static getters/setters
2011-04-05 00:08:39 -04:00
Mike Gerwitz
4d0724b85d
Added util.copyTo()
2011-04-05 00:05:18 -04:00
Mike Gerwitz
e93a4db3e4
Began implementing public static members
2011-04-04 23:07:01 -04:00
Mike Gerwitz
dddd26761c
Current __self -> __inst; __self will be used in a different manner in following commits
2011-04-03 11:57:15 -04:00
Mike Gerwitz
1abf127ccc
Protected property values, when set by the parent, are now available to subtypes
2011-04-02 10:58:26 -04:00
Mike Gerwitz
61f2f7e22d
Methods can now be properly overridden when visibility is escalated
2011-04-01 06:28:45 -04:00
Mike Gerwitz
6ade1c021f
Implemented GH#15 Access to public interface from within class instance
2011-03-30 00:55:27 -04:00
Mike Gerwitz
9d47e64ac3
Properties can no longer be declared as abstract
2011-03-29 23:48:17 -04:00
Mike Gerwitz
8a3010c964
Implemented GH#3 Abstract keyword cannot be used with private members
2011-03-29 23:39:49 -04:00
Mike Gerwitz
b8e512c69e
Formatted prop_parser tests
2011-03-29 23:28:45 -04:00
Mike Gerwitz
5cb0b8355f
__super() method is now properly set on context
2011-03-29 22:02:42 -04:00
Mike Gerwitz
bc8ec4e0be
Added tests for forced-public methods
2011-03-28 19:17:38 -04:00
Mike Gerwitz
2555a0db47
Added tests for reserved members
2011-03-28 18:58:23 -04:00
Mike Gerwitz
30d10ff9d7
Constructor must now be public
2011-03-23 21:35:25 -04:00
Mike Gerwitz
fba584171c
Placed test targets in their own Makefile to faciliate using tests as prerequisites for ease-full.js, ensuring it'll be rebuilt on test modification
2011-03-20 02:28:40 -04:00
Mike Gerwitz
4d2852627e
All interface members must now be public
2011-03-19 00:58:42 -04:00
Mike Gerwitz
5af833ab05
Disallowing member redeclaration in same class definition
2011-03-19 00:48:02 -04:00
Mike Gerwitz
7070e55254
Added test to ensure same visibility de-escalation rules apply to concrete implementations of Interface methods
2011-03-18 23:55:56 -04:00
Mike Gerwitz
10ef0b2139
Added test to ensure __super() works properly with protected method overrides
2011-03-18 23:49:28 -04:00
Mike Gerwitz
ce736bea55
Visibility de-escalation no longer permitted
2011-03-18 23:42:07 -04:00
Mike Gerwitz
36ae6bcd81
Now throwing expection if more than two arguments are passed to extend() when implementing
2011-03-16 19:50:47 -04:00
Mike Gerwitz
14cac6b461
Can now specify parent class in extend() when implementing atop an empty base
2011-03-16 19:24:02 -04:00
Mike Gerwitz
80f3ec6b68
Preventing base specification via extend() when implementing off of an existing base class
2011-03-16 19:06:16 -04:00
Mike Gerwitz
58cb196213
Extending class while using temporary name object is now permitted
2011-03-16 18:18:33 -04:00
Mike Gerwitz
66758500e6
Class metadata is now stored in class object (first step in working with GC)
2011-03-14 23:43:56 -04:00
Mike Gerwitz
7b766c1b14
Altered toString() defaults to be more consistent with v8
2011-03-14 18:16:53 -04:00
Mike Gerwitz
9a135a064c
Added pre-ES5 test to ensure we can catch fallback bugs quickly between browser tests (preferably, before even committing)
2011-03-13 22:08:08 -04:00
Mike Gerwitz
d05652f880
Fixed visibility issues in IE6
...
- Wasn't properly falling back
2011-03-13 21:47:40 -04:00
Mike Gerwitz
e1bb48a8d9
Added visibility test to ensure supertypes do not have access to private members of subtypes when invoked
2011-03-13 15:39:14 -04:00
Mike Gerwitz
e03c081cfd
Fixed bug that made private members of a supertype inaccessible to methods that have not been overridden by a subtype
...
- In doing so, abandoned the super identifier (sid) for a more elegant solution with class ids (cid's)
- This permits fast and easy private member swapping via getMethodInstance() in class.js
2011-03-13 04:51:00 -04:00
Mike Gerwitz
6b374902ae
Separated private members into a separate object (propobj) to prepare for future modifications
...
- This incurs a performance hit for accessing protected members, and even further for public, internally
- But speeds up access to private members, likely due to there being less members
2011-03-12 23:48:38 -05:00
Mike Gerwitz
05e249def4
Added result explanations to method invocation performance tests
2011-03-11 19:27:07 -05:00
Mike Gerwitz
5a420fae4e
Added perf tests for invoking class methods
2011-03-11 19:20:05 -05:00
Mike Gerwitz
d2aa24ef66
Added performance tests for setting properties, internally and externally
2011-03-11 19:16:52 -05:00
Mike Gerwitz
311e39d67c
Added performance test for reading properties, internal and external
2011-03-11 19:14:10 -05:00
Mike Gerwitz
a8767a1da0
Added property/method class definition performance tests
2011-03-10 23:32:33 -05:00
Mike Gerwitz
cdc88bea4c
Added count to perf output to calculate individual cost
2011-03-10 23:07:52 -05:00
Mike Gerwitz
37bf2fa353
Began adding performance tests
2011-03-10 22:43:36 -05:00
Mike Gerwitz
e0fb37daa0
Overridden methods now property return instance when returning 'this'
...
- There may be a cleaner way to do this. This is a quick fix.
2011-03-10 12:40:55 -05:00
Mike Gerwitz
84363aca45
Added test to ensure correct instance is returned when returning 'this' from a parent method
2011-03-10 12:24:59 -05:00
Mike Gerwitz
7427958ec0
Returning 'this' from a method will now return the object instance, not the internal property object
2011-03-10 12:19:39 -05:00
Mike Gerwitz
354061cd5f
Continuing to use BASH for now for rmtrail test
2011-03-07 23:16:14 -05:00
Mike Gerwitz
960be880ab
Merge branch 'master' into visibility/master
2011-03-07 23:09:02 -05:00
Mike Gerwitz
ab8faad53f
/bin/{bash => sh} to support system with only sh installed
...
- e.g. FreeBSD
- Nothing in the scripts actually needs BASH anyway
2011-03-07 22:54:59 -05:00
Mike Gerwitz
841b5ac5a5
Replaed all __{define,lookup}[GS]etter__'s with defineProperty/getOwnPropertyDescriptor
2011-03-07 22:44:47 -05:00
Mike Gerwitz
00378da630
Merge branch 'master' into visibility/master
2011-03-07 09:03:34 -05:00
Mike Gerwitz
fbc58384b4
Provided a more accurate mechanism for detecting Object.defineProperty (tests in IE8 fixed)
2011-03-07 09:03:03 -05:00
Mike Gerwitz
4e2f174667
Added test for good measure to ensure class instances do not share protected member values
2011-03-07 00:19:56 -05:00
Mike Gerwitz
e05a65d5fa
Initial concept of inheriting protected/private members
2011-03-07 00:14:43 -05:00
Mike Gerwitz
30bfde50cd
Tada! Private members.
2011-03-06 23:03:39 -05:00
Mike Gerwitz
c1765cd720
Using visibility fallback for browsers that do not support getters/setters
2011-03-06 22:43:14 -05:00
Mike Gerwitz
5d8fdc5204
Merge branch 'master' into visibility/master
...
Conflicts:
lib/class.js
2011-03-06 12:39:26 -05:00
Mike Gerwitz
517b2be464
Fix toString() override for IE
...
- All tests once again pass on IE6
2011-03-06 12:38:31 -05:00
Mike Gerwitz
a1c1ddff74
IE6 was blowing up on getter/setter test
2011-03-06 10:56:31 -05:00
Mike Gerwitz
4eda438f14
Outputting current test for browser
...
- Output is hidden on success, but useful on failure
2011-03-06 10:55:13 -05:00
Mike Gerwitz
6b79999adb
IE6 Error.prototype.toString() !== Error.message
2011-03-06 10:37:20 -05:00
Mike Gerwitz
0ccab4f8d9
Corrected test combine process; was not including tests in ease-full.js
2011-03-06 10:15:32 -05:00
Mike Gerwitz
c0f351d173
Merge branch 'master' into visibility/master
2011-03-05 23:12:55 -05:00
Mike Gerwitz
d6cca75093
Can now override toString() method of a class
2011-03-05 23:11:13 -05:00
Mike Gerwitz
b321610cc7
Interface name included in instantiation error, if available
2011-03-05 21:46:44 -05:00
Mike Gerwitz
6f7dabe35e
Interface name is included in declaration errors, if available
2011-03-05 17:27:02 -05:00
Mike Gerwitz
2967cc7a9a
Class name is now provided in all errors where name is available, within class module
2011-03-05 13:13:53 -05:00
Mike Gerwitz
da8be9affa
Interface definition errors now contain class name when available
2011-03-05 12:57:21 -05:00
Mike Gerwitz
5f739e604b
Class name is included in definition errors when available
2011-03-05 12:56:14 -05:00
Mike Gerwitz
635395b303
Merge branch 'master' into visibility/master
2011-03-05 03:23:11 -05:00
Mike Gerwitz
2c2701f4ab
Implemented staging-style named class definition when implementing interfaces
2011-03-05 03:22:45 -05:00
Mike Gerwitz
0f9454b79b
interface() no longer returns a usable class
...
- Number of reasons. First and foremost, it doesn't make sense to return a usable class with no body/definition
- Secondly, to make the following commit(s) possible and consistent
2011-03-05 02:59:21 -05:00
Mike Gerwitz
ace9f4c1ea
Began implementing class name staging (implement() does not yet work with it)
2011-03-05 00:33:47 -05:00
Mike Gerwitz
0ccdf07145
Implemented strict argument check for interface creation
2011-03-04 23:43:30 -05:00
Mike Gerwitz
b158e542d5
Declaring named class will throw error for extreaneous arguments
2011-03-04 16:36:15 -05:00
Mike Gerwitz
dca7653adf
Merge branch 'master' into visibility/master
2011-03-04 00:26:02 -05:00
Mike Gerwitz
009c4a93e9
Interfaces now have sane/useful values when converted to strings
2011-03-04 00:19:02 -05:00
Mike Gerwitz
85e687e29c
Added Interface.isInterface()
2011-03-03 23:59:37 -05:00
Mike Gerwitz
4148f8742d
Merge branch 'master' into visibility/master
...
Conflicts:
test/test-class-extend.js
2011-03-03 23:29:20 -05:00
Mike Gerwitz
81d03cb984
Altered class toString() representations to be more consistent with JS
2011-03-03 23:00:59 -05:00
Mike Gerwitz
e2cba458d8
Class instances now have different default toString() implementations than uninstantiated classes
...
- Instance id is not yet included, as that is currently in a different branch
2011-03-03 22:53:20 -05:00
Mike Gerwitz
840a495017
Began implementing named classes
...
- toString() implementation
2011-03-03 22:33:18 -05:00
Mike Gerwitz
d23ae6210c
Initial implementation of natural class definition by invoking class module
2011-03-03 19:43:20 -05:00
Mike Gerwitz
3f915d3644
The interface module may now be invoked, providing a more natural looking means of declaring interfaces
2011-03-03 19:08:24 -05:00
Mike Gerwitz
bc9e2bb7b2
Fix setting public properties
...
- This currently only works with ES5 engines
- Fallback to follow so this will work with pre-ES5 engines
- As such, I do not recommend using this commit outside of ES5-compliant engines that work properly with getters/setters
- This does NOT include IE8, as IE8 only works with getters/setters on DOM elements
2011-03-02 23:21:10 -05:00
Mike Gerwitz
74c2fc57c1
Initial implementation of protected members
...
- This was quite the pain in the ass
- There are additional considerations. I DO NOT recommend using this commit. Check out a later commit.
2011-03-02 20:43:24 -05:00
Mike Gerwitz
2af7bcf45d
Merge branch 'master' into visibility/master
2011-03-02 07:54:52 -05:00
Mike Gerwitz
d74c01b562
Removed visibility dependency from test-class-abstract
2011-03-02 07:53:58 -05:00
Mike Gerwitz
40228361a1
test-class-parent no longer relies on member visibility to succeed
...
- This is important for pending changes
2011-03-02 07:51:18 -05:00
Mike Gerwitz
e239352fc0
Resolved bug that was causing the system to think that Object prototype members were part of the abstract member list when attempting to define a method with the same name
2011-03-01 12:11:36 -05:00
Mike Gerwitz
02d0c07f98
Extended existing visibility tests to include methods
2011-01-27 22:39:52 -05:00
Mike Gerwitz
38c16048cb
Began adding protected/private member support
...
- No longer adding ANY properties to prototype
- protected/private members no longer part of the public access level
2011-01-27 22:35:40 -05:00
Mike Gerwitz
881edc0cc6
Preparing to remove abstractMethods from public prototype; now uses hash for performance since it no longer needs to be referenced cleanly externally
...
- It will be later referenced via reflection
2011-01-25 00:13:47 -05:00
Mike Gerwitz
188ad2f4eb
Getters/setters are not supported within interface definitions
2011-01-24 23:56:54 -05:00
Mike Gerwitz
c7b262b271
Concrete methods cannot be overridden by abstract methods
2011-01-24 23:52:06 -05:00
Mike Gerwitz
37e5b1d94d
util.propCopy() no longer needed
2011-01-24 23:38:27 -05:00
Mike Gerwitz
2a54662716
Added getter/setter keywords to propParse
2011-01-24 23:27:55 -05:00
Mike Gerwitz
96d2f74dae
Method builder wraps overrides in an override function
2011-01-21 23:16:20 -05:00
Mike Gerwitz
e03d5861bb
Overridden methods must have >= length parameter lists
2011-01-21 22:19:22 -05:00
Mike Gerwitz
b8a6aa2af6
Method builder does not permit overriding properties with methods
2011-01-21 21:53:31 -05:00
Mike Gerwitz
12e5b48a7d
Cannot override method with property
2011-01-21 21:43:18 -05:00
Mike Gerwitz
dea6972416
Began adding basic method builder (currently operates the same as property builder)
...
- They are essentially the same, but the method builder will have additional logic (e.g. method overriding) and support different keywords
2011-01-21 20:54:55 -05:00
Mike Gerwitz
906e468cdf
Refactored test logic that will be shared between multiple members into inc-member_builder-common.js to reduce code duplication
2011-01-21 20:46:24 -05:00
Mike Gerwitz
2205af8c07
Can initialize member object with existing objects for each level of visibility
2011-01-20 23:56:39 -05:00
Mike Gerwitz
96cee9660b
Began adding member_builder.initMembers()
2011-01-20 23:53:00 -05:00
Mike Gerwitz
3c45912f25
Added getter/setter to member builder
2011-01-20 23:50:53 -05:00
Mike Gerwitz
b34e0b45f6
Property member builder tests now use object and deepEqual() to ensure that property is copied as intended
2011-01-20 22:22:12 -05:00
Mike Gerwitz
f25ae7cb43
Made property member builder tests more specific to ensure that properties are not copied to multiple prototypes
2011-01-20 22:19:06 -05:00
Mike Gerwitz
a58b7989ee
Throws TypeError if multiple visibility keywords are given to member builder
2011-01-20 22:11:36 -05:00
Mike Gerwitz
9a5fe96c3e
Result of buildProp() in tests unneeded
2011-01-20 21:53:18 -05:00
Mike Gerwitz
7f92a76e1f
Member builder uses public prototype by default
2011-01-20 21:50:52 -05:00
Mike Gerwitz
f27b0b01ab
Member builder recognizes private members
2011-01-20 21:48:09 -05:00
Mike Gerwitz
0ba3122db5
Member builder recognizes protected members
2011-01-20 21:46:49 -05:00
Mike Gerwitz
23a7d9d540
Began adding member_builder
2011-01-18 23:47:58 -05:00
Mike Gerwitz
96f5b8ff58
Multiple spaces now properly handled in keyword parser
2011-01-18 19:33:33 -05:00
Mike Gerwitz
7dab5c7b20
Keywords are now returned by propParse
2011-01-17 22:24:02 -05:00
Mike Gerwitz
1f661bebcd
Altered property keyword parser tests to be more easily recognizable
2011-01-17 20:41:04 -05:00
Mike Gerwitz
afc5d4668d
Abstract classes also have a more intuitive string representation
2011-01-17 20:22:30 -05:00
Mike Gerwitz
d19638be4f
Classes now return a more intuitive string representation
2011-01-17 20:20:39 -05:00
Mike Gerwitz
1b40451aad
Put class-implement tests into self-executing functions in testdox format to make them more easily recognized
...
- Eventually, I'd like for all the tests to be in this format
2011-01-11 19:03:30 -05:00
Mike Gerwitz
7fb0f6a820
Classes now contain implement() method
2011-01-10 19:56:09 -05:00
Mike Gerwitz
e822bc8840
Combined test now testing for Interface export
2011-01-09 02:00:36 -05:00
Mike Gerwitz
aa1d38b007
Added deep cloning for objects
2011-01-09 01:46:46 -05:00
Mike Gerwitz
0f905481bf
Added deep cloning for arrays
2011-01-09 01:38:40 -05:00
Mike Gerwitz
56c13b757b
isInstanceOf() now works with interfaces
2011-01-04 00:37:54 -05:00
Mike Gerwitz
c3b00ab9b7
Encapsulating implemented list (can use isInstanceOf() or a future reflection API)
2011-01-03 23:41:45 -05:00